",
+]
+`;
+
+exports[`loader should register dependencies using the "messages" API: errors 1`] = `[]`;
+
+exports[`loader should register dependencies using the "messages" API: warnings 1`] = `[]`;
+
+exports[`loader should reuse PostCSS AST: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`loader should reuse PostCSS AST: errors 1`] = `[]`;
+
+exports[`loader should reuse PostCSS AST: warnings 1`] = `[]`;
+
+exports[`loader should throw an error on invalid syntax: errors 1`] = `
+[
+ "ModuleBuildError: Module build failed (from \`replaced original path\`):
+SyntaxError
+
+(1:3) /test/fixtures/css/style.css Unnecessary curly bracket
+
+> 1 | a {
+ | ^
+ 2 | color: black;
+ 3 | }
+",
+]
+`;
+
+exports[`loader should throw an error on invalid syntax: warnings 1`] = `[]`;
+
+exports[`loader should work with SugarSS: css 1`] = `
+"a {
+ color: black
+}
+"
+`;
+
+exports[`loader should work with SugarSS: errors 1`] = `[]`;
+
+exports[`loader should work with SugarSS: warnings 1`] = `[]`;
+
+exports[`loader should work: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`loader should work: errors 1`] = `[]`;
+
+exports[`loader should work: warnings 1`] = `[]`;
diff --git a/test/__snapshots__/postcssOptions.test.js.snap b/test/__snapshots__/postcssOptions.test.js.snap
new file mode 100644
index 00000000..6a1d3cf6
--- /dev/null
+++ b/test/__snapshots__/postcssOptions.test.js.snap
@@ -0,0 +1,1467 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`"postcssOptions" option should throw an error with "syntax" option on the unresolved syntax: errors 1`] = `
+[
+ "ModuleBuildError: Module build failed (from \`replaced original path\`):
+TypeError: Cannot read properties of undefined (reading 'parse')",
+ "ModuleError: Module Error (from \`replaced original path\`):
+Loading PostCSS "unresolved" syntax failed: Cannot find module 'unresolved' from 'src/utils.js'",
+]
+`;
+
+exports[`"postcssOptions" option should throw an error with "syntax" option on the unresolved syntax: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should throw an error with the "config" option on the invalid config: errors 1`] = `
+[
+ "ModuleBuildError: Module build failed (from \`replaced original path\`):
+Error: invalid postcss config",
+]
+`;
+
+exports[`"postcssOptions" option should throw an error with the "config" option on the invalid config: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should throw an error with the "config" option on the unresolved config: errors 1`] = `
+[
+ "ModuleBuildError: Module build failed (from \`replaced original path\`):
+Error: No PostCSS config found in: /test/fixtures/config-scope/css/unresolve.js",
+]
+`;
+
+exports[`"postcssOptions" option should throw an error with the "config" option on the unresolved config: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should throw an error with the "parser" option on the unresolved parser: errors 1`] = `
+[
+ "ModuleBuildError: Module build failed (from \`replaced original path\`):
+TypeError: parser is not a function",
+ "ModuleError: Module Error (from \`replaced original path\`):
+Loading PostCSS "unresolved" parser failed: Cannot find module 'unresolved' from 'src/utils.js'",
+]
+`;
+
+exports[`"postcssOptions" option should throw an error with the "parser" option on the unresolved parser: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should throw an error with the "plugins" option on the unresolved plugin: errors 1`] = `
+[
+ "ModuleError: Module Error (from \`replaced original path\`):
+Loading PostCSS "postcss-unresolved" plugin failed: Cannot find module 'postcss-unresolved' from 'src/utils.js'",
+]
+`;
+
+exports[`"postcssOptions" option should throw an error with the "plugins" option on the unresolved plugin: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should throw an error with the "stringifier" option on the unresolved stringifier: errors 1`] = `
+[
+ "ModuleBuildError: Module build failed (from \`replaced original path\`):
+TypeError: this.stringify is not a function",
+ "ModuleError: Module Error (from \`replaced original path\`):
+Loading PostCSS "unresolved" stringifier failed: Cannot find module 'unresolved' from 'src/utils.js'",
+]
+`;
+
+exports[`"postcssOptions" option should throw an error with the "stringifier" option on the unresolved stringifier: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work "Function" value and with "Array" syntax of the "plugins" option: css 1`] = `
+"a {
+ color: rgba(0, 0, 0, 1.0);
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work "Function" value and with "Array" syntax of the "plugins" option: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work "Function" value and with "Array" syntax of the "plugins" option: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work "Function" value and with "Object" syntax of the "plugins" option: css 1`] = `
+"a {
+ color: rgba(0, 0, 0, 1.0);
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work "Function" value and with "Object" syntax of the "plugins" option: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work "Function" value and with "Object" syntax of the "plugins" option: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work "Function" value: css 1`] = `
+"a {
+ color: rgba(0, 0, 0, 1.0);
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work "Function" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work "Function" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work and provide API for the configuration: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ border-top-color: blue;
+ border-right-color: blue;
+ border-left-color: blue;
+ background-color: #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work and provide API for the configuration: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work and provide API for the configuration: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with "from", "to" and "map" options (absolute paths): css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with "from", "to" and "map" options (absolute paths): errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with "from", "to" and "map" options (absolute paths): map 1`] = `undefined`;
+
+exports[`"postcssOptions" option should work with "from", "to" and "map" options (absolute paths): warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with "from", "to" and "map" options (relative paths): css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with "from", "to" and "map" options (relative paths): errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with "from", "to" and "map" options (relative paths): map 1`] = `undefined`;
+
+exports[`"postcssOptions" option should work with "from", "to" and "map" options (relative paths): warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options "String" value (relative path): css 1`] = `
+"a { color: rgba(0, 0, 0, 1.0) }
+
+.foo {
+ float: right;
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "config" options "String" value (relative path): errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options "String" value (relative path): warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options and resolve "from" and "to" options: css 1`] = `
+"a { color: black }
+
+.foo {
+ float: right;
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "config" options and resolve "from" and "to" options: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options and resolve "from" and "to" options: source map 1`] = `
+{
+ "file": "style.css",
+ "mappings": "AAAA,IAAI,aAAa;;AAEjB;EACE,YAAY;AACd",
+ "names": [],
+ "sourceRoot": "",
+ "sources": [
+ "style.css",
+ ],
+ "sourcesContent": [
+ "a { color: black }
+
+.foo {
+ float: right;
+}
+",
+ ],
+ "version": 3,
+}
+`;
+
+exports[`"postcssOptions" option should work with the "config" options and resolve "from" and "to" options: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options and use plugins: css 1`] = `
+"a { color: black }
+
+.foo {
+ float: right;
+}
+
+.bar {
+ border-top-color: blue;
+ border-right-color: blue;
+ border-left-color: blue;
+ background-color: #fafafa;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root:not(.is-light) { /* :root is for HTML documents */
+ --text-color: white
+ }
+ html:not(.is-light) body {
+ background: black
+ }
+}
+
+:root.is-dark { /* :root is for HTML documents */
+ --text-color: white
+ }
+
+html.is-dark body {
+ background: black
+ }"
+`;
+
+exports[`"postcssOptions" option should work with the "config" options and use plugins: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options and use plugins: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options with "String" value (absolute path): css 1`] = `
+"a { color: rgba(0, 0, 0, 1.0) }
+
+.foo {
+ float: right;
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "config" options with "String" value (absolute path): errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options with "String" value (absolute path): warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options with "String" value (with path to the directory with the configuration): css 1`] = `
+"a { color: rgba(0, 0, 0, 1.0) }
+
+.foo {
+ float: right;
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "config" options with "String" value (with path to the directory with the configuration): errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options with "String" value (with path to the directory with the configuration): warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options with "String" value and respect all options: css 1`] = `
+"a {
+ color: black
+}
+
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLnNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtFQUNFO0FBREYiLCJmaWxlIjoic3R5bGUuY3NzIiwic291cmNlc0NvbnRlbnQiOlsiYVxuICBjb2xvcjogYmxhY2tcbiJdfQ== */"
+`;
+
+exports[`"postcssOptions" option should work with the "config" options with "String" value and respect all options: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options with "String" value and respect all options: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options with "false" value: css 1`] = `
+"a { color: black }
+
+.foo {
+ float: right;
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "config" options with "false" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options with "false" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options with "package.json" configuration: css 1`] = `
+".import {
+ color: red;
+}
+
+.test {
+ color: blue;
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "config" options with "package.json" configuration: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options with "package.json" configuration: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options with "true" value: css 1`] = `
+"a { color: rgba(0, 0, 0, 1.0) }
+
+.foo {
+ float: right;
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "config" options with "true" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "config" options with "true" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "map" option and generate inlined source maps: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiJzdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJhIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuXG5hIHtcbiAgY29sb3I6IHJlZDtcbn1cblxuYSB7XG4gIGNvbG9yOiBncmVlbjtcbn1cblxuYSB7XG4gIGNvbG9yOiBibHVlO1xufVxuXG4uY2xhc3Mge1xuICAteC1ib3JkZXItY29sb3I6IGJsdWUgYmx1ZSAqO1xuICAteC1jb2xvcjogKiAjZmFmYWZhO1xufVxuXG4uY2xhc3MtZm9vIHtcbiAgLXotYm9yZGVyLWNvbG9yOiBibHVlIGJsdWUgKjtcbiAgLXotY29sb3I6ICogI2ZhZmFmYTtcbn1cblxuLnBob25lIHtcbiAgJl90aXRsZSB7XG4gICAgd2lkdGg6IDUwMHB4O1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICB9XG5cbiAgICBib2R5LmlzX2RhcmsgJiB7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuICB9XG5cbiAgaW1nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuIl19 */"
+`;
+
+exports[`"postcssOptions" option should work with the "map" option and generate inlined source maps: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "map" option and generate inlined source maps: map 1`] = `undefined`;
+
+exports[`"postcssOptions" option should work with the "map" option and generate inlined source maps: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "parser" option with "Function" value: css 1`] = `
+"a {
+ color: black
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "parser" option with "Function" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "parser" option with "Function" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "parser" option with "Object" value: css 1`] = `
+"a {
+ color: black
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "parser" option with "Object" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "parser" option with "Object" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "parser" option with "String" value: css 1`] = `
+"a {
+ color: black
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "parser" option with "String" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "parser" option with "String" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value and not throw an error on falsy plugin: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value and not throw an error on falsy plugin: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value and override the previous plugin options: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ border-top-color: blue;
+ border-right-color: blue;
+ border-left-color: blue;
+ background-color: #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value and override the previous plugin options: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value and override the previous plugin options: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value and support disabling plugins from the configuration: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value and support disabling plugins from the configuration: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value and support disabling plugins from the configuration: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value, and config, and override the previous plugin options: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ border-top-color: blue;
+ border-right-color: blue;
+ border-left-color: blue;
+ background-color: #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value, and config, and override the previous plugin options: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value, and config, and override the previous plugin options: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value: css 1`] = `
+"a {
+ color: rgba(0, 0, 0, 1.0);
+}
+
+a {
+ color: rgba(255, 0, 0, 1.0);
+}
+
+a {
+ color: rgba(0, 255, 0, 1.0);
+}
+
+a {
+ color: rgba(0, 0, 255, 1.0);
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ border-top-color: rgba(0, 0, 255, 1.0);
+ border-right-color: rgba(0, 0, 255, 1.0);
+ border-left-color: rgba(0, 0, 255, 1.0);
+ background-color: #fafafa;
+}
+
+.phone_title {
+ width: 100px;
+ }
+
+@media (max-width: 500px) {
+
+.phone_title {
+ width: 100px
+ }
+ }
+
+body.is_dark .phone_title {
+ color: rgba(0, 0, 0, 0);
+ }
+
+.phone img {
+ display: block;
+ }
+"
+`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Array" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value and only disabled plugins: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value and only disabled plugins: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value and only disabled plugins: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value and override the previous plugin options: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ border-top-color: blue;
+ border-right-color: blue;
+ border-left-color: blue;
+ background-color: #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value and override the previous plugin options: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value and override the previous plugin options: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value and support disabling plugins from the configuration: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value and support disabling plugins from the configuration: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value and support disabling plugins from the configuration: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value, and config, and override the previous plugin options: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ border-top-color: blue;
+ border-right-color: blue;
+ border-left-color: blue;
+ background-color: #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value, and config, and override the previous plugin options: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value, and config, and override the previous plugin options: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: rgba(0, 0, 255, 1.0);
+}
+
+.class {
+ border-top-color: rgba(0, 0, 255, 1.0);
+ border-right-color: rgba(0, 0, 255, 1.0);
+ border-left-color: rgba(0, 0, 255, 1.0);
+ background-color: #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone_title {
+ width: 500px;
+ }
+
+@media (max-width: 500px) {
+
+.phone_title {
+ width: auto
+ }
+ }
+
+body.is_dark .phone_title {
+ color: white;
+ }
+
+.phone img {
+ display: block;
+ }
+"
+`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with "Object" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with empty "Array" value: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with empty "Array" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with empty "Array" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with empty "Object" value: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with empty "Object" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with empty "Object" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with the "default" property with options: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: rgba(0, 0, 255, 0.5);
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with the "default" property with options: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with the "default" property with options: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with the "default" property without options: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: rgba(0, 0, 255, 1.0);
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with the "default" property without options: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "plugins" option with the "default" property without options: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "stringifier" option with "Function" value: css 1`] = `
+"a {
+ color : black ;
+}
+
+a {
+ color : red ;
+}
+
+a {
+ color : green ;
+}
+
+a {
+ color : blue ;
+}
+
+.class {
+ -x-border-color : blue blue * ;
+ -x-color : * #fafafa ;
+}
+
+.class-foo {
+ -z-border-color : blue blue * ;
+ -z-color : * #fafafa ;
+}
+
+.phone {
+ _title {
+ width : 500px ;
+
+ @media ( max-width : 500px ) {
+ width : auto ;
+ }
+
+ body .is_dark {
+ color : white ;
+ }
+ }
+
+ img {
+ display : block ;
+ }
+}
+
"
+`;
+
+exports[`"postcssOptions" option should work with the "stringifier" option with "Function" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "stringifier" option with "Function" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "stringifier" option with "Object" value: css 1`] = `
+"a
+ color: black
+
+a
+ color: red
+
+a
+ color: green
+
+a
+ color: blue
+
+.class
+ -x-border-color: blue blue *
+ -x-color: * #fafafa
+
+.class-foo
+ -z-border-color: blue blue *
+ -z-color: * #fafafa
+
+.phone
+ &_title
+ width: 500px
+
+ @media (max-width: 500px)
+ width: auto
+
+ body.is_dark &
+ color: white
+
+ img
+ display: block
+"
+`;
+
+exports[`"postcssOptions" option should work with the "stringifier" option with "Object" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "stringifier" option with "Object" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "stringifier" option with "String" value: css 1`] = `
+"a
+ color: black
+
+a
+ color: red
+
+a
+ color: green
+
+a
+ color: blue
+
+.class
+ -x-border-color: blue blue *
+ -x-color: * #fafafa
+
+.class-foo
+ -z-border-color: blue blue *
+ -z-color: * #fafafa
+
+.phone
+ &_title
+ width: 500px
+
+ @media (max-width: 500px)
+ width: auto
+
+ body.is_dark &
+ color: white
+
+ img
+ display: block
+"
+`;
+
+exports[`"postcssOptions" option should work with the "stringifier" option with "String" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "stringifier" option with "String" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "syntax" option with "Object" value: css 1`] = `
+"a
+ color: black
+"
+`;
+
+exports[`"postcssOptions" option should work with the "syntax" option with "Object" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "syntax" option with "Object" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "syntax" option with "String" value: css 1`] = `
+"a
+ color: black
+"
+`;
+
+exports[`"postcssOptions" option should work with the "syntax" option with "String" value: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work with the "syntax" option with "String" value: warnings 1`] = `[]`;
+
+exports[`"postcssOptions" option should work without the specified values in the "postcssOptions" option: css 1`] = `
+"a { color: rgba(0, 0, 0, 1.0) }
+
+.foo {
+ float: right;
+}
+"
+`;
+
+exports[`"postcssOptions" option should work without the specified values in the "postcssOptions" option: errors 1`] = `[]`;
+
+exports[`"postcssOptions" option should work without the specified values in the "postcssOptions" option: warnings 1`] = `[]`;
diff --git a/test/__snapshots__/sourceMap.test.js.snap b/test/__snapshots__/sourceMap.test.js.snap
new file mode 100644
index 00000000..c1fbe941
--- /dev/null
+++ b/test/__snapshots__/sourceMap.test.js.snap
@@ -0,0 +1,791 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`"sourceMap" option should generate inline source maps when the "devtool" is "false": css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiJzdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJhIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuXG5hIHtcbiAgY29sb3I6IHJlZDtcbn1cblxuYSB7XG4gIGNvbG9yOiBncmVlbjtcbn1cblxuYSB7XG4gIGNvbG9yOiBibHVlO1xufVxuXG4uY2xhc3Mge1xuICAteC1ib3JkZXItY29sb3I6IGJsdWUgYmx1ZSAqO1xuICAteC1jb2xvcjogKiAjZmFmYWZhO1xufVxuXG4uY2xhc3MtZm9vIHtcbiAgLXotYm9yZGVyLWNvbG9yOiBibHVlIGJsdWUgKjtcbiAgLXotY29sb3I6ICogI2ZhZmFmYTtcbn1cblxuLnBob25lIHtcbiAgJl90aXRsZSB7XG4gICAgd2lkdGg6IDUwMHB4O1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICB9XG5cbiAgICBib2R5LmlzX2RhcmsgJiB7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuICB9XG5cbiAgaW1nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuIl19 */"
+`;
+
+exports[`"sourceMap" option should generate inline source maps when the "devtool" is "false": errors 1`] = `[]`;
+
+exports[`"sourceMap" option should generate inline source maps when the "devtool" is "false": warnings 1`] = `[]`;
+
+exports[`"sourceMap" option should generate inline source maps when the "devtool" is "true": css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLmNzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSIsImZpbGUiOiJzdHlsZS5jc3MiLCJzb3VyY2VzQ29udGVudCI6WyJhIHtcbiAgY29sb3I6IGJsYWNrO1xufVxuXG5hIHtcbiAgY29sb3I6IHJlZDtcbn1cblxuYSB7XG4gIGNvbG9yOiBncmVlbjtcbn1cblxuYSB7XG4gIGNvbG9yOiBibHVlO1xufVxuXG4uY2xhc3Mge1xuICAteC1ib3JkZXItY29sb3I6IGJsdWUgYmx1ZSAqO1xuICAteC1jb2xvcjogKiAjZmFmYWZhO1xufVxuXG4uY2xhc3MtZm9vIHtcbiAgLXotYm9yZGVyLWNvbG9yOiBibHVlIGJsdWUgKjtcbiAgLXotY29sb3I6ICogI2ZhZmFmYTtcbn1cblxuLnBob25lIHtcbiAgJl90aXRsZSB7XG4gICAgd2lkdGg6IDUwMHB4O1xuXG4gICAgQG1lZGlhIChtYXgtd2lkdGg6IDUwMHB4KSB7XG4gICAgICB3aWR0aDogYXV0bztcbiAgICB9XG5cbiAgICBib2R5LmlzX2RhcmsgJiB7XG4gICAgICBjb2xvcjogd2hpdGU7XG4gICAgfVxuICB9XG5cbiAgaW1nIHtcbiAgICBkaXNwbGF5OiBibG9jaztcbiAgfVxufVxuIl19 */"
+`;
+
+exports[`"sourceMap" option should generate inline source maps when the "devtool" is "true": errors 1`] = `[]`;
+
+exports[`"sourceMap" option should generate inline source maps when the "devtool" is "true": warnings 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps using the "postcssOptions.map" option with "true" value and previous loader returns source maps ("sass-loader"): css 1`] = `
+"a {
+ color: coral;
+}
+/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0eWxlLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFBSSIsImZpbGUiOiJzdHlsZS5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiYSB7XG4gIGNvbG9yOiBjb3JhbDtcbn0iXX0= */"
+`;
+
+exports[`"sourceMap" option should generate source maps using the "postcssOptions.map" option with "true" value and previous loader returns source maps ("sass-loader"): errors 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps using the "postcssOptions.map" option with "true" value and previous loader returns source maps ("sass-loader"): warnings 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps using the "postcssOptions.map" option with values and previous loader returns source maps ("sass-loader"): css 1`] = `
+"a {
+ color: coral;
+}
+/*# sourceMappingURL=style.scss.map */"
+`;
+
+exports[`"sourceMap" option should generate source maps using the "postcssOptions.map" option with values and previous loader returns source maps ("sass-loader"): errors 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps using the "postcssOptions.map" option with values and previous loader returns source maps ("sass-loader"): source map 1`] = `
+{
+ "file": "style.scss",
+ "mappings": "AAAA;EAAI",
+ "names": [],
+ "sourceRoot": "",
+ "sources": [
+ "style.scss",
+ ],
+ "sourcesContent": [
+ "a {
+ color: coral;
+}",
+ ],
+ "version": 3,
+}
+`;
+
+exports[`"sourceMap" option should generate source maps using the "postcssOptions.map" option with values and previous loader returns source maps ("sass-loader"): warnings 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps when previous loader returns source maps ("less-loader"): css 1`] = `
+"a {
+ color: coral;
+}
+"
+`;
+
+exports[`"sourceMap" option should generate source maps when previous loader returns source maps ("less-loader"): errors 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps when previous loader returns source maps ("less-loader"): source map 1`] = `
+{
+ "mappings": "AAAA;EAAI,YAAA",
+ "names": [],
+ "sourceRoot": "",
+ "sources": [
+ "less/style.less",
+ ],
+ "sourcesContent": [
+ "a {
+ color: coral;
+}
+",
+ ],
+ "version": 3,
+}
+`;
+
+exports[`"sourceMap" option should generate source maps when previous loader returns source maps ("less-loader"): warnings 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps when previous loader returns source maps ("sass-loader"): css 1`] = `
+"a {
+ color: coral;
+}"
+`;
+
+exports[`"sourceMap" option should generate source maps when previous loader returns source maps ("sass-loader"): errors 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps when previous loader returns source maps ("sass-loader"): source map 1`] = `
+{
+ "mappings": "AAAA;EAAI",
+ "names": [],
+ "sourceRoot": "",
+ "sources": [
+ "scss/style.scss",
+ ],
+ "sourcesContent": [
+ "a {
+ color: coral;
+}",
+ ],
+ "version": 3,
+}
+`;
+
+exports[`"sourceMap" option should generate source maps when previous loader returns source maps ("sass-loader"): warnings 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps when value is not specified and the "devtool" with "source-map" value: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"sourceMap" option should generate source maps when value is not specified and the "devtool" with "source-map" value: errors 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps when value is not specified and the "devtool" with "source-map" value: source map 1`] = `
+{
+ "mappings": "AAAA",
+ "names": [],
+ "sourceRoot": "",
+ "sources": [
+ "css/style.css",
+ ],
+ "sourcesContent": [
+ "a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+",
+ ],
+ "version": 3,
+}
+`;
+
+exports[`"sourceMap" option should generate source maps when value is not specified and the "devtool" with "source-map" value: warnings 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps with "false" value, but the "postcssOptions.map" has values: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"sourceMap" option should generate source maps with "false" value, but the "postcssOptions.map" has values: errors 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps with "false" value, but the "postcssOptions.map" has values: source map 1`] = `
+{
+ "file": "style.css",
+ "mappings": "AAAA",
+ "names": [],
+ "sourceRoot": "",
+ "sources": [
+ "style.css",
+ ],
+ "sourcesContent": [
+ "a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+",
+ ],
+ "version": 3,
+}
+`;
+
+exports[`"sourceMap" option should generate source maps with "false" value, but the "postcssOptions.map" has values: warnings 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps with "true" value and the "devtool" option with "source-map" value: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"sourceMap" option should generate source maps with "true" value and the "devtool" option with "source-map" value: errors 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps with "true" value and the "devtool" option with "source-map" value: source map 1`] = `
+{
+ "mappings": "AAAA",
+ "names": [],
+ "sourceRoot": "",
+ "sources": [
+ "css/style.css",
+ ],
+ "sourcesContent": [
+ "a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+",
+ ],
+ "version": 3,
+}
+`;
+
+exports[`"sourceMap" option should generate source maps with "true" value and the "devtool" option with "source-map" value: warnings 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps with "true" value and the "devtool" with "false" value: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"sourceMap" option should generate source maps with "true" value and the "devtool" with "false" value: errors 1`] = `[]`;
+
+exports[`"sourceMap" option should generate source maps with "true" value and the "devtool" with "false" value: source map 1`] = `
+{
+ "mappings": "AAAA",
+ "names": [],
+ "sourceRoot": "",
+ "sources": [
+ "css/style.css",
+ ],
+ "sourcesContent": [
+ "a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+",
+ ],
+ "version": 3,
+}
+`;
+
+exports[`"sourceMap" option should generate source maps with "true" value and the "devtool" with "false" value: warnings 1`] = `[]`;
+
+exports[`"sourceMap" option should not generate source maps when value is not specified and the "devtool" option with "source-map" value: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"sourceMap" option should not generate source maps when value is not specified and the "devtool" option with "source-map" value: errors 1`] = `[]`;
+
+exports[`"sourceMap" option should not generate source maps when value is not specified and the "devtool" option with "source-map" value: warnings 1`] = `[]`;
+
+exports[`"sourceMap" option should not generate source maps with "false" value and the "devtool" option with "false" value: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"sourceMap" option should not generate source maps with "false" value and the "devtool" option with "false" value: errors 1`] = `[]`;
+
+exports[`"sourceMap" option should not generate source maps with "false" value and the "devtool" option with "false" value: warnings 1`] = `[]`;
+
+exports[`"sourceMap" option should not generate source maps with "false" value and the "devtool" option with "source-map" value: css 1`] = `
+"a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
+"
+`;
+
+exports[`"sourceMap" option should not generate source maps with "false" value and the "devtool" option with "source-map" value: errors 1`] = `[]`;
+
+exports[`"sourceMap" option should not generate source maps with "false" value and the "devtool" option with "source-map" value: warnings 1`] = `[]`;
diff --git a/test/__snapshots__/validate-options.test.js.snap b/test/__snapshots__/validate-options.test.js.snap
new file mode 100644
index 00000000..f0138977
--- /dev/null
+++ b/test/__snapshots__/validate-options.test.js.snap
@@ -0,0 +1,158 @@
+// Jest Snapshot v1, https://goo.gl/fbAQLP
+
+exports[`validate options should throw an error on the "execute" option with "/test/" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.execute should be a boolean.
+ -> Enables/Disables PostCSS parser support in 'CSS-in-JS'.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#execute"
+`;
+
+exports[`validate options should throw an error on the "execute" option with "[]" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.execute should be a boolean.
+ -> Enables/Disables PostCSS parser support in 'CSS-in-JS'.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#execute"
+`;
+
+exports[`validate options should throw an error on the "execute" option with "{"foo":"bar"}" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.execute should be a boolean.
+ -> Enables/Disables PostCSS parser support in 'CSS-in-JS'.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#execute"
+`;
+
+exports[`validate options should throw an error on the "execute" option with "{}" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.execute should be a boolean.
+ -> Enables/Disables PostCSS parser support in 'CSS-in-JS'.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#execute"
+`;
+
+exports[`validate options should throw an error on the "execute" option with "1" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.execute should be a boolean.
+ -> Enables/Disables PostCSS parser support in 'CSS-in-JS'.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#execute"
+`;
+
+exports[`validate options should throw an error on the "execute" option with "test" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.execute should be a boolean.
+ -> Enables/Disables PostCSS parser support in 'CSS-in-JS'.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#execute"
+`;
+
+exports[`validate options should throw an error on the "implementation" option with "/test/" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.implementation should be one of these:
+ string | function
+ -> The implementation of postcss to use, instead of the locally installed version
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#implementation
+ Details:
+ * options.implementation should be a string.
+ * options.implementation should be an instance of function."
+`;
+
+exports[`validate options should throw an error on the "implementation" option with "[]" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.implementation should be one of these:
+ string | function
+ -> The implementation of postcss to use, instead of the locally installed version
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#implementation
+ Details:
+ * options.implementation should be a string.
+ * options.implementation should be an instance of function."
+`;
+
+exports[`validate options should throw an error on the "implementation" option with "{}" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.implementation should be one of these:
+ string | function
+ -> The implementation of postcss to use, instead of the locally installed version
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#implementation
+ Details:
+ * options.implementation should be a string.
+ * options.implementation should be an instance of function."
+`;
+
+exports[`validate options should throw an error on the "implementation" option with "1" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.implementation should be one of these:
+ string | function
+ -> The implementation of postcss to use, instead of the locally installed version
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#implementation
+ Details:
+ * options.implementation should be a string.
+ * options.implementation should be an instance of function."
+`;
+
+exports[`validate options should throw an error on the "postcssOptions" option with "{"config":[]}" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.postcssOptions should be one of these:
+ object { config?, β¦ } | function
+ -> Options to pass through to \`Postcss\`.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#postcssOptions
+ Details:
+ * options.postcssOptions.config should be one of these:
+ string | boolean
+ -> Allows to specify PostCSS config path.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#config
+ Details:
+ * options.postcssOptions.config should be a string.
+ -> Allows to specify the path to the configuration file
+ * options.postcssOptions.config should be a boolean.
+ -> Enables/Disables autoloading config"
+`;
+
+exports[`validate options should throw an error on the "postcssOptions" option with "{"config":{}}" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.postcssOptions should be one of these:
+ object { config?, β¦ } | function
+ -> Options to pass through to \`Postcss\`.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#postcssOptions
+ Details:
+ * options.postcssOptions.config should be one of these:
+ string | boolean
+ -> Allows to specify PostCSS config path.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#config
+ Details:
+ * options.postcssOptions.config should be a string.
+ -> Allows to specify the path to the configuration file
+ * options.postcssOptions.config should be a boolean.
+ -> Enables/Disables autoloading config"
+`;
+
+exports[`validate options should throw an error on the "sourceMap" option with "/test/" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.sourceMap should be a boolean.
+ -> Enables/Disables generation of source maps.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#sourcemap"
+`;
+
+exports[`validate options should throw an error on the "sourceMap" option with "[]" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.sourceMap should be a boolean.
+ -> Enables/Disables generation of source maps.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#sourcemap"
+`;
+
+exports[`validate options should throw an error on the "sourceMap" option with "{}" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.sourceMap should be a boolean.
+ -> Enables/Disables generation of source maps.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#sourcemap"
+`;
+
+exports[`validate options should throw an error on the "sourceMap" option with "1" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.sourceMap should be a boolean.
+ -> Enables/Disables generation of source maps.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#sourcemap"
+`;
+
+exports[`validate options should throw an error on the "sourceMap" option with "something" value 1`] = `
+"Invalid options object. PostCSS Loader has been initialized using an options object that does not match the API schema.
+ - options.sourceMap should be a boolean.
+ -> Enables/Disables generation of source maps.
+ -> Read more at https://github.com/webpack-contrib/postcss-loader#sourcemap"
+`;
diff --git a/test/cases/broken.css b/test/cases/broken.css
deleted file mode 100644
index 2803e2d2..00000000
--- a/test/cases/broken.css
+++ /dev/null
@@ -1 +0,0 @@
-a { color:
diff --git a/test/cases/config/postcss.config.js b/test/cases/config/postcss.config.js
deleted file mode 100644
index 97de4edd..00000000
--- a/test/cases/config/postcss.config.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- plugins: []
-};
diff --git a/test/cases/config/style.css b/test/cases/config/style.css
deleted file mode 100644
index fa33ad5f..00000000
--- a/test/cases/config/style.css
+++ /dev/null
@@ -1 +0,0 @@
-a { color: black }
diff --git a/test/cases/env/postcss.config.js b/test/cases/env/postcss.config.js
deleted file mode 100644
index ead513fa..00000000
--- a/test/cases/env/postcss.config.js
+++ /dev/null
@@ -1,12 +0,0 @@
-var path = require('path');
-
-module.exports = function (ctx) {
- var plugin = function (css) {
- css.walkDecls('content', function (decl) {
- decl.value = '"' + path.basename(ctx.webpack.resourcePath) + '"';
- });
- };
- return {
- plugins: [plugin]
- };
-};
diff --git a/test/cases/env/style.css b/test/cases/env/style.css
deleted file mode 100644
index 0a7d373c..00000000
--- a/test/cases/env/style.css
+++ /dev/null
@@ -1 +0,0 @@
-a::before { content: "bad" }
diff --git a/test/cases/exec.js b/test/cases/exec.js
deleted file mode 100644
index 6f1afcdd..00000000
--- a/test/cases/exec.js
+++ /dev/null
@@ -1,9 +0,0 @@
-var postcssJs = require('postcss-js');
-
-var style = {
- a: {
- color: 'green'
- }
-};
-
-module.exports = postcssJs.parse(style);
diff --git a/test/cases/style.css b/test/cases/style.css
deleted file mode 100644
index fa33ad5f..00000000
--- a/test/cases/style.css
+++ /dev/null
@@ -1 +0,0 @@
-a { color: black }
diff --git a/test/cases/style.js b/test/cases/style.js
deleted file mode 100644
index d2536ceb..00000000
--- a/test/cases/style.js
+++ /dev/null
@@ -1,3 +0,0 @@
-module.exports = {
- a: { color: 'black' }
-};
diff --git a/test/cjs.test.js b/test/cjs.test.js
new file mode 100644
index 00000000..dc8321a3
--- /dev/null
+++ b/test/cjs.test.js
@@ -0,0 +1,8 @@
+import src from "../src";
+import cjs from "../src/cjs";
+
+describe("cjs", () => {
+ it("should exported", () => {
+ expect(cjs).toEqual(src);
+ });
+});
diff --git a/test/config-autoload.test.js b/test/config-autoload.test.js
new file mode 100644
index 00000000..c4c0c6cf
--- /dev/null
+++ b/test/config-autoload.test.js
@@ -0,0 +1,120 @@
+import path from "path";
+import fs from "fs";
+
+import { loadConfig } from "../src/utils";
+
+const testDirectory = path.resolve(__dirname, "fixtures", "config-autoload");
+
+const loaderContext = {
+ fs,
+ addBuildDependency: () => true,
+ addDependency: () => true,
+};
+
+describe("autoload config", () => {
+ it('should load ".postcssrc"', async () => {
+ const loadedConfig = await loadConfig(
+ loaderContext,
+ path.resolve(testDirectory, "rc")
+ );
+
+ expect(loadedConfig.config.map).toEqual(false);
+ expect(loadedConfig.config.from).toEqual("./test/rc/fixtures/index.css");
+ expect(loadedConfig.config.to).toEqual("./test/rc/expect/index.css");
+ expect(Object.keys(loadedConfig.config.plugins).length).toEqual(2);
+ expect(loadedConfig.filepath).toEqual(
+ path.resolve(testDirectory, "rc", ".postcssrc")
+ );
+ });
+
+ it('should load ".postcssrc.js"', async () => {
+ const loadedConfig = await loadConfig(
+ loaderContext,
+ path.resolve(testDirectory, "rc-js")
+ );
+
+ expect(loadedConfig.config.map).toEqual(false);
+ expect(loadedConfig.config.from).toEqual("./test/rc-js/fixtures/index.css");
+ expect(loadedConfig.config.to).toEqual("./test/rc-js/expect/index.css");
+ expect(Object.keys(loadedConfig.config.plugins).length).toEqual(2);
+ expect(loadedConfig.filepath).toEqual(
+ path.resolve(testDirectory, "rc-js", ".postcssrc.js")
+ );
+ });
+
+ it('should load "package.json"', async () => {
+ const loadedConfig = await loadConfig(
+ loaderContext,
+ path.resolve(testDirectory, "pkg")
+ );
+
+ expect(loadedConfig.config.parser).toEqual(false);
+ expect(loadedConfig.config.syntax).toEqual(false);
+ expect(loadedConfig.config.map).toEqual(false);
+ expect(loadedConfig.config.from).toEqual("./index.css");
+ expect(loadedConfig.config.to).toEqual("./index.css");
+ expect(Object.keys(loadedConfig.config.plugins).length).toEqual(2);
+ expect(loadedConfig.filepath).toEqual(
+ path.resolve(testDirectory, "pkg", "package.json")
+ );
+ });
+
+ it('should load "postcss.config.js" with "Object" syntax of plugins', async () => {
+ const loadedConfig = await loadConfig(
+ loaderContext,
+ path.resolve(testDirectory, "js/object")
+ );
+
+ expect(loadedConfig.config.map).toEqual(false);
+ expect(loadedConfig.config.from).toEqual(
+ "./test/fixtures/config-autoload/js/object/index.css"
+ );
+ expect(loadedConfig.config.to).toEqual(
+ "./test/fixtures/config-autoload/js/object/expect/index.css"
+ );
+ expect(Object.keys(loadedConfig.config.plugins).length).toEqual(2);
+ expect(loadedConfig.filepath).toEqual(
+ path.resolve(testDirectory, "js/object", "postcss.config.js")
+ );
+ });
+
+ it('should load "postcss.config.js" with "Array" syntax of plugins', async () => {
+ const loadedConfig = await loadConfig(
+ loaderContext,
+ path.resolve(testDirectory, "js/array")
+ );
+
+ expect(loadedConfig.config.map).toEqual(false);
+ expect(loadedConfig.config.from).toEqual(
+ "./test/fixtures/config-autoload/js/object/index.css"
+ );
+ expect(loadedConfig.config.to).toEqual(
+ "./test/fixtures/config-autoload/js/object/expect/index.css"
+ );
+ expect(Object.keys(loadedConfig.config.plugins).length).toEqual(4);
+ expect(loadedConfig.filepath).toEqual(
+ path.resolve(testDirectory, "js/array", "postcss.config.js")
+ );
+ });
+
+ it('should load empty ".postcssrc"', async () => {
+ const loadedConfig = await loadConfig(
+ loaderContext,
+ path.resolve(testDirectory, "empty/.postcssrc")
+ );
+
+ // eslint-disable-next-line no-undefined
+ expect(loadedConfig.config).toEqual(undefined);
+ expect(loadedConfig.filepath).toEqual(
+ path.resolve(testDirectory, "empty/.postcssrc")
+ );
+ });
+
+ it('should throw an error on "unresolved" config', async () => {
+ try {
+ await loadConfig(loaderContext, path.resolve("unresolved"));
+ } catch (error) {
+ expect(error.message).toMatch(/^No PostCSS config found in: (.*)$/);
+ }
+ });
+});
diff --git a/test/execute.test.js b/test/execute.test.js
new file mode 100644
index 00000000..4254378d
--- /dev/null
+++ b/test/execute.test.js
@@ -0,0 +1,122 @@
+import path from "path";
+
+import {
+ compile,
+ getCompiler,
+ getErrors,
+ getCodeFromBundle,
+ getWarnings,
+} from "./helpers";
+
+describe('"execute" option', () => {
+ it('should work with "Boolean" value', async () => {
+ const compiler = getCompiler(
+ "./jss/exec/index.js",
+ {},
+ {
+ module: {
+ rules: [
+ {
+ test: /style\.(exec\.js|js)$/i,
+ use: [
+ {
+ loader: require.resolve("./helpers/testLoader"),
+ options: {},
+ },
+ {
+ loader: path.resolve(__dirname, "../src"),
+ options: {
+ execute: true,
+ },
+ },
+ ],
+ },
+ ],
+ },
+ }
+ );
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.exec.js", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with "postcss-js" parser', async () => {
+ const compiler = getCompiler(
+ "./jss/postcss-js/index.js",
+ {},
+ {
+ module: {
+ rules: [
+ {
+ test: /style\.js$/i,
+ use: [
+ {
+ loader: require.resolve("./helpers/testLoader"),
+ options: {},
+ },
+ {
+ loader: path.resolve(__dirname, "../src"),
+ options: {
+ postcssOptions: {
+ parser: "postcss-js",
+ },
+ execute: true,
+ },
+ },
+ ],
+ },
+ ],
+ },
+ }
+ );
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.js", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it("should reuse PostCSS AST with JS styles", async () => {
+ const spy = jest.fn();
+ const compiler = getCompiler(
+ "./jss/exec/index.js",
+ {},
+ {
+ module: {
+ rules: [
+ {
+ test: /style\.(exec\.js|js)$/i,
+ use: [
+ {
+ loader: require.resolve("./helpers/testLoader"),
+ options: {},
+ },
+ {
+ loader: path.resolve(__dirname, "../src"),
+ options: {
+ execute: true,
+ },
+ },
+ {
+ loader: require.resolve("./helpers/astLoader"),
+ options: { spy, execute: true },
+ },
+ ],
+ },
+ ],
+ },
+ }
+ );
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.exec.js", stats);
+
+ expect(spy).toHaveBeenCalledTimes(1);
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+});
diff --git a/test/fixtures/config-autoload/empty/.postcssrc b/test/fixtures/config-autoload/empty/.postcssrc
new file mode 100644
index 00000000..8b137891
--- /dev/null
+++ b/test/fixtures/config-autoload/empty/.postcssrc
@@ -0,0 +1 @@
+
diff --git a/test/fixtures/config-autoload/empty/expect/index.css b/test/fixtures/config-autoload/empty/expect/index.css
new file mode 100644
index 00000000..500f931b
--- /dev/null
+++ b/test/fixtures/config-autoload/empty/expect/index.css
@@ -0,0 +1,7 @@
+.import {
+ color: red;
+}
+
+.test {
+ color: blue;
+}
diff --git a/test/fixtures/config-autoload/empty/expect/index.sss b/test/fixtures/config-autoload/empty/expect/index.sss
new file mode 100644
index 00000000..13f8e942
--- /dev/null
+++ b/test/fixtures/config-autoload/empty/expect/index.sss
@@ -0,0 +1,7 @@
+.import {
+ color: red
+}
+
+.test {
+ color: blue
+}
diff --git a/test/fixtures/config-autoload/empty/fixtures/imports/section.css b/test/fixtures/config-autoload/empty/fixtures/imports/section.css
new file mode 100644
index 00000000..626b1b56
--- /dev/null
+++ b/test/fixtures/config-autoload/empty/fixtures/imports/section.css
@@ -0,0 +1,3 @@
+.import {
+ color: red;
+}
diff --git a/test/fixtures/config-autoload/empty/fixtures/imports/section.sss b/test/fixtures/config-autoload/empty/fixtures/imports/section.sss
new file mode 100644
index 00000000..ecc74a7a
--- /dev/null
+++ b/test/fixtures/config-autoload/empty/fixtures/imports/section.sss
@@ -0,0 +1,2 @@
+.import
+ color: red
diff --git a/test/fixtures/config-autoload/empty/fixtures/index.css b/test/fixtures/config-autoload/empty/fixtures/index.css
new file mode 100644
index 00000000..48162650
--- /dev/null
+++ b/test/fixtures/config-autoload/empty/fixtures/index.css
@@ -0,0 +1,5 @@
+@import "https://github.com/imports/section.css";
+
+.test {
+ color: blue;
+}
diff --git a/test/fixtures/config-autoload/empty/fixtures/index.sss b/test/fixtures/config-autoload/empty/fixtures/index.sss
new file mode 100644
index 00000000..bedaed31
--- /dev/null
+++ b/test/fixtures/config-autoload/empty/fixtures/index.sss
@@ -0,0 +1,4 @@
+@import "https://github.com/imports/section.sss"
+
+.test
+ color: blue
diff --git a/test/fixtures/config-autoload/err/options/parser/.postcssrc.js b/test/fixtures/config-autoload/err/options/parser/.postcssrc.js
new file mode 100644
index 00000000..dba61ac0
--- /dev/null
+++ b/test/fixtures/config-autoload/err/options/parser/.postcssrc.js
@@ -0,0 +1,5 @@
+module.exports = function () {
+ return {
+ parser: 'postcss-parser'
+ }
+};
diff --git a/test/fixtures/config-autoload/err/options/stringifier/.postcssrc.js b/test/fixtures/config-autoload/err/options/stringifier/.postcssrc.js
new file mode 100644
index 00000000..390663f2
--- /dev/null
+++ b/test/fixtures/config-autoload/err/options/stringifier/.postcssrc.js
@@ -0,0 +1,5 @@
+module.exports = function () {
+ return {
+ stringifier: 'postcss-stringifier'
+ }
+};
diff --git a/test/fixtures/config-autoload/err/options/syntax/.postcssrc.js b/test/fixtures/config-autoload/err/options/syntax/.postcssrc.js
new file mode 100644
index 00000000..4804efcf
--- /dev/null
+++ b/test/fixtures/config-autoload/err/options/syntax/.postcssrc.js
@@ -0,0 +1,5 @@
+module.exports = function () {
+ return {
+ syntax: 'postcss-syntax'
+ }
+};
diff --git a/test/fixtures/config-autoload/err/plugins/.postcssrc.js b/test/fixtures/config-autoload/err/plugins/.postcssrc.js
new file mode 100644
index 00000000..c1f976e1
--- /dev/null
+++ b/test/fixtures/config-autoload/err/plugins/.postcssrc.js
@@ -0,0 +1,7 @@
+module.exports = function () {
+ return {
+ plugins: [
+ require('./plugin')
+ ]
+ }
+};
diff --git a/test/fixtures/config-autoload/err/plugins/array/.postcssrc.js b/test/fixtures/config-autoload/err/plugins/array/.postcssrc.js
new file mode 100644
index 00000000..96637a16
--- /dev/null
+++ b/test/fixtures/config-autoload/err/plugins/array/.postcssrc.js
@@ -0,0 +1,7 @@
+module.exports = function () {
+ return {
+ plugins: [
+ require('postcss-plugin')
+ ]
+ }
+};
diff --git a/test/fixtures/config-autoload/err/plugins/array/options/.postcssrc.js b/test/fixtures/config-autoload/err/plugins/array/options/.postcssrc.js
new file mode 100644
index 00000000..96637a16
--- /dev/null
+++ b/test/fixtures/config-autoload/err/plugins/array/options/.postcssrc.js
@@ -0,0 +1,7 @@
+module.exports = function () {
+ return {
+ plugins: [
+ require('postcss-plugin')
+ ]
+ }
+};
diff --git a/test/fixtures/config-autoload/err/plugins/object/.postcssrc.js b/test/fixtures/config-autoload/err/plugins/object/.postcssrc.js
new file mode 100644
index 00000000..a89a9768
--- /dev/null
+++ b/test/fixtures/config-autoload/err/plugins/object/.postcssrc.js
@@ -0,0 +1,7 @@
+module.exports = function () {
+ return {
+ plugins: {
+ 'postcss-plugin': {}
+ }
+ }
+};
diff --git a/test/fixtures/config-autoload/err/plugins/object/options/.postcssrc.js b/test/fixtures/config-autoload/err/plugins/object/options/.postcssrc.js
new file mode 100644
index 00000000..5985c978
--- /dev/null
+++ b/test/fixtures/config-autoload/err/plugins/object/options/.postcssrc.js
@@ -0,0 +1,7 @@
+module.exports = function () {
+ return {
+ plugins: {
+ 'postcss-plugin': { option: true }
+ }
+ }
+};
diff --git a/test/fixtures/config-autoload/err/plugins/plugin.js b/test/fixtures/config-autoload/err/plugins/plugin.js
new file mode 100644
index 00000000..8f7026e5
--- /dev/null
+++ b/test/fixtures/config-autoload/err/plugins/plugin.js
@@ -0,0 +1 @@
+module.exports = 'Invalid Plugin';
diff --git a/test/fixtures/config-autoload/js/array/imports/section.css b/test/fixtures/config-autoload/js/array/imports/section.css
new file mode 100644
index 00000000..4568aa99
--- /dev/null
+++ b/test/fixtures/config-autoload/js/array/imports/section.css
@@ -0,0 +1,3 @@
+.import {
+ color: goldenrod;
+}
diff --git a/test/fixtures/config-autoload/js/array/index.css b/test/fixtures/config-autoload/js/array/index.css
new file mode 100644
index 00000000..3b228825
--- /dev/null
+++ b/test/fixtures/config-autoload/js/array/index.css
@@ -0,0 +1,5 @@
+@import 'https://github.com/imports/section.css';
+
+.test {
+ color: cyan;
+}
diff --git a/test/fixtures/config-autoload/js/array/index.js b/test/fixtures/config-autoload/js/array/index.js
new file mode 100644
index 00000000..07bf0b31
--- /dev/null
+++ b/test/fixtures/config-autoload/js/array/index.js
@@ -0,0 +1,3 @@
+import style from './index.css'
+
+export default style
diff --git a/test/fixtures/config-autoload/js/array/postcss.config.js b/test/fixtures/config-autoload/js/array/postcss.config.js
new file mode 100644
index 00000000..33b130ba
--- /dev/null
+++ b/test/fixtures/config-autoload/js/array/postcss.config.js
@@ -0,0 +1,20 @@
+module.exports = function (api) {
+ return {
+ parser: 'sugarss',
+ syntax: 'sugarss',
+ map: api.mode === 'development' ? 'inline' : false,
+ from: './test/fixtures/config-autoload/js/object/index.css',
+ to: './test/fixtures/config-autoload/js/object/expect/index.css',
+ plugins: [
+ 'postcss-import',
+ [
+ 'postcss-nested',
+ {
+ // Options
+ }
+ ],
+ require('postcss-nested'),
+ require('postcss-nested')({ /* Options */ }),
+ ]
+ }
+};
diff --git a/test/fixtures/config-autoload/js/object/imports/section.css b/test/fixtures/config-autoload/js/object/imports/section.css
new file mode 100644
index 00000000..626b1b56
--- /dev/null
+++ b/test/fixtures/config-autoload/js/object/imports/section.css
@@ -0,0 +1,3 @@
+.import {
+ color: red;
+}
diff --git a/test/fixtures/config-autoload/js/object/index.css b/test/fixtures/config-autoload/js/object/index.css
new file mode 100644
index 00000000..48162650
--- /dev/null
+++ b/test/fixtures/config-autoload/js/object/index.css
@@ -0,0 +1,5 @@
+@import "https://github.com/imports/section.css";
+
+.test {
+ color: blue;
+}
diff --git a/test/fixtures/config-autoload/js/object/index.js b/test/fixtures/config-autoload/js/object/index.js
new file mode 100644
index 00000000..07bf0b31
--- /dev/null
+++ b/test/fixtures/config-autoload/js/object/index.js
@@ -0,0 +1,3 @@
+import style from './index.css'
+
+export default style
diff --git a/test/fixtures/config-autoload/js/object/postcss.config.js b/test/fixtures/config-autoload/js/object/postcss.config.js
new file mode 100644
index 00000000..b7e044db
--- /dev/null
+++ b/test/fixtures/config-autoload/js/object/postcss.config.js
@@ -0,0 +1,13 @@
+module.exports = function (api) {
+ return {
+ parser: 'sugarss',
+ syntax: 'sugarss',
+ map: api.mode === 'development' ? 'inline' : false,
+ from: './test/fixtures/config-autoload/js/object/index.css',
+ to: './test/fixtures/config-autoload/js/object/expect/index.css',
+ plugins: {
+ 'postcss-import': {},
+ 'postcss-nested': {},
+ }
+ }
+};
diff --git a/test/fixtures/config-autoload/pkg/imports/section.css b/test/fixtures/config-autoload/pkg/imports/section.css
new file mode 100644
index 00000000..626b1b56
--- /dev/null
+++ b/test/fixtures/config-autoload/pkg/imports/section.css
@@ -0,0 +1,3 @@
+.import {
+ color: red;
+}
diff --git a/test/fixtures/config-autoload/pkg/index.css b/test/fixtures/config-autoload/pkg/index.css
new file mode 100644
index 00000000..48162650
--- /dev/null
+++ b/test/fixtures/config-autoload/pkg/index.css
@@ -0,0 +1,5 @@
+@import "https://github.com/imports/section.css";
+
+.test {
+ color: blue;
+}
diff --git a/test/fixtures/config-autoload/pkg/index.js b/test/fixtures/config-autoload/pkg/index.js
new file mode 100644
index 00000000..07bf0b31
--- /dev/null
+++ b/test/fixtures/config-autoload/pkg/index.js
@@ -0,0 +1,3 @@
+import style from './index.css'
+
+export default style
diff --git a/test/fixtures/config-autoload/pkg/package.json b/test/fixtures/config-autoload/pkg/package.json
new file mode 100644
index 00000000..14995d0f
--- /dev/null
+++ b/test/fixtures/config-autoload/pkg/package.json
@@ -0,0 +1,15 @@
+{
+ "name": "postcss-config",
+ "version": "1.0.0",
+ "postcss": {
+ "parser": false,
+ "syntax": false,
+ "map": false,
+ "from": "./index.css",
+ "to": "./index.css",
+ "plugins": [
+ "postcss-import",
+ ["postcss-nested", {}]
+ ]
+ }
+}
diff --git a/test/fixtures/config-autoload/rc-js/.postcssrc.js b/test/fixtures/config-autoload/rc-js/.postcssrc.js
new file mode 100644
index 00000000..860983d6
--- /dev/null
+++ b/test/fixtures/config-autoload/rc-js/.postcssrc.js
@@ -0,0 +1,11 @@
+module.exports = {
+ "parser": "sugarss",
+ "syntax": "sugarss",
+ "map": false,
+ "from": "./test/rc-js/fixtures/index.css",
+ "to": "./test/rc-js/expect/index.css",
+ "plugins": [
+ "postcss-import",
+ ["postcss-nested", {}]
+ ]
+};
diff --git a/test/fixtures/config-autoload/rc-js/expect/index.css b/test/fixtures/config-autoload/rc-js/expect/index.css
new file mode 100644
index 00000000..500f931b
--- /dev/null
+++ b/test/fixtures/config-autoload/rc-js/expect/index.css
@@ -0,0 +1,7 @@
+.import {
+ color: red;
+}
+
+.test {
+ color: blue;
+}
diff --git a/test/fixtures/config-autoload/rc-js/expect/index.sss b/test/fixtures/config-autoload/rc-js/expect/index.sss
new file mode 100644
index 00000000..13f8e942
--- /dev/null
+++ b/test/fixtures/config-autoload/rc-js/expect/index.sss
@@ -0,0 +1,7 @@
+.import {
+ color: red
+}
+
+.test {
+ color: blue
+}
diff --git a/test/fixtures/config-autoload/rc-js/fixtures/imports/section.css b/test/fixtures/config-autoload/rc-js/fixtures/imports/section.css
new file mode 100644
index 00000000..626b1b56
--- /dev/null
+++ b/test/fixtures/config-autoload/rc-js/fixtures/imports/section.css
@@ -0,0 +1,3 @@
+.import {
+ color: red;
+}
diff --git a/test/fixtures/config-autoload/rc-js/fixtures/imports/section.sss b/test/fixtures/config-autoload/rc-js/fixtures/imports/section.sss
new file mode 100644
index 00000000..ecc74a7a
--- /dev/null
+++ b/test/fixtures/config-autoload/rc-js/fixtures/imports/section.sss
@@ -0,0 +1,2 @@
+.import
+ color: red
diff --git a/test/fixtures/config-autoload/rc-js/fixtures/index.css b/test/fixtures/config-autoload/rc-js/fixtures/index.css
new file mode 100644
index 00000000..48162650
--- /dev/null
+++ b/test/fixtures/config-autoload/rc-js/fixtures/index.css
@@ -0,0 +1,5 @@
+@import "https://github.com/imports/section.css";
+
+.test {
+ color: blue;
+}
diff --git a/test/fixtures/config-autoload/rc-js/fixtures/index.sss b/test/fixtures/config-autoload/rc-js/fixtures/index.sss
new file mode 100644
index 00000000..bedaed31
--- /dev/null
+++ b/test/fixtures/config-autoload/rc-js/fixtures/index.sss
@@ -0,0 +1,4 @@
+@import "https://github.com/imports/section.sss"
+
+.test
+ color: blue
diff --git a/test/fixtures/config-autoload/rc/.postcssrc b/test/fixtures/config-autoload/rc/.postcssrc
new file mode 100644
index 00000000..3c1b6b73
--- /dev/null
+++ b/test/fixtures/config-autoload/rc/.postcssrc
@@ -0,0 +1,11 @@
+{
+ "parser": "sugarss",
+ "syntax": "sugarss",
+ "map": false,
+ "from": "./test/rc/fixtures/index.css",
+ "to": "./test/rc/expect/index.css",
+ "plugins": [
+ "postcss-import",
+ ["postcss-nested", {}]
+ ]
+}
diff --git a/test/fixtures/config-autoload/rc/expect/index.css b/test/fixtures/config-autoload/rc/expect/index.css
new file mode 100644
index 00000000..500f931b
--- /dev/null
+++ b/test/fixtures/config-autoload/rc/expect/index.css
@@ -0,0 +1,7 @@
+.import {
+ color: red;
+}
+
+.test {
+ color: blue;
+}
diff --git a/test/fixtures/config-autoload/rc/expect/index.sss b/test/fixtures/config-autoload/rc/expect/index.sss
new file mode 100644
index 00000000..13f8e942
--- /dev/null
+++ b/test/fixtures/config-autoload/rc/expect/index.sss
@@ -0,0 +1,7 @@
+.import {
+ color: red
+}
+
+.test {
+ color: blue
+}
diff --git a/test/fixtures/config-autoload/rc/fixtures/imports/section.css b/test/fixtures/config-autoload/rc/fixtures/imports/section.css
new file mode 100644
index 00000000..626b1b56
--- /dev/null
+++ b/test/fixtures/config-autoload/rc/fixtures/imports/section.css
@@ -0,0 +1,3 @@
+.import {
+ color: red;
+}
diff --git a/test/fixtures/config-autoload/rc/fixtures/imports/section.sss b/test/fixtures/config-autoload/rc/fixtures/imports/section.sss
new file mode 100644
index 00000000..ecc74a7a
--- /dev/null
+++ b/test/fixtures/config-autoload/rc/fixtures/imports/section.sss
@@ -0,0 +1,2 @@
+.import
+ color: red
diff --git a/test/fixtures/config-autoload/rc/fixtures/index.css b/test/fixtures/config-autoload/rc/fixtures/index.css
new file mode 100644
index 00000000..48162650
--- /dev/null
+++ b/test/fixtures/config-autoload/rc/fixtures/index.css
@@ -0,0 +1,5 @@
+@import "https://github.com/imports/section.css";
+
+.test {
+ color: blue;
+}
diff --git a/test/fixtures/config-autoload/rc/fixtures/index.sss b/test/fixtures/config-autoload/rc/fixtures/index.sss
new file mode 100644
index 00000000..bedaed31
--- /dev/null
+++ b/test/fixtures/config-autoload/rc/fixtures/index.sss
@@ -0,0 +1,4 @@
+@import "https://github.com/imports/section.sss"
+
+.test
+ color: blue
diff --git a/test/fixtures/config-scope/all-options/postcss.config.js b/test/fixtures/config-scope/all-options/postcss.config.js
new file mode 100644
index 00000000..bf783879
--- /dev/null
+++ b/test/fixtures/config-scope/all-options/postcss.config.js
@@ -0,0 +1,14 @@
+const path = require('path');
+
+module.exports = () => ({
+ from: path.resolve(__dirname, '../../sss/style.sss'),
+ to: path.resolve(__dirname, '../../sss/style.css'),
+ parser: 'sugarss',
+ map: {
+ inline: true,
+ annotation: true,
+ },
+ plugins: [
+ ['postcss-short', { prefix: 'x' }]
+ ]
+});
diff --git a/test/fixtures/config-scope/api/postcss.config.js b/test/fixtures/config-scope/api/postcss.config.js
new file mode 100644
index 00000000..99e6fe1c
--- /dev/null
+++ b/test/fixtures/config-scope/api/postcss.config.js
@@ -0,0 +1,25 @@
+module.exports = function (api) {
+ if (!api.mode) {
+ throw new Error(`Failed, no ${api.mode} API`);
+ }
+
+ if (!api.file) {
+ throw new Error(`Failed, no ${api.file} API`);
+ }
+
+ if (!api.webpackLoaderContext) {
+ throw new Error(`Failed, no ${api.webpackLoaderContext} API`);
+ }
+
+ if (!api.env) {
+ throw new Error(`Failed, no ${api.env} API`);
+ }
+
+ if (!api.options) {
+ throw new Error(`Failed, no ${api.options} API`);
+ }
+
+ return {
+ plugins: [['postcss-short', { prefix: 'x' }]],
+ }
+};
diff --git a/test/fixtures/config-scope/config/context/plugin.js b/test/fixtures/config-scope/config/context/plugin.js
new file mode 100644
index 00000000..57609db3
--- /dev/null
+++ b/test/fixtures/config-scope/config/context/plugin.js
@@ -0,0 +1,14 @@
+const postcss = require('postcss');
+
+const customPlugin = (ctx) => (css, result) => {
+ ctx.webpack._compilation.assets['asset.txt'] = {
+ source () {
+ return '123'
+ },
+ size () {
+ return 0
+ }
+ }
+};
+
+module.exports = postcss.plugin('plugin', customPlugin);
diff --git a/test/fixtures/config-scope/config/context/postcss.config.js b/test/fixtures/config-scope/config/context/postcss.config.js
new file mode 100644
index 00000000..5499c260
--- /dev/null
+++ b/test/fixtures/config-scope/config/context/postcss.config.js
@@ -0,0 +1,5 @@
+module.exports = (ctx) => ({
+ plugins: [
+ require('./plugin')(ctx)
+ ]
+});
diff --git a/test/fixtures/config-scope/config/plugin.js b/test/fixtures/config-scope/config/plugin.js
new file mode 100644
index 00000000..b8712504
--- /dev/null
+++ b/test/fixtures/config-scope/config/plugin.js
@@ -0,0 +1,15 @@
+'use strict';
+
+const postcss = require('postcss');
+
+module.exports = postcss.plugin('plugin', (options) => {
+ options = Object.assign({ alpha: '1.0' }, options);
+
+ return (css, result) => {
+ css.walkDecls((decl) => {
+ if (decl.value === 'black') {
+ decl.value = 'rgba(0, 0, 0, ' + options.alpha + ')'
+ }
+ })
+ }
+});
diff --git a/test/fixtures/config-scope/config/postcss.config.js b/test/fixtures/config-scope/config/postcss.config.js
new file mode 100644
index 00000000..2fc48492
--- /dev/null
+++ b/test/fixtures/config-scope/config/postcss.config.js
@@ -0,0 +1,5 @@
+module.exports = () => ({
+ plugins: [
+ require('./plugin')()
+ ]
+});
diff --git a/test/fixtures/config-scope/css/custom.config.js b/test/fixtures/config-scope/css/custom.config.js
new file mode 100644
index 00000000..5f32d855
--- /dev/null
+++ b/test/fixtures/config-scope/css/custom.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: [
+ require('../config/plugin')()
+ ]
+};
+
diff --git a/test/fixtures/config-scope/css/index.js b/test/fixtures/config-scope/css/index.js
new file mode 100644
index 00000000..61e122b2
--- /dev/null
+++ b/test/fixtures/config-scope/css/index.js
@@ -0,0 +1,3 @@
+import style from './style.css'
+
+export default style
diff --git a/test/fixtures/config-scope/css/index2.js b/test/fixtures/config-scope/css/index2.js
new file mode 100644
index 00000000..9415e9b0
--- /dev/null
+++ b/test/fixtures/config-scope/css/index2.js
@@ -0,0 +1,3 @@
+import style from './style2.css'
+
+export default style
diff --git a/test/fixtures/config-scope/css/invalid.config.js b/test/fixtures/config-scope/css/invalid.config.js
new file mode 100644
index 00000000..7dd96ea6
--- /dev/null
+++ b/test/fixtures/config-scope/css/invalid.config.js
@@ -0,0 +1 @@
+throw new Error('invalid postcss config');
diff --git a/test/fixtures/config-scope/css/plugins.config.js b/test/fixtures/config-scope/css/plugins.config.js
new file mode 100644
index 00000000..fbdf6676
--- /dev/null
+++ b/test/fixtures/config-scope/css/plugins.config.js
@@ -0,0 +1,7 @@
+module.exports = {
+ plugins: {
+ 'postcss-short': { prefix: 'x' },
+ 'postcss-import': {},
+ 'postcss-nested': {},
+ }
+};
diff --git a/test/fixtures/config-scope/css/style.css b/test/fixtures/config-scope/css/style.css
new file mode 100644
index 00000000..63eaba7f
--- /dev/null
+++ b/test/fixtures/config-scope/css/style.css
@@ -0,0 +1,5 @@
+a { color: black }
+
+.foo {
+ float: right;
+}
diff --git a/test/fixtures/config-scope/css/style2.css b/test/fixtures/config-scope/css/style2.css
new file mode 100644
index 00000000..3bab8470
--- /dev/null
+++ b/test/fixtures/config-scope/css/style2.css
@@ -0,0 +1,4 @@
+a {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
diff --git a/test/fixtures/config-scope/from-to/postcss.config.js b/test/fixtures/config-scope/from-to/postcss.config.js
new file mode 100644
index 00000000..f61f621e
--- /dev/null
+++ b/test/fixtures/config-scope/from-to/postcss.config.js
@@ -0,0 +1,12 @@
+module.exports = {
+ from: '../../css/style.css',
+ to: '../../css/style.css',
+ map: {
+ inline: false,
+ annotation: false,
+ sourcesContent: true,
+ },
+ plugins: [
+ ['postcss-short', { prefix: 'x' }]
+ ]
+};
diff --git a/test/fixtures/config-scope/postcss.config.js b/test/fixtures/config-scope/postcss.config.js
new file mode 100644
index 00000000..3a4e2b4a
--- /dev/null
+++ b/test/fixtures/config-scope/postcss.config.js
@@ -0,0 +1,6 @@
+module.exports = {
+ plugins: [
+ require('./config/plugin')()
+ ]
+};
+
diff --git a/test/fixtures/config-scope/with-config/index.js b/test/fixtures/config-scope/with-config/index.js
new file mode 100644
index 00000000..61e122b2
--- /dev/null
+++ b/test/fixtures/config-scope/with-config/index.js
@@ -0,0 +1,3 @@
+import style from './style.css'
+
+export default style
diff --git a/test/fixtures/config-scope/with-config/postcss.config.js b/test/fixtures/config-scope/with-config/postcss.config.js
new file mode 100644
index 00000000..c1115dba
--- /dev/null
+++ b/test/fixtures/config-scope/with-config/postcss.config.js
@@ -0,0 +1,5 @@
+module.exports = function () {
+ return {
+ plugins: [['postcss-short', { prefix: 'x' }]],
+ }
+};
diff --git a/test/fixtures/config-scope/with-config/style.css b/test/fixtures/config-scope/with-config/style.css
new file mode 100644
index 00000000..56699b7c
--- /dev/null
+++ b/test/fixtures/config-scope/with-config/style.css
@@ -0,0 +1,19 @@
+a { color: black }
+
+.foo {
+ float: right;
+}
+
+.bar {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+@media (prefers-color-scheme: dark) {
+ :root { /* :root is for HTML documents */
+ --text-color: white
+ }
+ body {
+ background: black
+ }
+}
\ No newline at end of file
diff --git a/test/fixtures/css/index.js b/test/fixtures/css/index.js
new file mode 100644
index 00000000..10eb08e3
--- /dev/null
+++ b/test/fixtures/css/index.js
@@ -0,0 +1,3 @@
+import style from './style.css';
+
+export default style;
diff --git a/test/fixtures/css/plugins.config.js b/test/fixtures/css/plugins.config.js
new file mode 100644
index 00000000..53024d6e
--- /dev/null
+++ b/test/fixtures/css/plugins.config.js
@@ -0,0 +1,5 @@
+module.exports = {
+ plugins: {
+ 'postcss-short': { prefix: 'x' },
+ }
+};
diff --git a/test/fixtures/css/style.css b/test/fixtures/css/style.css
new file mode 100644
index 00000000..09096643
--- /dev/null
+++ b/test/fixtures/css/style.css
@@ -0,0 +1,43 @@
+a {
+ color: black;
+}
+
+a {
+ color: red;
+}
+
+a {
+ color: green;
+}
+
+a {
+ color: blue;
+}
+
+.class {
+ -x-border-color: blue blue *;
+ -x-color: * #fafafa;
+}
+
+.class-foo {
+ -z-border-color: blue blue *;
+ -z-color: * #fafafa;
+}
+
+.phone {
+ &_title {
+ width: 500px;
+
+ @media (max-width: 500px) {
+ width: auto;
+ }
+
+ body.is_dark & {
+ color: white;
+ }
+ }
+
+ img {
+ display: block;
+ }
+}
diff --git a/test/fixtures/esparser/index.mjs b/test/fixtures/esparser/index.mjs
new file mode 100644
index 00000000..5905c023
--- /dev/null
+++ b/test/fixtures/esparser/index.mjs
@@ -0,0 +1,9 @@
+function stringify() {
+ return "";
+}
+
+function parse() {
+ return "";
+}
+
+export default { stringify, parse };
diff --git a/test/fixtures/esparser/package.json b/test/fixtures/esparser/package.json
new file mode 100644
index 00000000..29a16e5d
--- /dev/null
+++ b/test/fixtures/esparser/package.json
@@ -0,0 +1,11 @@
+{
+ "type": "module",
+ "exports": {
+ ".": {
+ "require": "./index.js",
+ "import": "./index.mjs"
+ }
+ },
+ "name": "test",
+ "version": "1.0.0"
+}
diff --git a/test/fixtures/esparser/runManual.mjs b/test/fixtures/esparser/runManual.mjs
new file mode 100644
index 00000000..2fc433fd
--- /dev/null
+++ b/test/fixtures/esparser/runManual.mjs
@@ -0,0 +1,46 @@
+import webpack from 'webpack';
+import path from "path";
+
+const __dirname = path.resolve();
+const rootDir = path.resolve(__dirname, "test/helpers");
+
+const compiler = webpack({
+ target: 'node',
+ mode: "development",
+ devtool: false,
+ context: path.resolve(rootDir, "../fixtures"),
+ entry: path.resolve(rootDir, "../fixtures", "./sss/index.js"),
+ output: {
+ path: path.resolve(rootDir, "../outputs"),
+ filename: "[name].bundle.js",
+ chunkFilename: "[name].chunk.js",
+ publicPath: "/webpack/public/path/",
+ },
+ module: {
+ rules: [
+ {
+ test: /\.(css|sss)$/i,
+ use: [
+ 'css-loader',
+ {
+ loader: path.resolve(rootDir, "../../dist"),
+ options: {
+ postcssOptions: {
+ parser: path.resolve(rootDir, "../fixtures/esparser/index.mjs"),
+ stringifier: path.resolve(rootDir, "../fixtures/esparser/index.mjs"),
+ syntax: path.resolve(rootDir, "../fixtures/esparser/index.mjs"),
+ },
+ },
+ },
+ ],
+ },
+ ],
+ },
+ plugins: [],
+});
+
+compiler.run((error) => {
+ if (error) {
+ throw error;
+ }
+});
diff --git a/test/fixtures/jss/exec/index.js b/test/fixtures/jss/exec/index.js
new file mode 100644
index 00000000..b8ca99c8
--- /dev/null
+++ b/test/fixtures/jss/exec/index.js
@@ -0,0 +1,3 @@
+import style from './style.exec.js';
+
+export default style;
diff --git a/test/fixtures/jss/exec/style.exec.js b/test/fixtures/jss/exec/style.exec.js
new file mode 100644
index 00000000..f0175724
--- /dev/null
+++ b/test/fixtures/jss/exec/style.exec.js
@@ -0,0 +1,11 @@
+'use strict';
+
+const postcssJS = require('postcss-js');
+
+const style = {
+ a: {
+ color: 'green'
+ }
+};
+
+module.exports = postcssJS.parse(style);
diff --git a/test/fixtures/jss/postcss-js/index.js b/test/fixtures/jss/postcss-js/index.js
new file mode 100644
index 00000000..063ac9ae
--- /dev/null
+++ b/test/fixtures/jss/postcss-js/index.js
@@ -0,0 +1,3 @@
+import style from './style.js'
+
+export default style
diff --git a/test/fixtures/jss/postcss-js/style.js b/test/fixtures/jss/postcss-js/style.js
new file mode 100644
index 00000000..e7426c15
--- /dev/null
+++ b/test/fixtures/jss/postcss-js/style.js
@@ -0,0 +1 @@
+module.exports = { a: { color: 'yellow' } }
diff --git a/test/fixtures/less/index.js b/test/fixtures/less/index.js
new file mode 100644
index 00000000..1a1fbf6d
--- /dev/null
+++ b/test/fixtures/less/index.js
@@ -0,0 +1,3 @@
+import style from './style.less'
+
+export default style
diff --git a/test/fixtures/less/style.less b/test/fixtures/less/style.less
new file mode 100644
index 00000000..b83cadd7
--- /dev/null
+++ b/test/fixtures/less/style.less
@@ -0,0 +1 @@
+a { color: coral }
diff --git a/test/fixtures/package-json-files/no-postcss/package.json b/test/fixtures/package-json-files/no-postcss/package.json
new file mode 100644
index 00000000..255dac01
--- /dev/null
+++ b/test/fixtures/package-json-files/no-postcss/package.json
@@ -0,0 +1,4 @@
+{
+ "dependencies": {},
+ "devDependencies": {}
+}
\ No newline at end of file
diff --git a/test/fixtures/package-json-files/postcss-v8-in-dependencies/package.json b/test/fixtures/package-json-files/postcss-v8-in-dependencies/package.json
new file mode 100644
index 00000000..7e20ba4d
--- /dev/null
+++ b/test/fixtures/package-json-files/postcss-v8-in-dependencies/package.json
@@ -0,0 +1,6 @@
+{
+ "dependencies": {
+ "postcss": "^8.0.0"
+ },
+ "devDependencies": {}
+}
\ No newline at end of file
diff --git a/test/fixtures/package-json-files/postcss-v8-in-devDependencies/package.json b/test/fixtures/package-json-files/postcss-v8-in-devDependencies/package.json
new file mode 100644
index 00000000..0712e31c
--- /dev/null
+++ b/test/fixtures/package-json-files/postcss-v8-in-devDependencies/package.json
@@ -0,0 +1,6 @@
+{
+ "dependencies": {},
+ "devDependencies": {
+ "postcss": "^8.0.0"
+ }
+}
\ No newline at end of file
diff --git a/test/fixtures/plugin/default-other-plugin.js b/test/fixtures/plugin/default-other-plugin.js
new file mode 100644
index 00000000..cfe2ea0c
--- /dev/null
+++ b/test/fixtures/plugin/default-other-plugin.js
@@ -0,0 +1,17 @@
+'use strict';
+
+const postcss = require('postcss');
+
+module.exports = {
+ default: postcss.plugin('my-plugin', (options) => {
+ options = { alpha: '1.0', color: 'blue', ...options };
+
+ return (root, result) => {
+ root.walkDecls((decl) => {
+ if (decl.value === options.color) {
+ decl.value = 'rgba(0, 0, 255, ' + options.alpha + ')'
+ }
+ })
+ }
+ }),
+};
diff --git a/test/fixtures/plugin/new-api.plugin.js b/test/fixtures/plugin/new-api.plugin.js
new file mode 100644
index 00000000..d90b6a62
--- /dev/null
+++ b/test/fixtures/plugin/new-api.plugin.js
@@ -0,0 +1,11 @@
+module.exports = (opts = {}) => {
+ return {
+ postcssPlugin: 'postcss-new-api-plugin',
+ Declaration: {
+ width: (node) => {
+ node.value = '100px';
+ },
+ },
+ };
+};
+module.exports.postcss = true;
diff --git a/test/fixtures/plugin/other-plugin.js b/test/fixtures/plugin/other-plugin.js
new file mode 100644
index 00000000..3742fad1
--- /dev/null
+++ b/test/fixtures/plugin/other-plugin.js
@@ -0,0 +1,15 @@
+'use strict';
+
+const postcss = require('postcss');
+
+module.exports = postcss.plugin('my-plugin', (options) => {
+ options = Object.assign({ alpha: '1.0' }, options);
+
+ return (root, result) => {
+ root.walkDecls((decl) => {
+ if (decl.value === 'blue') {
+ decl.value = 'rgba(0, 0, 255, ' + options.alpha + ')'
+ }
+ })
+ }
+});
diff --git a/test/fixtures/plugin/plugin.js b/test/fixtures/plugin/plugin.js
new file mode 100644
index 00000000..de0685b7
--- /dev/null
+++ b/test/fixtures/plugin/plugin.js
@@ -0,0 +1,15 @@
+'use strict';
+
+const postcss = require('postcss');
+
+module.exports = postcss.plugin('my-plugin', (options) => {
+ const myOptions = {...{ alpha: '1.0', color: 'black' }, ...options};
+
+ return (root, result) => {
+ root.walkDecls((decl) => {
+ if (decl.value === myOptions.color) {
+ decl.value = 'rgba(0, 0, 0, ' + myOptions.alpha + ')'
+ }
+ })
+ }
+});
diff --git a/test/fixtures/scss/index.js b/test/fixtures/scss/index.js
new file mode 100644
index 00000000..9dc52bc7
--- /dev/null
+++ b/test/fixtures/scss/index.js
@@ -0,0 +1,3 @@
+import style from './style.scss'
+
+export default style
diff --git a/test/fixtures/scss/style.scss b/test/fixtures/scss/style.scss
new file mode 100644
index 00000000..b83cadd7
--- /dev/null
+++ b/test/fixtures/scss/style.scss
@@ -0,0 +1 @@
+a { color: coral }
diff --git a/test/fixtures/sss/index.js b/test/fixtures/sss/index.js
new file mode 100644
index 00000000..a2de11f7
--- /dev/null
+++ b/test/fixtures/sss/index.js
@@ -0,0 +1,3 @@
+import style from './style.sss'
+
+export default style
diff --git a/test/cases/sugar.sss b/test/fixtures/sss/style.sss
similarity index 100%
rename from test/cases/sugar.sss
rename to test/fixtures/sss/style.sss
diff --git a/test/helpers/astLoader.js b/test/helpers/astLoader.js
new file mode 100644
index 00000000..e41c3d7b
--- /dev/null
+++ b/test/helpers/astLoader.js
@@ -0,0 +1,46 @@
+import Module from "module";
+
+const postcss = require("postcss");
+
+const parentModule = module;
+
+function exec(code, loaderContext) {
+ const { resource, context } = loaderContext;
+
+ const module = new Module(resource, parentModule);
+
+ // eslint-disable-next-line no-underscore-dangle
+ module.paths = Module._nodeModulePaths(context);
+ module.filename = resource;
+
+ // eslint-disable-next-line no-underscore-dangle
+ module._compile(code, resource);
+
+ return module.exports;
+}
+
+module.exports = function astLoader(content) {
+ const callback = this.async();
+ const { spy = jest.fn(), execute } = this.query;
+
+ if (execute) {
+ // eslint-disable-next-line no-param-reassign
+ content = exec(content, this);
+ }
+
+ postcss()
+ .process(content)
+ .then((result) => {
+ const ast = {
+ type: "postcss",
+ version: result.processor.version,
+ root: result.root,
+ };
+
+ Object.defineProperty(ast, "root", {
+ get: spy.mockReturnValue(result.root),
+ });
+
+ callback(null, result.css, result.map, { ast });
+ });
+};
diff --git a/test/helpers/compile.js b/test/helpers/compile.js
new file mode 100644
index 00000000..a1b05e5c
--- /dev/null
+++ b/test/helpers/compile.js
@@ -0,0 +1,10 @@
+export default (compiler) =>
+ new Promise((resolve, reject) => {
+ compiler.run((error, stats) => {
+ if (error) {
+ return reject(error);
+ }
+
+ return resolve(stats);
+ });
+ });
diff --git a/test/helpers/execute.js b/test/helpers/execute.js
new file mode 100644
index 00000000..7e1a94e6
--- /dev/null
+++ b/test/helpers/execute.js
@@ -0,0 +1,22 @@
+import Module from "module";
+import path from "path";
+
+const parentModule = module;
+
+export default (code) => {
+ const resource = "test.js";
+ const module = new Module(resource, parentModule);
+ // eslint-disable-next-line no-underscore-dangle
+ module.paths = Module._nodeModulePaths(
+ path.resolve(__dirname, "../fixtures")
+ );
+ module.filename = resource;
+
+ // eslint-disable-next-line no-underscore-dangle
+ module._compile(
+ `let __export__;${code};module.exports = __export__;`,
+ resource
+ );
+
+ return module.exports;
+};
diff --git a/test/helpers/getCodeFromBundle.js b/test/helpers/getCodeFromBundle.js
new file mode 100644
index 00000000..0cb7598f
--- /dev/null
+++ b/test/helpers/getCodeFromBundle.js
@@ -0,0 +1,23 @@
+export default (id, stats) => {
+ const { modules } = stats.compilation;
+ const module = modules.find((m) => m.id.endsWith(id));
+ const { _source } = module;
+
+ // eslint-disable-next-line no-underscore-dangle
+ const code = (_source._value || _source._valueAsString).replace(
+ "module.exports = ",
+ ""
+ );
+
+ let result;
+
+ try {
+ result = JSON.parse(code);
+ } catch (error) {
+ result = { css: code };
+ }
+
+ const { css, map: sourceMap } = result;
+
+ return { css, sourceMap };
+};
diff --git a/test/helpers/getCompiler.js b/test/helpers/getCompiler.js
new file mode 100644
index 00000000..639c29d3
--- /dev/null
+++ b/test/helpers/getCompiler.js
@@ -0,0 +1,50 @@
+import path from "path";
+
+import webpack from "webpack";
+import { createFsFromVolume, Volume } from "memfs";
+
+export default (fixture, loaderOptions = {}, config = {}) => {
+ const fullConfig = {
+ mode: "development",
+ devtool: config.devtool || false,
+ context: path.resolve(__dirname, "../fixtures"),
+ entry: path.resolve(__dirname, "../fixtures", fixture),
+ output: {
+ path: path.resolve(__dirname, "../outputs"),
+ filename: "[name].bundle.js",
+ chunkFilename: "[name].chunk.js",
+ publicPath: "/webpack/public/path/",
+ },
+ module: {
+ rules: [
+ {
+ test: /\.(css|sss)$/i,
+ use: [
+ {
+ loader: require.resolve("./testLoader"),
+ options: {},
+ },
+ {
+ loader: path.resolve(__dirname, "../../src"),
+ options: loaderOptions || {},
+ },
+ ],
+ },
+ ],
+ },
+ plugins: [],
+ ...config,
+ };
+
+ const compiler = webpack(fullConfig);
+
+ if (!config.outputFileSystem) {
+ const outputFileSystem = createFsFromVolume(new Volume());
+ // Todo remove when we drop webpack@4 support
+ outputFileSystem.join = path.join.bind(path);
+
+ compiler.outputFileSystem = outputFileSystem;
+ }
+
+ return compiler;
+};
diff --git a/test/helpers/getErrors.js b/test/helpers/getErrors.js
new file mode 100644
index 00000000..ff904f0d
--- /dev/null
+++ b/test/helpers/getErrors.js
@@ -0,0 +1,4 @@
+import normalizeErrors from "./normalizeErrors";
+
+export default (stats, shortError) =>
+ normalizeErrors(stats.compilation.errors, shortError).sort();
diff --git a/test/helpers/getExecutedCode.js b/test/helpers/getExecutedCode.js
new file mode 100644
index 00000000..aa52bddc
--- /dev/null
+++ b/test/helpers/getExecutedCode.js
@@ -0,0 +1,17 @@
+import { execute, readAsset } from "./index";
+
+export default (asset, compiler, stats) => {
+ let executed = execute(readAsset(asset, compiler, stats));
+
+ if (Array.isArray(executed)) {
+ executed = executed.map((module) => {
+ // Todo remove after drop webpack@4
+ // eslint-disable-next-line no-param-reassign
+ module[0] = module[0].replace(/\?.*!/g, "?[ident]!");
+
+ return module;
+ });
+ }
+
+ return executed;
+};
diff --git a/test/helpers/getWarnings.js b/test/helpers/getWarnings.js
new file mode 100644
index 00000000..9ff959ad
--- /dev/null
+++ b/test/helpers/getWarnings.js
@@ -0,0 +1,3 @@
+import normalizeErrors from "./normalizeErrors";
+
+export default (stats) => normalizeErrors(stats.compilation.warnings).sort();
diff --git a/test/helpers/index.js b/test/helpers/index.js
new file mode 100644
index 00000000..f2303795
--- /dev/null
+++ b/test/helpers/index.js
@@ -0,0 +1,23 @@
+import compile from "./compile";
+import execute from "./execute";
+import getCompiler from "./getCompiler";
+import getErrors from "./getErrors";
+import getExecutedCode from "./getExecutedCode";
+import getCodeFromBundle from "./getCodeFromBundle";
+import getWarnings from "./getWarnings";
+import normalizeErrors from "./normalizeErrors";
+import readAsset from "./readAsset";
+import readsAssets from "./readAssets";
+
+export {
+ compile,
+ execute,
+ getCompiler,
+ getErrors,
+ getExecutedCode,
+ getCodeFromBundle,
+ getWarnings,
+ normalizeErrors,
+ readAsset,
+ readsAssets,
+};
diff --git a/test/helpers/normalizeErrors.js b/test/helpers/normalizeErrors.js
new file mode 100644
index 00000000..bbadb8bd
--- /dev/null
+++ b/test/helpers/normalizeErrors.js
@@ -0,0 +1,28 @@
+import stripAnsi from "strip-ansi";
+
+function removeCWD(str) {
+ const isWin = process.platform === "win32";
+ let cwd = process.cwd();
+
+ if (isWin) {
+ // eslint-disable-next-line no-param-reassign
+ str = str.replace(/\\/g, "/");
+ // eslint-disable-next-line no-param-reassign
+ cwd = cwd.replace(/\\/g, "/");
+ }
+
+ return stripAnsi(str)
+ .replace(/\(from .*?\)/, "(from `replaced original path`)")
+ .replace(new RegExp(cwd, "g"), "");
+}
+
+export default (errors, shortError) =>
+ errors.map((error) => {
+ let errorMessage = error.toString();
+
+ if (shortError) {
+ errorMessage = errorMessage.split("\n").slice(0, 2).join("\n");
+ }
+
+ return removeCWD(errorMessage.split("\n").slice(0, 12).join("\n"));
+ });
diff --git a/test/helpers/readAsset.js b/test/helpers/readAsset.js
new file mode 100644
index 00000000..bd1ae276
--- /dev/null
+++ b/test/helpers/readAsset.js
@@ -0,0 +1,23 @@
+import path from "path";
+
+export default (asset, compiler, stats) => {
+ const usedFs = compiler.outputFileSystem;
+ const outputPath = stats.compilation.outputOptions.path;
+
+ let data = "";
+ let targetFile = asset;
+
+ const queryStringIdx = targetFile.indexOf("?");
+
+ if (queryStringIdx >= 0) {
+ targetFile = targetFile.slice(0, queryStringIdx);
+ }
+
+ try {
+ data = usedFs.readFileSync(path.join(outputPath, targetFile)).toString();
+ } catch (error) {
+ data = error.toString();
+ }
+
+ return data;
+};
diff --git a/test/helpers/readAssets.js b/test/helpers/readAssets.js
new file mode 100644
index 00000000..15b9dca2
--- /dev/null
+++ b/test/helpers/readAssets.js
@@ -0,0 +1,11 @@
+import readAsset from "./readAsset";
+
+export default function readAssets(compiler, stats) {
+ const assets = {};
+
+ Object.keys(stats.compilation.assets).forEach((asset) => {
+ assets[asset] = readAsset(asset, compiler, stats);
+ });
+
+ return assets;
+}
diff --git a/test/helpers/testLoader.js b/test/helpers/testLoader.js
new file mode 100644
index 00000000..1f2e4ddc
--- /dev/null
+++ b/test/helpers/testLoader.js
@@ -0,0 +1,11 @@
+function testLoader(content, sourceMap) {
+ const result = { css: content };
+
+ if (sourceMap) {
+ result.map = sourceMap;
+ }
+
+ return `module.exports = ${JSON.stringify(result)}`;
+}
+
+module.exports = testLoader;
diff --git a/test/implementation.test.js b/test/implementation.test.js
new file mode 100644
index 00000000..f1378c66
--- /dev/null
+++ b/test/implementation.test.js
@@ -0,0 +1,48 @@
+import postcss from "postcss";
+
+import {
+ compile,
+ getCompiler,
+ getErrors,
+ getCodeFromBundle,
+ getWarnings,
+} from "./helpers";
+
+describe('"implementation" option', () => {
+ it("should work with implementation is string", async () => {
+ const compiler = getCompiler("./css/index.js", {
+ implementation: require.resolve("postcss"),
+ });
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it("should throw error when unresolved package", async () => {
+ const compiler = getCompiler("./css/index.js", {
+ implementation: "unresolved",
+ });
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it("should work with a custom instance of PostCSS", async () => {
+ const spy = jest.fn(postcss);
+ const compiler = getCompiler("./css/index.js", {
+ // Wrap the spy so it is an instanceof Function
+ implementation: (...args) => spy(...args),
+ });
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(spy).toHaveBeenCalledTimes(1);
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+});
diff --git a/test/loader.test.js b/test/loader.test.js
new file mode 100644
index 00000000..d8549fbf
--- /dev/null
+++ b/test/loader.test.js
@@ -0,0 +1,332 @@
+import path from "path";
+
+import postcss from "postcss";
+
+// eslint-disable-next-line import/no-namespace
+import * as utils from "../src/utils";
+
+import {
+ compile,
+ getCompiler,
+ getErrors,
+ getCodeFromBundle,
+ getWarnings,
+} from "./helpers/index";
+
+describe("loader", () => {
+ it("should work", async () => {
+ const compiler = getCompiler("./css/index.js");
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it("should throw an error on invalid syntax", async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ hideNothingWarning: true,
+ parser: "sugarss",
+ },
+ });
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should emit warning using the "messages" API', async () => {
+ const plugin = () => (css, result) => {
+ css.walkDecls((node) => {
+ node.warn(result, "");
+ });
+ };
+
+ const postcssPlugin = postcss.plugin("postcss-plugin", plugin);
+
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ plugins: [postcssPlugin()],
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should emit asset using the "messages" API', async () => {
+ const plugin = () => (css, result) => {
+ result.messages.push({
+ type: "asset",
+ file: "sprite.svg",
+ content: "... ",
+ plugin,
+ });
+ };
+
+ const postcssPlugin = postcss.plugin("postcss-assets", plugin);
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ plugins: [postcssPlugin()],
+ },
+ });
+ const stats = await compile(compiler);
+
+ // eslint-disable-next-line no-underscore-dangle
+ expect(stats.compilation.assets["sprite.svg"]).toBeDefined();
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should register dependencies using the "messages" API', async () => {
+ const plugin = () => (css, result) => {
+ result.messages.push(
+ {
+ type: "build-dependency",
+ file: path.resolve(__dirname, "fixtures", "build-dep.html"),
+ content: "",
+ plugin,
+ },
+ {
+ type: "missing-dependency",
+ file: path.resolve(__dirname, "fixtures", "missing-dep.html"),
+ content: "",
+ plugin,
+ },
+ {
+ type: "context-dependency",
+ file: path.resolve(__dirname, "fixtures", "deps"),
+ content: "",
+ plugin,
+ },
+ {
+ type: "dir-dependency",
+ dir: path.resolve(__dirname, "fixtures", "deps2"),
+ content: "",
+ plugin,
+ }
+ );
+ };
+
+ const postcssPlugin = postcss.plugin("postcss-plugin", plugin);
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ plugins: [postcssPlugin()],
+ },
+ });
+
+ const stats = await compile(compiler);
+ const { contextDependencies, missingDependencies, buildDependencies } =
+ stats.compilation;
+
+ expect(contextDependencies).toContain(
+ path.resolve(__dirname, "fixtures", "deps")
+ );
+ expect(contextDependencies).toContain(
+ path.resolve(__dirname, "fixtures", "deps2")
+ );
+ expect(missingDependencies).toContain(
+ path.resolve(__dirname, "fixtures", "missing-dep.html")
+ );
+ expect(buildDependencies).toContain(
+ path.resolve(__dirname, "fixtures", "build-dep.html")
+ );
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it("should reuse PostCSS AST", async () => {
+ const spy = jest.fn();
+ const compiler = getCompiler(
+ "./css/index.js",
+ {},
+ {
+ module: {
+ rules: [
+ {
+ test: /\.(css|sss)$/i,
+ use: [
+ {
+ loader: require.resolve("./helpers/testLoader"),
+ options: {},
+ },
+ {
+ loader: path.resolve(__dirname, "../src"),
+ options: {
+ postcssOptions: { hideNothingWarning: true },
+ },
+ },
+ {
+ loader: require.resolve("./helpers/astLoader"),
+ options: { spy },
+ },
+ ],
+ },
+ ],
+ },
+ }
+ );
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(spy).toHaveBeenCalledTimes(1);
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it("should work with SugarSS", async () => {
+ const compiler = getCompiler("./sss/index.js", {
+ postcssOptions: {
+ parser: "sugarss",
+ hideNothingWarning: true,
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.sss", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+});
+
+describe("check postcss versions to avoid using PostCSS 7", () => {
+ it("should emit a warning if postcss version is not explicitly specified when the loader is failed", async () => {
+ const spy = jest
+ .spyOn(utils, "findPackageJSONDir")
+ .mockReturnValue(
+ path.resolve(__dirname, "./fixtures/package-json-files/no-postcss")
+ );
+
+ const compiler = getCompiler("./css/index.js", {
+ implementation: (...args) => {
+ const result = postcss(...args);
+
+ result.version = "7.0.0";
+ result.process = () =>
+ Promise.reject(new Error("Something went wrong."));
+
+ return result;
+ },
+ });
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+
+ spy.mockRestore();
+ });
+
+ it("should not show a warning if 'postcss' version is explicitly defined in 'dependencies'", async () => {
+ const spy = jest
+ .spyOn(utils, "findPackageJSONDir")
+ .mockReturnValue(
+ path.resolve(
+ __dirname,
+ "./fixtures/package-json-files/postcss-v8-in-dependencies"
+ )
+ );
+
+ const compiler = getCompiler("./css/index.js", {
+ implementation: (...args) => {
+ const result = postcss(...args);
+
+ result.version = "7.0.0";
+ result.process = () =>
+ Promise.reject(new Error("Something went wrong."));
+
+ return result;
+ },
+ });
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+
+ spy.mockRestore();
+ });
+
+ it("should not show a warning if 'postcss' version is explicitly defined in 'devDependencies'", async () => {
+ const spy = jest
+ .spyOn(utils, "findPackageJSONDir")
+ .mockReturnValue(
+ path.resolve(
+ __dirname,
+ "./fixtures/package-json-files/postcss-v8-in-devDependencies"
+ )
+ );
+
+ const compiler = getCompiler("./css/index.js", {
+ implementation: (...args) => {
+ const result = postcss(...args);
+
+ result.version = "7.0.0";
+ result.process = () =>
+ Promise.reject(new Error("Something went wrong."));
+
+ return result;
+ },
+ });
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+
+ spy.mockRestore();
+ });
+
+ it("should not show a warning if 'package.json' file was not found", async () => {
+ const spy = jest
+ .spyOn(utils, "findPackageJSONDir")
+ .mockReturnValue(
+ path.resolve(__dirname, "./fixtures/package-json-files/unknown")
+ );
+
+ const compiler = getCompiler("./css/index.js", {
+ implementation: (...args) => {
+ const result = postcss(...args);
+
+ result.version = "7.0.0";
+ result.process = () =>
+ Promise.reject(new Error("Something went wrong."));
+
+ return result;
+ },
+ });
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+
+ spy.mockRestore();
+ });
+
+ it("should work when 'processor' throw an error", async () => {
+ const spy = jest
+ .spyOn(utils, "findPackageJSONDir")
+ .mockReturnValue(
+ path.resolve(__dirname, "./fixtures/package-json-files/no-postcss")
+ );
+
+ const compiler = getCompiler("./css/index.js", {
+ implementation: () => {
+ throw new Error("Error in implementation");
+ },
+ });
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+
+ spy.mockRestore();
+ });
+});
diff --git a/test/plugins/blue.js b/test/plugins/blue.js
deleted file mode 100644
index cb695eb6..00000000
--- a/test/plugins/blue.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = function (css) {
- css.walkDecls(function (decl) {
- if ( decl.value === 'black' ) decl.value = 'blue';
- });
-};
diff --git a/test/plugins/red.js b/test/plugins/red.js
deleted file mode 100644
index e1396f7d..00000000
--- a/test/plugins/red.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var warning = false;
-
-module.exports = function (options) {
- var alpha = options.alpha || '1.0';
-
- return {
- postcss: function (css, result) {
- if (!warning) {
- result.warn('Test red warning');
- warning = true;
- }
-
- css.walkDecls(function (decl) {
- if (decl.value === 'blue') {
- decl.value = 'rgba(255, 0, 0, ' + alpha + ')';
- }
- });
- }
- };
-};
diff --git a/test/postcss.config.js b/test/postcss.config.js
deleted file mode 100644
index 9c6063ba..00000000
--- a/test/postcss.config.js
+++ /dev/null
@@ -1,5 +0,0 @@
-module.exports = {
- plugins: [
- require('./plugins/blue')
- ]
-};
diff --git a/test/postcssOptions.test.js b/test/postcssOptions.test.js
new file mode 100644
index 00000000..67d0af13
--- /dev/null
+++ b/test/postcssOptions.test.js
@@ -0,0 +1,851 @@
+import path from "path";
+
+import {
+ compile,
+ getCompiler,
+ getErrors,
+ getCodeFromBundle,
+ getWarnings,
+} from "./helpers";
+import myPostcssPlugin from "./fixtures/plugin/plugin";
+
+jest.setTimeout(30000);
+
+describe('"postcssOptions" option', () => {
+ it('should work without the specified values in the "postcssOptions" option', async () => {
+ const compiler = getCompiler("./config-scope/css/index.js", {
+ postcssOptions: {},
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with "from", "to" and "map" options (absolute paths)', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ from: "/test/from.css",
+ to: "/test/to.css",
+ map: { inline: false, annotation: false },
+ },
+ });
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+ const toIsWork = codeFromBundle.sourceMap.file.endsWith("to.css");
+ const fromIsWork =
+ codeFromBundle.sourceMap.sources.filter((i) => i.endsWith("from.css"))
+ .length > 0;
+
+ expect(toIsWork).toBe(true);
+ expect(fromIsWork).toBe(true);
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(codeFromBundle.map).toMatchSnapshot("map");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with "from", "to" and "map" options (relative paths)', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ from: "./css/style.css",
+ to: "./css/style.css",
+ map: { inline: false, annotation: false },
+ },
+ });
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+ const toIsWork = codeFromBundle.sourceMap.file.endsWith("style.css");
+ const fromIsWork =
+ codeFromBundle.sourceMap.sources.filter((i) => i.endsWith("style.css"))
+ .length > 0;
+
+ expect(toIsWork).toBe(true);
+ expect(fromIsWork).toBe(true);
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(codeFromBundle.map).toMatchSnapshot("map");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "map" option and generate inlined source maps', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ map: { inline: true, annotation: false },
+ },
+ });
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(codeFromBundle.map).toMatchSnapshot("map");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work "Function" value', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: () => {
+ return {
+ // eslint-disable-next-line global-require
+ plugins: [require("./fixtures/config-scope/config/plugin")()],
+ };
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work "Function" value and with "Array" syntax of the "plugins" option', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: () => {
+ return {
+ // eslint-disable-next-line global-require
+ plugins: [require("./fixtures/config-scope/config/plugin")()],
+ };
+ },
+ });
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work "Function" value and with "Object" syntax of the "plugins" option', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: () => {
+ return {
+ // eslint-disable-next-line global-require
+ plugins: [require("./fixtures/config-scope/config/plugin")()],
+ };
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "parser" option with "String" value', async () => {
+ const compiler = getCompiler("./sss/index.js", {
+ postcssOptions: {
+ parser: "sugarss",
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.sss", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "parser" option with "Object" value', async () => {
+ const compiler = getCompiler("./sss/index.js", {
+ postcssOptions: {
+ // eslint-disable-next-line global-require,import/no-dynamic-require
+ parser: require("sugarss"),
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.sss", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ // TODO jest have not good support for ES modules for testing it, tested manually
+ it.skip('should work with the "parser" option with "Object" value with ESM', async () => {
+ const compiler = getCompiler("./sss/index.js", {
+ postcssOptions: {
+ parser: path.resolve(__dirname, "../fixtures/esparser/index.mjs"),
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.sss", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ // TODO jest have not good support for ES modules for testing it, tested manually
+ it.skip('should work with the "stringifier" option with "Object" value with ESM', async () => {
+ const compiler = getCompiler("./sss/index.js", {
+ postcssOptions: {
+ stringifier: path.resolve(__dirname, "../fixtures/esparser/index.mjs"),
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.sss", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ // TODO jest have not good support for ES modules for testing it, tested manually
+ it.skip('should work with the "syntax" option with "Object" value with ESM', async () => {
+ const compiler = getCompiler("./sss/index.js", {
+ postcssOptions: {
+ syntax: path.resolve(__dirname, "../fixtures/esparser/index.mjs"),
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.sss", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "parser" option with "Function" value', async () => {
+ const compiler = getCompiler("./sss/index.js", {
+ postcssOptions: {
+ // eslint-disable-next-line global-require,import/no-dynamic-require
+ parser: require("sugarss").parse,
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.sss", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should throw an error with the "parser" option on the unresolved parser', async () => {
+ const compiler = getCompiler("./sss/index.js", {
+ postcssOptions: {
+ parser: "unresolved",
+ },
+ });
+
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats, true)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "stringifier" option with "String" value', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ stringifier: "sugarss",
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "stringifier" option with "Object" value', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ // eslint-disable-next-line global-require
+ stringifier: require("sugarss"),
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "stringifier" option with "Function" value', async () => {
+ // eslint-disable-next-line global-require
+ const Midas = require("midas");
+ const midas = new Midas();
+
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ stringifier: midas.stringifier,
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should throw an error with the "stringifier" option on the unresolved stringifier', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ stringifier: "unresolved",
+ },
+ });
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats, true)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "syntax" option with "String" value', async () => {
+ const compiler = getCompiler("./sss/index.js", {
+ postcssOptions: {
+ syntax: "sugarss",
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.sss", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "syntax" option with "Object" value', async () => {
+ const compiler = getCompiler("./sss/index.js", {
+ postcssOptions: {
+ // eslint-disable-next-line global-require
+ syntax: require("sugarss"),
+ },
+ });
+
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.sss", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should throw an error with "syntax" option on the unresolved syntax', async () => {
+ const compiler = getCompiler("./sss/index.js", {
+ postcssOptions: {
+ syntax: "unresolved",
+ },
+ });
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(
+ getErrors(stats, true).map((item) =>
+ item
+ .replace("property 'parse'", "properties")
+ .replace(/undefined$/, "undefined (reading 'parse')")
+ )
+ ).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with "Array" value', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ plugins: [
+ "postcss-nested",
+ ["postcss-short", { prefix: "x" }],
+ myPostcssPlugin,
+ // Like:
+ // `
+ // import myPlugin from './path/to/plugin.mjs';
+ //
+ // const initPlugin = myPlugin();
+ // `
+ (root) => {
+ root.walkDecls((decl) => {
+ if (decl.value === "red") {
+ // eslint-disable-next-line no-param-reassign
+ decl.value = "rgba(255, 0, 0, 1.0)";
+ }
+ });
+ },
+ // Like:
+ // `
+ // import myPlugin from './path/to/plugin.mjs';
+ // `
+ {
+ postcss: (root) => {
+ root.walkDecls((decl) => {
+ if (decl.value === "green") {
+ // eslint-disable-next-line no-param-reassign
+ decl.value = "rgba(0, 255, 0, 1.0)";
+ }
+ });
+ },
+ },
+ require.resolve("./fixtures/plugin/other-plugin"),
+ myPostcssPlugin({ color: "white", alpha: 0 }),
+ { "postcss-short": { prefix: "z" } },
+ // New API
+ require.resolve("./fixtures/plugin/new-api.plugin"),
+ ],
+ },
+ });
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with "Object" value', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ plugins: {
+ "postcss-import": {},
+ "postcss-nested": {},
+ "postcss-short": { prefix: "x" },
+ [require.resolve("./fixtures/plugin/other-plugin")]: {},
+ },
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with empty "Array" value', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ plugins: [],
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with empty "Object" value', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ plugins: {},
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with "Array" value and support disabling plugins from the configuration', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ config: path.resolve(__dirname, "./fixtures/css/plugins.config.js"),
+ plugins: [{ "postcss-short": false }],
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with "Object" value and support disabling plugins from the configuration', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ config: path.resolve(__dirname, "./fixtures/css/plugins.config.js"),
+ plugins: {
+ "postcss-short": false,
+ },
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with "Object" value and only disabled plugins', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ plugins: {
+ "postcss-import": false,
+ "postcss-nested": false,
+ "postcss-short": false,
+ },
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with "Array" value and override the previous plugin options', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ plugins: [
+ ["postcss-short", { prefix: "x" }],
+ ["postcss-short", { prefix: "z" }],
+ ],
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with "Object" value and override the previous plugin options', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ plugins: {
+ "postcss-short": { prefix: "x" },
+ // eslint-disable-next-line no-dupe-keys
+ "postcss-short": { prefix: "z" },
+ },
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with "Array" value, and config, and override the previous plugin options', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ config: path.resolve(__dirname, "./fixtures/css/plugins.config.js"),
+ plugins: [["postcss-short", { prefix: "z" }]],
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with "Object" value, and config, and override the previous plugin options', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ config: path.resolve(__dirname, "./fixtures/css/plugins.config.js"),
+ plugins: {
+ "postcss-short": { prefix: "z" },
+ },
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should throw an error with the "plugins" option on the unresolved plugin', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ plugins: ["postcss-unresolved"],
+ },
+ });
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats, true)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with "Array" value and not throw an error on falsy plugin', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ // eslint-disable-next-line no-undefined
+ plugins: [undefined, null, "", 0],
+ },
+ });
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats, true)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with the "default" property without options', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ plugins: [
+ path.resolve(__dirname, "./fixtures/plugin/default-other-plugin.js"),
+ ],
+ },
+ });
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "plugins" option with the "default" property with options', async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ plugins: [
+ [
+ path.resolve(
+ __dirname,
+ "./fixtures/plugin/default-other-plugin.js"
+ ),
+ { alpha: 0.5, color: "red" },
+ ],
+ ],
+ },
+ });
+ const stats = await compile(compiler);
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "config" options with "false" value', async () => {
+ const compiler = getCompiler("./config-scope/css/index.js", {
+ postcssOptions: {
+ config: false,
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "config" options with "true" value', async () => {
+ const compiler = getCompiler("./config-scope/css/index.js", {
+ postcssOptions: {
+ config: true,
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "config" options with "String" value (absolute path)', async () => {
+ const compiler = getCompiler("./config-scope/css/index.js", {
+ postcssOptions: {
+ config: path.resolve(
+ __dirname,
+ "./fixtures/config-scope/css/custom.config.js"
+ ),
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "config" options "String" value (relative path)', async () => {
+ const compiler = getCompiler("./config-scope/css/index.js", {
+ postcssOptions: {
+ config: "test/fixtures/config-scope/css/custom.config.js",
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "config" options with "String" value (with path to the directory with the configuration)', async () => {
+ const compiler = getCompiler("./config-scope/css/index.js", {
+ postcssOptions: {
+ config: "test/fixtures/config-scope",
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "config" options with "package.json" configuration', async () => {
+ const compiler = getCompiler("./config-autoload/pkg/index.js", {
+ postcssOptions: {
+ config: path.resolve(__dirname, "./fixtures", "config-autoload/pkg"),
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("index.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "config" options and use plugins', async () => {
+ const compiler = getCompiler("./config-scope/with-config/index.js", {
+ postcssOptions: {
+ config: true,
+ plugins: ["postcss-dark-theme-class"],
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "config" options with "String" value and respect all options', async () => {
+ const compiler = getCompiler("./sss/index.js", {
+ postcssOptions: {
+ config: path.resolve(
+ __dirname,
+ "./fixtures/config-scope/all-options/postcss.config.js"
+ ),
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.sss", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should throw an error with the "config" option on the unresolved config', async () => {
+ const compiler = getCompiler("./config-scope/css/index.js", {
+ postcssOptions: {
+ config: path.resolve(
+ __dirname,
+ "./fixtures/config-scope/css/unresolve.js"
+ ),
+ },
+ });
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats, true)).toMatchSnapshot("errors");
+ });
+
+ it('should throw an error with the "config" option on the invalid config', async () => {
+ const compiler = getCompiler("./config-scope/css/index.js", {
+ postcssOptions: {
+ config: path.resolve(
+ __dirname,
+ "./fixtures/config-scope/css/invalid.config.js"
+ ),
+ },
+ });
+ const stats = await compile(compiler);
+
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats, true)).toMatchSnapshot("errors");
+ });
+
+ it('should work with the "config" options and resolve "from" and "to" options', async () => {
+ const compiler = getCompiler("./config-scope/css/index.js", {
+ postcssOptions: {
+ config: path.resolve(
+ __dirname,
+ "./fixtures/config-scope/from-to/postcss.config.js"
+ ),
+ },
+ });
+ const stats = await compile(compiler);
+
+ const { css, sourceMap } = getCodeFromBundle("style.css", stats);
+
+ sourceMap.sourceRoot = "";
+ sourceMap.sources = sourceMap.sources.map((source) => {
+ expect(path.isAbsolute(source)).toBe(false);
+ expect(source).toBe(path.normalize(source));
+
+ return source.replace(/\\/g, "/");
+ });
+
+ expect(css).toMatchSnapshot("css");
+ expect(sourceMap).toMatchSnapshot("source map");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it("should work and provide API for the configuration", async () => {
+ const compiler = getCompiler("./css/index.js", {
+ postcssOptions: {
+ config: path.resolve(
+ __dirname,
+ "./fixtures/config-scope/api/postcss.config.js"
+ ),
+ },
+ });
+ const stats = await compile(compiler);
+
+ const codeFromBundle = getCodeFromBundle("style.css", stats);
+
+ expect(codeFromBundle.css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+});
diff --git a/test/sourceMap.test.js b/test/sourceMap.test.js
new file mode 100644
index 00000000..7be29d2c
--- /dev/null
+++ b/test/sourceMap.test.js
@@ -0,0 +1,500 @@
+/**
+ * @jest-environment node
+ */
+
+import path from "path";
+import fs from "fs";
+
+import {
+ compile,
+ getCompiler,
+ getErrors,
+ getCodeFromBundle,
+ getWarnings,
+} from "./helpers";
+
+describe('"sourceMap" option', () => {
+ it('should generate source maps with "true" value and the "devtool" with "false" value', async () => {
+ const compiler = getCompiler(
+ "./css/index.js",
+ {
+ sourceMap: true,
+ postcssOptions: { hideNothingWarning: true },
+ },
+ {
+ devtool: false,
+ }
+ );
+ const stats = await compile(compiler);
+ const { css, sourceMap } = getCodeFromBundle("style.css", stats);
+
+ sourceMap.sourceRoot = "";
+ sourceMap.sources = sourceMap.sources.map((source) => {
+ expect(path.isAbsolute(source)).toBe(true);
+ expect(source).toBe(path.normalize(source));
+ expect(fs.existsSync(path.resolve(sourceMap.sourceRoot, source))).toBe(
+ true
+ );
+
+ return path
+ .relative(path.resolve(__dirname, "./fixtures"), source)
+ .replace(/\\/g, "/");
+ });
+
+ expect(css).toMatchSnapshot("css");
+ expect(sourceMap).toMatchSnapshot("source map");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should generate source maps with "true" value and the "devtool" option with "source-map" value', async () => {
+ const compiler = getCompiler(
+ "./css/index.js",
+ {
+ sourceMap: true,
+ postcssOptions: { hideNothingWarning: true },
+ },
+ {
+ devtool: "source-map",
+ }
+ );
+ const stats = await compile(compiler);
+ const { css, sourceMap } = getCodeFromBundle("style.css", stats);
+
+ sourceMap.sourceRoot = "";
+ sourceMap.sources = sourceMap.sources.map((source) => {
+ expect(path.isAbsolute(source)).toBe(true);
+ expect(source).toBe(path.normalize(source));
+ expect(fs.existsSync(path.resolve(sourceMap.sourceRoot, source))).toBe(
+ true
+ );
+
+ return path
+ .relative(path.resolve(__dirname, "./fixtures"), source)
+ .replace(/\\/g, "/");
+ });
+
+ expect(css).toMatchSnapshot("css");
+ expect(sourceMap).toMatchSnapshot("source map");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should generate source maps when value is not specified and the "devtool" with "source-map" value', async () => {
+ const compiler = getCompiler(
+ "./css/index.js",
+ {
+ postcssOptions: { hideNothingWarning: true },
+ },
+ {
+ devtool: "source-map",
+ }
+ );
+ const stats = await compile(compiler);
+ const { css, sourceMap } = getCodeFromBundle("style.css", stats);
+
+ sourceMap.sourceRoot = "";
+ sourceMap.sources = sourceMap.sources.map((source) => {
+ expect(path.isAbsolute(source)).toBe(true);
+ expect(source).toBe(path.normalize(source));
+ expect(fs.existsSync(path.resolve(sourceMap.sourceRoot, source))).toBe(
+ true
+ );
+
+ return path
+ .relative(path.resolve(__dirname, "./fixtures"), source)
+ .replace(/\\/g, "/");
+ });
+
+ expect(css).toMatchSnapshot("css");
+ expect(sourceMap).toMatchSnapshot("source map");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should generate source maps with "false" value, but the "postcssOptions.map" has values', async () => {
+ const compiler = getCompiler(
+ "./css/index.js",
+ {
+ postcssOptions: {
+ map: {
+ inline: false,
+ annotation: false,
+ prev: false,
+ sourcesContent: true,
+ },
+ hideNothingWarning: true,
+ },
+ },
+ {
+ devtool: false,
+ }
+ );
+ const stats = await compile(compiler);
+ const { css, sourceMap } = getCodeFromBundle("style.css", stats);
+
+ sourceMap.sourceRoot = "";
+ sourceMap.sources = sourceMap.sources.map((source) => {
+ expect(path.isAbsolute(source)).toBe(false);
+ expect(source).toBe(path.normalize(source));
+ expect(
+ fs.existsSync(path.resolve(__dirname, "./fixtures/css", source))
+ ).toBe(true);
+
+ return source.replace(/\\/g, "/");
+ });
+
+ expect(css).toMatchSnapshot("css");
+ expect(sourceMap).toMatchSnapshot("source map");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should generate source maps using the "postcssOptions.map" option with "true" value and previous loader returns source maps ("sass-loader")', async () => {
+ const compiler = getCompiler(
+ "./scss/index.js",
+ {},
+ {
+ devtool: false,
+ module: {
+ rules: [
+ {
+ test: /\.scss$/i,
+ use: [
+ {
+ loader: require.resolve("./helpers/testLoader"),
+ options: {},
+ },
+ {
+ loader: path.resolve(__dirname, "../src"),
+ options: {
+ postcssOptions: {
+ map: true,
+ hideNothingWarning: true,
+ },
+ },
+ },
+ {
+ loader: "sass-loader",
+ options: {
+ // eslint-disable-next-line global-require
+ implementation: require("sass"),
+ sassOptions: {
+ sourceMap: true,
+ sourceMapRoot: path.resolve(
+ __dirname,
+ "./fixtures/scss/"
+ ),
+ outFile: path.resolve(
+ __dirname,
+ "./fixtures/scss/style.css.map"
+ ),
+ sourceMapContents: true,
+ omitSourceMapUrl: true,
+ sourceMapEmbed: false,
+ },
+ },
+ },
+ ],
+ },
+ ],
+ },
+ }
+ );
+ const stats = await compile(compiler);
+ const { css, sourceMap } = getCodeFromBundle("style.scss", stats);
+
+ expect(css).toMatchSnapshot("css");
+ expect(sourceMap).toBeUndefined();
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should generate source maps using the "postcssOptions.map" option with values and previous loader returns source maps ("sass-loader")', async () => {
+ const compiler = getCompiler(
+ "./scss/index.js",
+ {},
+ {
+ devtool: false,
+ module: {
+ rules: [
+ {
+ test: /\.scss$/i,
+ use: [
+ {
+ loader: require.resolve("./helpers/testLoader"),
+ options: {},
+ },
+ {
+ loader: path.resolve(__dirname, "../src"),
+ options: {
+ postcssOptions: {
+ map: {
+ inline: false,
+ sourcesContent: true,
+ annotation: true,
+ },
+ hideNothingWarning: true,
+ },
+ },
+ },
+ {
+ loader: "sass-loader",
+ options: {
+ // eslint-disable-next-line global-require
+ implementation: require("sass"),
+ sassOptions: {
+ sourceMap: true,
+ sourceMapRoot: path.resolve(
+ __dirname,
+ "./fixtures/scss/"
+ ),
+ outFile: path.resolve(
+ __dirname,
+ "./fixtures/scss/style.css.map"
+ ),
+ sourceMapContents: true,
+ omitSourceMapUrl: true,
+ sourceMapEmbed: false,
+ },
+ },
+ },
+ ],
+ },
+ ],
+ },
+ }
+ );
+ const stats = await compile(compiler);
+ const { css, sourceMap } = getCodeFromBundle("style.scss", stats);
+
+ sourceMap.sourceRoot = "";
+ sourceMap.sources = sourceMap.sources.map((source) => {
+ expect(path.isAbsolute(source)).toBe(false);
+ expect(
+ fs.existsSync(path.resolve(__dirname, "./fixtures/scss", source))
+ ).toBe(true);
+
+ return source.replace(/\\/g, "/");
+ });
+
+ expect(css).toMatchSnapshot("css");
+ expect(sourceMap).toMatchSnapshot("source map");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should not generate source maps with "false" value and the "devtool" option with "false" value', async () => {
+ const compiler = getCompiler(
+ "./css/index.js",
+ {
+ sourceMap: false,
+ postcssOptions: { hideNothingWarning: true },
+ },
+ {
+ devtool: false,
+ }
+ );
+ const stats = await compile(compiler);
+ const { css, sourceMap } = getCodeFromBundle("style.css", stats);
+
+ expect(css).toMatchSnapshot("css");
+ expect(sourceMap).toBeUndefined();
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should not generate source maps with "false" value and the "devtool" option with "source-map" value', async () => {
+ const compiler = getCompiler(
+ "./css/index.js",
+ {
+ sourceMap: false,
+ postcssOptions: { hideNothingWarning: true },
+ },
+ {
+ devtool: "source-map",
+ }
+ );
+ const stats = await compile(compiler);
+ const { css, sourceMap } = getCodeFromBundle("style.css", stats);
+
+ expect(css).toMatchSnapshot("css");
+ expect(sourceMap).toBeUndefined();
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should not generate source maps when value is not specified and the "devtool" option with "source-map" value', async () => {
+ const compiler = getCompiler(
+ "./css/index.js",
+ {
+ postcssOptions: { hideNothingWarning: true },
+ },
+ {
+ devtool: false,
+ }
+ );
+ const stats = await compile(compiler);
+ const { css, sourceMap } = getCodeFromBundle("style.css", stats);
+
+ expect(css).toMatchSnapshot("css");
+ expect(sourceMap).toBeUndefined();
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should generate source maps when previous loader returns source maps ("sass-loader")', async () => {
+ const compiler = getCompiler(
+ "./scss/index.js",
+ {},
+ {
+ devtool: "source-map",
+ module: {
+ rules: [
+ {
+ test: /\.scss$/i,
+ use: [
+ {
+ loader: require.resolve("./helpers/testLoader"),
+ },
+ {
+ loader: path.resolve(__dirname, "../src"),
+ options: {
+ postcssOptions: { hideNothingWarning: true },
+ },
+ },
+ {
+ loader: "sass-loader",
+ options: {
+ // eslint-disable-next-line global-require
+ implementation: require("sass"),
+ },
+ },
+ ],
+ },
+ ],
+ },
+ }
+ );
+ const stats = await compile(compiler);
+ const { css, sourceMap } = getCodeFromBundle("style.scss", stats);
+
+ sourceMap.sourceRoot = "";
+ sourceMap.sources = sourceMap.sources.map((source) => {
+ expect(path.isAbsolute(source)).toBe(true);
+ expect(source).toBe(path.normalize(source));
+ expect(fs.existsSync(path.resolve(sourceMap.sourceRoot, source))).toBe(
+ true
+ );
+
+ return path
+ .relative(path.resolve(__dirname, "./fixtures"), source)
+ .replace(/\\/g, "/");
+ });
+
+ expect(css).toMatchSnapshot("css");
+ expect(sourceMap).toMatchSnapshot("source map");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should generate source maps when previous loader returns source maps ("less-loader")', async () => {
+ const compiler = getCompiler(
+ "./less/index.js",
+ {},
+ {
+ devtool: "source-map",
+ module: {
+ rules: [
+ {
+ test: /\.less$/i,
+ use: [
+ {
+ loader: require.resolve("./helpers/testLoader"),
+ options: {},
+ },
+ {
+ loader: path.resolve(__dirname, "../src"),
+ options: {
+ postcssOptions: { hideNothingWarning: true },
+ },
+ },
+ {
+ loader: "less-loader",
+ },
+ ],
+ },
+ ],
+ },
+ }
+ );
+ const stats = await compile(compiler);
+ const { css, sourceMap } = getCodeFromBundle("style.less", stats);
+
+ sourceMap.sourceRoot = "";
+ sourceMap.sources = sourceMap.sources.map((source) => {
+ expect(path.isAbsolute(source)).toBe(true);
+ expect(source).toBe(path.normalize(source));
+ expect(fs.existsSync(path.resolve(sourceMap.sourceRoot, source))).toBe(
+ true
+ );
+
+ return path
+ .relative(path.resolve(__dirname, "./fixtures"), source)
+ .replace(/\\/g, "/");
+ });
+
+ expect(css).toMatchSnapshot("css");
+ expect(sourceMap).toMatchSnapshot("source map");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should generate inline source maps when the "devtool" is "false"', async () => {
+ const compiler = getCompiler(
+ "./css/index.js",
+ {
+ postcssOptions: {
+ map: {
+ inline: true,
+ annotation: false,
+ },
+ hideNothingWarning: true,
+ },
+ },
+ {
+ devtool: false,
+ }
+ );
+ const stats = await compile(compiler);
+ const { css } = getCodeFromBundle("style.css", stats);
+
+ expect(css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+
+ it('should generate inline source maps when the "devtool" is "true"', async () => {
+ const compiler = getCompiler(
+ "./css/index.js",
+ {
+ postcssOptions: {
+ map: {
+ inline: true,
+ annotation: false,
+ },
+ hideNothingWarning: true,
+ },
+ },
+ {
+ devtool: "source-map",
+ }
+ );
+ const stats = await compile(compiler);
+ const { css } = getCodeFromBundle("style.css", stats);
+
+ expect(css).toMatchSnapshot("css");
+ expect(getWarnings(stats)).toMatchSnapshot("warnings");
+ expect(getErrors(stats)).toMatchSnapshot("errors");
+ });
+});
diff --git a/test/test-custom-parser.js b/test/test-custom-parser.js
deleted file mode 100644
index 39448ecf..00000000
--- a/test/test-custom-parser.js
+++ /dev/null
@@ -1,9 +0,0 @@
-describe('custom parser', function () {
-
- it('processes sugarss', function () {
- var css = require('!raw-loader!../?parser=sugarss!' +
- './cases/sugar.sss');
- expect(css).toEqual('a {\n color: blue\n}\n');
- });
-
-});
diff --git a/test/test-default.js b/test/test-default.js
deleted file mode 100644
index ae35d951..00000000
--- a/test/test-default.js
+++ /dev/null
@@ -1,58 +0,0 @@
-describe('default', function () {
-
- it('processes CSS with default plugins', function () {
- var css = require('!raw-loader!../!./cases/style.css');
- expect(css).toEqual('a { color: blue }\n');
- });
-
- it('overrides default config by subdir config', function () {
- var css = require('!raw-loader!../!./cases/config/style.css');
- expect(css).toEqual('a { color: black }\n');
- });
-
- it('send webpack instance to config', function () {
- var css = require('!raw-loader!../!./cases/env/style.css');
- expect(css).toEqual('a::before { content: "style.css" }\n');
- });
-
- it('processes CSS in safe mode', function () {
- var css = require('!raw-loader' +
- '!../?parser=postcss-safe-parser' +
- '!./cases/broken.css');
- expect(css).toEqual('a { color:\n}');
- });
-
- it('lets other plugins alter the used plugins', function () {
- var css = require('!raw-loader!../?rewrite=true' +
- '!./cases/style.css');
- expect(css).toEqual('a { color: black }\n');
- });
-
- it('processes CSS-in-JS', function () {
- var css = require('!raw-loader' +
- '!../?parser=postcss-js' +
- '!./cases/style.js');
- expect(css).toEqual('a {\n color: blue\n}');
- });
-
- it('processes CSS with exec', function () {
- var css = require('!raw-loader' +
- '!../?exec' +
- '!./cases/exec.js');
- expect(css).toEqual('a {\n color: green\n}');
- });
-
- it('inlines map', function () {
- var css = require('!raw-loader!../?sourceMap=inline' +
- '!./cases/style.css');
- expect(css).toContain('/*# sourceMappingURL=');
- });
-
- it('allows to change config path', function () {
- var css = require('!raw-loader' +
- '!../?config=test/cases/config/postcss.config.js' +
- '!./cases/style.css');
- expect(css).toEqual('a { color: black }\n');
- });
-
-});
diff --git a/test/test-explicit-plugins.js b/test/test-explicit-plugins.js
deleted file mode 100644
index 3913b514..00000000
--- a/test/test-explicit-plugins.js
+++ /dev/null
@@ -1,9 +0,0 @@
-describe('explicit plugins', function () {
-
- it('processes CSS with custom plugins', function () {
- var css = require('!raw-loader!../!' +
- './cases/style.css');
- expect(css).toEqual('a { color: rgba(255, 0, 0, 0.1) }\n');
- });
-
-});
diff --git a/test/test-incorrect-using-packs.js b/test/test-incorrect-using-packs.js
deleted file mode 100644
index 9e1bd9a6..00000000
--- a/test/test-incorrect-using-packs.js
+++ /dev/null
@@ -1,14 +0,0 @@
-describe('incorrect using packs', function () {
-
- it('fails to load specific pack', function () {
- var error;
- try {
- require('!raw-loader!../?pack=blues!' +
- './cases/style.css');
- } catch (err) {
- error = err;
- }
- expect(error.message).toMatch(/find module/);
- });
-
-});
diff --git a/test/test-with-packs.js b/test/test-with-packs.js
deleted file mode 100644
index e81769d0..00000000
--- a/test/test-with-packs.js
+++ /dev/null
@@ -1,15 +0,0 @@
-describe('with packs', function () {
-
- it('processes CSS with default plugins', function () {
- var css = require('!raw-loader!../!' +
- './cases/style.css');
- expect(css).toEqual('a { color: rgba(255, 0, 0, 0.1) }\n');
- });
-
- it('processes CSS with custom plugins', function () {
- var css = require('!raw-loader!../?pack=blues!' +
- './cases/style.css');
- expect(css).toEqual('a { color: blue }\n');
- });
-
-});
diff --git a/test/validate-options.test.js b/test/validate-options.test.js
new file mode 100644
index 00000000..8122f5bf
--- /dev/null
+++ b/test/validate-options.test.js
@@ -0,0 +1,136 @@
+/* eslint-disable global-require */
+import path from "path";
+
+import { getCompiler, compile } from "./helpers/index";
+
+describe("validate options", () => {
+ const tests = {
+ execute: {
+ success: [false],
+ failure: [1, "test", /test/, [], {}, { foo: "bar" }],
+ },
+ postcssOptions: {
+ success: [
+ { parser: "sugarss" },
+ { parser: require("sugarss") },
+ { parser: require("sugarss").parse },
+ { syntax: "sugarss" },
+ { syntax: require("sugarss") },
+ { stringifier: "sugarss" },
+ { stringifier: require("sugarss") },
+ { stringifier: require("sugarss").stringify },
+ {
+ plugins: [
+ require("./fixtures/plugin/plugin")(),
+ require("./fixtures/plugin/plugin"),
+ ["postcss-short", { prefix: "x" }],
+ ],
+ },
+ {
+ plugins: [
+ require("./fixtures/plugin/plugin")(),
+ require("./fixtures/plugin/plugin"),
+ { "postcss-short": { prefix: "x" } },
+ ],
+ },
+ { plugins: { "postcss-short": { prefix: "x" } } },
+ { config: true },
+ { config: false },
+ { config: "test/fixtures/config-scope/config/postcss.config.js" },
+ {
+ config: path.resolve(
+ __dirname,
+ "./fixtures/config-scope/config/postcss.config.js"
+ ),
+ },
+ ],
+ failure: [{ config: [] }, { config: /test/ }],
+ },
+ sourceMap: {
+ success: [true, false],
+ failure: [1, /test/, [], {}, "something"],
+ },
+ implementation: {
+ success: [require("postcss"), "postcss"],
+ failure: [1, /test/, [], {}],
+ },
+ };
+
+ function stringifyValue(value) {
+ if (
+ Array.isArray(value) ||
+ (value && typeof value === "object" && value.constructor === Object)
+ ) {
+ return JSON.stringify(value);
+ }
+
+ return value;
+ }
+
+ async function createTestCase(key, value, type) {
+ it(`should ${
+ type === "success" ? "successfully validate" : "throw an error on"
+ } the "${key}" option with "${stringifyValue(value)}" value`, async () => {
+ let compiler;
+
+ if (
+ key === "postcssOptions" &&
+ // eslint-disable-next-line no-prototype-builtins
+ (value.hasOwnProperty("parser") || value.hasOwnProperty("syntax"))
+ ) {
+ compiler = getCompiler(
+ "./sss/index.js",
+ {},
+ {
+ module: {
+ rules: [
+ {
+ test: /\.sss$/i,
+ use: [
+ {
+ loader: require.resolve("./helpers/testLoader"),
+ options: {},
+ },
+ {
+ loader: path.resolve(__dirname, "../src"),
+ options: { [key]: value },
+ },
+ ],
+ },
+ ],
+ },
+ }
+ );
+ } else {
+ compiler = getCompiler("./css/index.js", { [key]: value });
+ }
+
+ let stats;
+
+ try {
+ stats = await compile(compiler);
+ } finally {
+ if (type === "success") {
+ expect(stats.hasErrors()).toBe(false);
+ } else if (type === "failure") {
+ const {
+ compilation: { errors },
+ } = stats;
+
+ expect(errors).toHaveLength(1);
+ expect(() => {
+ throw new Error(errors[0].error.message);
+ }).toThrowErrorMatchingSnapshot();
+ }
+ }
+ });
+ }
+
+ for (const [key, values] of Object.entries(tests)) {
+ for (const type of Object.keys(values)) {
+ for (const value of values[type]) {
+ createTestCase(key, value, type);
+ }
+ }
+ }
+});
diff --git a/test/webpack-custom-parser.config.js b/test/webpack-custom-parser.config.js
deleted file mode 100644
index 41a79574..00000000
--- a/test/webpack-custom-parser.config.js
+++ /dev/null
@@ -1,16 +0,0 @@
-var path = require('path');
-
-var RewritePlugin = require('./webpack-plugins/rewrite.js');
-
-module.exports = {
- target: 'node',
- context: __dirname,
- entry: './test-custom-parser.js',
- output: {
- filename: 'test-custom-parser.test.js',
- path: path.join(__dirname, '..', 'build')
- },
- plugins: [
- new RewritePlugin()
- ]
-};
diff --git a/test/webpack-default.config.js b/test/webpack-default.config.js
deleted file mode 100644
index 277fe82a..00000000
--- a/test/webpack-default.config.js
+++ /dev/null
@@ -1,16 +0,0 @@
-var path = require('path');
-
-var RewritePlugin = require('./webpack-plugins/rewrite.js');
-
-module.exports = {
- target: 'node',
- context: __dirname,
- entry: './test-default.js',
- output: {
- filename: 'test-default.test.js',
- path: path.join(__dirname, '..', 'build')
- },
- plugins: [
- new RewritePlugin()
- ]
-};
diff --git a/test/webpack-explicit-plugins.config.js b/test/webpack-explicit-plugins.config.js
deleted file mode 100644
index a4b71c91..00000000
--- a/test/webpack-explicit-plugins.config.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var path = require('path');
-
-var blue = require('./plugins/blue');
-var red = require('./plugins/red');
-var RewritePlugin = require('./webpack-plugins/rewrite.js');
-
-module.exports = {
- target: 'node',
- context: __dirname,
- entry: './test-explicit-plugins.js',
- output: {
- filename: 'test-explicit-plugins.test.js',
- path: path.join(__dirname, '..', 'build')
- },
- postcss: function () {
- return [blue, red({ alpha: 0.1 })];
- },
- plugins: [
- new RewritePlugin()
- ]
-};
diff --git a/test/webpack-incorrect-using-packs.config.js b/test/webpack-incorrect-using-packs.config.js
deleted file mode 100644
index 18dd9e34..00000000
--- a/test/webpack-incorrect-using-packs.config.js
+++ /dev/null
@@ -1,16 +0,0 @@
-var path = require('path');
-
-var RewritePlugin = require('./webpack-plugins/rewrite.js');
-
-module.exports = {
- target: 'node',
- context: __dirname,
- entry: './test-incorrect-using-packs.js',
- output: {
- filename: 'test-incorrect-using-packs.test.js',
- path: path.join(__dirname, '..', 'build')
- },
- plugins: [
- new RewritePlugin()
- ]
-};
diff --git a/test/webpack-plugins/rewrite.js b/test/webpack-plugins/rewrite.js
deleted file mode 100644
index 7fd02108..00000000
--- a/test/webpack-plugins/rewrite.js
+++ /dev/null
@@ -1,21 +0,0 @@
-function RewritePlugin() {
-
-}
-
-RewritePlugin.prototype.apply = function (compiler) {
- function rewrite(postcssPlugins, loaderParams) {
- // Just for the demo and test we remove all plugins if
- // the 'rewrite' parameter is set
- if (loaderParams.rewrite) {
- return [];
- }
- // If the rewrite parameter isn't set we don't change the modules
- return postcssPlugins;
- }
-
- compiler.plugin('compilation', function (compilation) {
- compilation.plugin('postcss-loader-before-processing', rewrite);
- });
-};
-
-module.exports = RewritePlugin;
diff --git a/test/webpack-with-packs.config.js b/test/webpack-with-packs.config.js
deleted file mode 100644
index 6bf22592..00000000
--- a/test/webpack-with-packs.config.js
+++ /dev/null
@@ -1,24 +0,0 @@
-var path = require('path');
-
-var blue = require('./plugins/blue');
-var red = require('./plugins/red');
-var RewritePlugin = require('./webpack-plugins/rewrite.js');
-
-module.exports = {
- target: 'node',
- context: __dirname,
- entry: './test-with-packs.js',
- output: {
- filename: 'test-with-packs.test.js',
- path: path.join(__dirname, '..', 'build')
- },
- postcss: function () {
- return {
- defaults: [blue, red({ alpha: 0.1 })],
- blues: [blue]
- };
- },
- plugins: [
- new RewritePlugin()
- ]
-};
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index f4724507..00000000
--- a/yarn.lock
+++ /dev/null
@@ -1,3991 +0,0 @@
-# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
-# yarn lockfile v1
-
-
-abab@^1.0.3:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.3.tgz#b81de5f7274ec4e756d797cd834f303642724e5d"
-
-abbrev@1:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.0.tgz#d0554c2256636e2f56e7c2e5ad183f859428d81f"
-
-acorn-globals@^3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-3.1.0.tgz#fd8270f71fbb4996b004fa880ee5d46573a731bf"
- dependencies:
- acorn "^4.0.4"
-
-acorn-jsx@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
- dependencies:
- acorn "^3.0.4"
-
-acorn@4.0.4, acorn@^4.0.4:
- version "4.0.4"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.4.tgz#17a8d6a7a6c4ef538b814ec9abac2779293bf30a"
-
-acorn@^3.0.0, acorn@^3.0.4:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
-
-ajv-keywords@^1.0.0:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
-
-ajv@^4.7.0:
- version "4.11.3"
- resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.3.tgz#ce30bdb90d1254f762c75af915fb3a63e7183d22"
- dependencies:
- co "^4.6.0"
- json-stable-stringify "^1.0.1"
-
-align-text@^0.1.1, align-text@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
- dependencies:
- kind-of "^3.0.2"
- longest "^1.0.1"
- repeat-string "^1.5.2"
-
-amdefine@>=0.0.4:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
-
-ansi-escapes@^1.0.0, ansi-escapes@^1.1.0, ansi-escapes@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
-
-ansi-regex@^2.0.0:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
-
-ansi-styles@^2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
-
-ansi-styles@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.0.0.tgz#5404e93a544c4fec7f048262977bebfe3155e0c1"
- dependencies:
- color-convert "^1.0.0"
-
-anymatch@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.0.tgz#a3e52fa39168c825ff57b0248126ce5a8ff95507"
- dependencies:
- arrify "^1.0.0"
- micromatch "^2.1.5"
-
-app-root-path@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/app-root-path/-/app-root-path-2.0.1.tgz#cd62dcf8e4fd5a417efc664d2e5b10653c651b46"
-
-append-transform@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991"
- dependencies:
- default-require-extensions "^1.0.0"
-
-aproba@^1.0.3:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.1.1.tgz#95d3600f07710aa0e9298c726ad5ecf2eacbabab"
-
-archy@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40"
-
-are-we-there-yet@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.2.tgz#80e470e95a084794fe1899262c5667c6e88de1b3"
- dependencies:
- delegates "^1.0.0"
- readable-stream "^2.0.0 || ^1.1.13"
-
-argparse@^1.0.7:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
- dependencies:
- sprintf-js "~1.0.2"
-
-arr-diff@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf"
- dependencies:
- arr-flatten "^1.0.1"
-
-arr-flatten@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.0.1.tgz#e5ffe54d45e19f32f216e91eb99c8ce892bb604b"
-
-array-differ@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-1.0.0.tgz#eff52e3758249d33be402b8bb8e564bb2b5d4031"
-
-array-equal@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93"
-
-array-union@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
- dependencies:
- array-uniq "^1.0.1"
-
-array-uniq@^1.0.1, array-uniq@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
-
-array-unique@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53"
-
-arrify@^1.0.0, arrify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
-
-asn1@~0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
-
-assert-plus@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234"
-
-assert-plus@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
-
-assert@^1.1.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91"
- dependencies:
- util "0.10.3"
-
-async-each@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
-
-async@^0.9.0:
- version "0.9.2"
- resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
-
-async@^1.3.0, async@^1.4.0, async@^1.4.2:
- version "1.5.2"
- resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a"
-
-async@^2.1.4:
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/async/-/async-2.1.5.tgz#e587c68580994ac67fc56ff86d3ac56bdbe810bc"
- dependencies:
- lodash "^4.14.0"
-
-async@~0.2.6:
- version "0.2.10"
- resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1"
-
-asynckit@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
-
-aws-sign2@~0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f"
-
-aws4@^1.2.1:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e"
-
-babel-code-frame@^6.16.0, babel-code-frame@^6.22.0:
- version "6.22.0"
- resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
- dependencies:
- chalk "^1.1.0"
- esutils "^2.0.2"
- js-tokens "^3.0.0"
-
-babel-core@^6.0.0, babel-core@^6.23.0:
- version "6.23.1"
- resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.23.1.tgz#c143cb621bb2f621710c220c5d579d15b8a442df"
- dependencies:
- babel-code-frame "^6.22.0"
- babel-generator "^6.23.0"
- babel-helpers "^6.23.0"
- babel-messages "^6.23.0"
- babel-register "^6.23.0"
- babel-runtime "^6.22.0"
- babel-template "^6.23.0"
- babel-traverse "^6.23.1"
- babel-types "^6.23.0"
- babylon "^6.11.0"
- convert-source-map "^1.1.0"
- debug "^2.1.1"
- json5 "^0.5.0"
- lodash "^4.2.0"
- minimatch "^3.0.2"
- path-is-absolute "^1.0.0"
- private "^0.1.6"
- slash "^1.0.0"
- source-map "^0.5.0"
-
-babel-generator@^6.18.0, babel-generator@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.23.0.tgz#6b8edab956ef3116f79d8c84c5a3c05f32a74bc5"
- dependencies:
- babel-messages "^6.23.0"
- babel-runtime "^6.22.0"
- babel-types "^6.23.0"
- detect-indent "^4.0.0"
- jsesc "^1.3.0"
- lodash "^4.2.0"
- source-map "^0.5.0"
- trim-right "^1.0.1"
-
-babel-helpers@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.23.0.tgz#4f8f2e092d0b6a8808a4bde79c27f1e2ecf0d992"
- dependencies:
- babel-runtime "^6.22.0"
- babel-template "^6.23.0"
-
-babel-jest@^19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-19.0.0.tgz#59323ced99a3a84d359da219ca881074ffc6ce3f"
- dependencies:
- babel-core "^6.0.0"
- babel-plugin-istanbul "^4.0.0"
- babel-preset-jest "^19.0.0"
-
-babel-messages@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e"
- dependencies:
- babel-runtime "^6.22.0"
-
-babel-plugin-istanbul@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.0.0.tgz#36bde8fbef4837e5ff0366531a2beabd7b1ffa10"
- dependencies:
- find-up "^2.1.0"
- istanbul-lib-instrument "^1.4.2"
- test-exclude "^4.0.0"
-
-babel-plugin-jest-hoist@^19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-19.0.0.tgz#4ae2a04ea612a6e73651f3fde52c178991304bea"
-
-babel-preset-jest@^19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz#22d67201d02324a195811288eb38294bb3cac396"
- dependencies:
- babel-plugin-jest-hoist "^19.0.0"
-
-babel-register@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.23.0.tgz#c9aa3d4cca94b51da34826c4a0f9e08145d74ff3"
- dependencies:
- babel-core "^6.23.0"
- babel-runtime "^6.22.0"
- core-js "^2.4.0"
- home-or-tmp "^2.0.0"
- lodash "^4.2.0"
- mkdirp "^0.5.1"
- source-map-support "^0.4.2"
-
-babel-runtime@^6.22.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b"
- dependencies:
- core-js "^2.4.0"
- regenerator-runtime "^0.10.0"
-
-babel-template@^6.16.0, babel-template@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.23.0.tgz#04d4f270adbb3aa704a8143ae26faa529238e638"
- dependencies:
- babel-runtime "^6.22.0"
- babel-traverse "^6.23.0"
- babel-types "^6.23.0"
- babylon "^6.11.0"
- lodash "^4.2.0"
-
-babel-traverse@^6.18.0, babel-traverse@^6.23.0, babel-traverse@^6.23.1:
- version "6.23.1"
- resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.23.1.tgz#d3cb59010ecd06a97d81310065f966b699e14f48"
- dependencies:
- babel-code-frame "^6.22.0"
- babel-messages "^6.23.0"
- babel-runtime "^6.22.0"
- babel-types "^6.23.0"
- babylon "^6.15.0"
- debug "^2.2.0"
- globals "^9.0.0"
- invariant "^2.2.0"
- lodash "^4.2.0"
-
-babel-types@^6.18.0, babel-types@^6.23.0:
- version "6.23.0"
- resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.23.0.tgz#bb17179d7538bad38cd0c9e115d340f77e7e9acf"
- dependencies:
- babel-runtime "^6.22.0"
- esutils "^2.0.2"
- lodash "^4.2.0"
- to-fast-properties "^1.0.1"
-
-babylon@^6.11.0, babylon@^6.13.0, babylon@^6.15.0:
- version "6.16.1"
- resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.16.1.tgz#30c5a22f481978a9e7f8cdfdf496b11d94b404d3"
-
-balanced-match@^0.4.1:
- version "0.4.2"
- resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
-
-base64-js@^1.0.2:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.0.tgz#a39992d723584811982be5e290bb6a53d86700f1"
-
-bcrypt-pbkdf@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d"
- dependencies:
- tweetnacl "^0.14.3"
-
-beeper@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/beeper/-/beeper-1.1.1.tgz#e6d5ea8c5dad001304a70b22638447f69cb2f809"
-
-big.js@^3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.1.3.tgz#4cada2193652eb3ca9ec8e55c9015669c9806978"
-
-binary-extensions@^1.0.0:
- version "1.8.0"
- resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.8.0.tgz#48ec8d16df4377eae5fa5884682480af4d95c774"
-
-block-stream@*:
- version "0.0.9"
- resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
- dependencies:
- inherits "~2.0.0"
-
-boom@2.x.x:
- version "2.10.1"
- resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f"
- dependencies:
- hoek "2.x.x"
-
-brace-expansion@^1.0.0:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.6.tgz#7197d7eaa9b87e648390ea61fc66c84427420df9"
- dependencies:
- balanced-match "^0.4.1"
- concat-map "0.0.1"
-
-braces@^1.8.2:
- version "1.8.5"
- resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7"
- dependencies:
- expand-range "^1.8.1"
- preserve "^0.2.0"
- repeat-element "^1.1.2"
-
-browser-resolve@^1.11.2:
- version "1.11.2"
- resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce"
- dependencies:
- resolve "1.1.7"
-
-browserify-aes@0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c"
- dependencies:
- inherits "^2.0.1"
-
-browserify-zlib@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d"
- dependencies:
- pako "~0.2.0"
-
-bser@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/bser/-/bser-1.0.2.tgz#381116970b2a6deea5646dd15dd7278444b56169"
- dependencies:
- node-int64 "^0.4.0"
-
-bser@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719"
- dependencies:
- node-int64 "^0.4.0"
-
-buffer-shims@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
-
-buffer@^4.9.0:
- version "4.9.1"
- resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298"
- dependencies:
- base64-js "^1.0.2"
- ieee754 "^1.1.4"
- isarray "^1.0.0"
-
-bufferstreams@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/bufferstreams/-/bufferstreams-1.1.1.tgz#0161373060ac5988eff99058731114f6e195d51e"
- dependencies:
- readable-stream "^2.0.2"
-
-builtin-modules@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
-
-builtin-status-codes@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8"
-
-caller-path@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
- dependencies:
- callsites "^0.2.0"
-
-callsites@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
-
-callsites@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50"
-
-camelcase-css@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-1.0.1.tgz#157c4238265f5cf94a1dffde86446552cbf3f705"
-
-camelcase@^1.0.2:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39"
-
-camelcase@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
-
-caseless@~0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7"
-
-center-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
- dependencies:
- align-text "^0.1.3"
- lazy-cache "^1.0.3"
-
-chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
- version "1.1.3"
- resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
- dependencies:
- 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"
-
-chokidar@^1.0.0:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.6.1.tgz#2f4447ab5e96e50fb3d789fd90d4c72e0e4c70c2"
- dependencies:
- anymatch "^1.3.0"
- async-each "^1.0.0"
- glob-parent "^2.0.0"
- inherits "^2.0.1"
- is-binary-path "^1.0.0"
- is-glob "^2.0.0"
- path-is-absolute "^1.0.0"
- readdirp "^2.0.0"
- optionalDependencies:
- fsevents "^1.0.0"
-
-ci-info@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.0.0.tgz#dc5285f2b4e251821683681c381c3388f46ec534"
-
-circular-json@^0.3.1:
- version "0.3.1"
- resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d"
-
-cli-cursor@^1.0.1, cli-cursor@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
- dependencies:
- restore-cursor "^1.0.1"
-
-cli-spinners@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c"
-
-cli-truncate@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574"
- dependencies:
- slice-ansi "0.0.4"
- string-width "^1.0.1"
-
-cli-width@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
-
-cliui@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1"
- dependencies:
- center-align "^0.1.1"
- right-align "^0.1.1"
- wordwrap "0.0.2"
-
-cliui@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- wrap-ansi "^2.0.0"
-
-clone-stats@^0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-0.0.1.tgz#b88f94a82cf38b8791d58046ea4029ad88ca99d1"
-
-clone@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/clone/-/clone-0.2.0.tgz#c6126a90ad4f72dbf5acdb243cc37724fe93fc1f"
-
-clone@^1.0.0, clone@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.2.tgz#260b7a99ebb1edfe247538175f783243cb19d149"
-
-co@^4.6.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
-
-code-point-at@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
-
-color-convert@^1.0.0:
- version "1.9.0"
- resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a"
- dependencies:
- color-name "^1.1.1"
-
-color-name@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.1.tgz#4b1415304cf50028ea81643643bd82ea05803689"
-
-combined-stream@^1.0.5, combined-stream@~1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009"
- dependencies:
- delayed-stream "~1.0.0"
-
-commander@^2.9.0:
- version "2.9.0"
- resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4"
- dependencies:
- graceful-readlink ">= 1.0.0"
-
-concat-map@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
-
-concat-stream@^1.4.6, concat-stream@^1.4.7:
- version "1.6.0"
- resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
- dependencies:
- inherits "^2.0.3"
- readable-stream "^2.2.2"
- typedarray "^0.0.6"
-
-console-browserify@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
- dependencies:
- date-now "^0.1.4"
-
-console-control-strings@^1.0.0, console-control-strings@~1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e"
-
-constants-browserify@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75"
-
-content-type-parser@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.1.tgz#c3e56988c53c65127fb46d4032a3a900246fdc94"
-
-convert-source-map@^1.1.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.4.0.tgz#e3dad195bf61bfe13a7a3c73e9876ec14a0268f3"
-
-core-js@^2.4.0:
- version "2.4.1"
- resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.4.1.tgz#4de911e667b0eae9124e34254b53aea6fc618d3e"
-
-core-util-is@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
-
-cosmiconfig@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-1.1.0.tgz#0dea0f9804efdfb929fbb1b188e25553ea053d37"
- dependencies:
- graceful-fs "^4.1.2"
- js-yaml "^3.4.3"
- minimist "^1.2.0"
- object-assign "^4.0.1"
- os-homedir "^1.0.1"
- parse-json "^2.2.0"
- pinkie-promise "^2.0.0"
- require-from-string "^1.1.0"
-
-cosmiconfig@^2.1.0, cosmiconfig@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.1.1.tgz#817f2c2039347a1e9bf7d090c0923e53f749ca82"
- dependencies:
- js-yaml "^3.4.3"
- minimist "^1.2.0"
- object-assign "^4.1.0"
- os-homedir "^1.0.1"
- parse-json "^2.2.0"
- require-from-string "^1.1.0"
-
-cross-spawn@^5.0.1:
- version "5.1.0"
- resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
- dependencies:
- lru-cache "^4.0.1"
- shebang-command "^1.2.0"
- which "^1.2.9"
-
-cryptiles@2.x.x:
- version "2.0.5"
- resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
- dependencies:
- boom "2.x.x"
-
-crypto-browserify@3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c"
- dependencies:
- browserify-aes "0.4.0"
- pbkdf2-compat "2.0.1"
- ripemd160 "0.2.0"
- sha.js "2.2.6"
-
-cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0":
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b"
-
-"cssstyle@>= 0.2.37 < 0.3.0":
- version "0.2.37"
- resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54"
- dependencies:
- cssom "0.3.x"
-
-d@^0.1.1, d@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/d/-/d-0.1.1.tgz#da184c535d18d8ee7ba2aa229b914009fae11309"
- dependencies:
- es5-ext "~0.10.2"
-
-dashdash@^1.12.0:
- version "1.14.1"
- resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
- dependencies:
- assert-plus "^1.0.0"
-
-date-fns@^1.27.2:
- version "1.28.0"
- resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.28.0.tgz#3b12f54b66467807bb95e5930caf7bfb4170bc1a"
-
-date-now@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
-
-dateformat@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17"
-
-debug@^2.1.1, debug@^2.2.0:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.1.tgz#79855090ba2c4e3115cc7d8769491d58f0491351"
- dependencies:
- ms "0.7.2"
-
-debug@~2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
- dependencies:
- ms "0.7.1"
-
-decamelize@^1.0.0, decamelize@^1.1.1:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
-
-deep-extend@~0.4.0:
- version "0.4.1"
- resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.1.tgz#efe4113d08085f4e6f9687759810f807469e2253"
-
-deep-is@~0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
-
-default-require-extensions@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8"
- dependencies:
- strip-bom "^2.0.0"
-
-defaults@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d"
- dependencies:
- clone "^1.0.2"
-
-del@^2.0.2:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
- dependencies:
- globby "^5.0.0"
- is-path-cwd "^1.0.0"
- is-path-in-cwd "^1.0.0"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
- rimraf "^2.2.8"
-
-delayed-stream@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
-
-delegates@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
-
-deprecated@^0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/deprecated/-/deprecated-0.0.1.tgz#f9c9af5464afa1e7a971458a8bdef2aa94d5bb19"
-
-detect-file@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-0.1.0.tgz#4935dedfd9488648e006b0129566e9386711ea63"
- dependencies:
- fs-exists-sync "^0.1.0"
-
-detect-indent@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208"
- dependencies:
- repeating "^2.0.0"
-
-diff@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9"
-
-doctrine@^1.2.2:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
- dependencies:
- esutils "^2.0.2"
- isarray "^1.0.0"
-
-domain-browser@^1.1.1:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc"
-
-duplexer2@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.0.2.tgz#c614dcf67e2fb14995a91711e5a617e8a60a31db"
- dependencies:
- readable-stream "~1.1.9"
-
-ecc-jsbn@~0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"
- dependencies:
- jsbn "~0.1.0"
-
-elegant-spinner@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e"
-
-emojis-list@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
-
-end-of-stream@~0.1.5:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-0.1.5.tgz#8e177206c3c80837d85632e8b9359dfe8b2f6eaf"
- dependencies:
- once "~1.3.0"
-
-enhanced-resolve@~0.9.0:
- version "0.9.1"
- resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e"
- dependencies:
- graceful-fs "^4.1.2"
- memory-fs "^0.2.0"
- tapable "^0.1.8"
-
-"errno@>=0.1.1 <0.2.0-0", errno@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d"
- dependencies:
- prr "~0.0.0"
-
-error-ex@^1.2.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.0.tgz#e67b43f3e82c96ea3a584ffee0b9fc3325d802d9"
- dependencies:
- is-arrayish "^0.2.1"
-
-es5-ext@^0.10.7, es5-ext@^0.10.8, es5-ext@~0.10.11, es5-ext@~0.10.2, es5-ext@~0.10.7:
- version "0.10.12"
- resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.12.tgz#aa84641d4db76b62abba5e45fd805ecbab140047"
- dependencies:
- es6-iterator "2"
- es6-symbol "~3.1"
-
-es6-iterator@2:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.0.tgz#bd968567d61635e33c0b80727613c9cb4b096bac"
- dependencies:
- d "^0.1.1"
- es5-ext "^0.10.7"
- es6-symbol "3"
-
-es6-map@^0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.4.tgz#a34b147be224773a4d7da8072794cefa3632b897"
- dependencies:
- d "~0.1.1"
- es5-ext "~0.10.11"
- es6-iterator "2"
- es6-set "~0.1.3"
- es6-symbol "~3.1.0"
- event-emitter "~0.3.4"
-
-es6-set@~0.1.3:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.4.tgz#9516b6761c2964b92ff479456233a247dc707ce8"
- dependencies:
- d "~0.1.1"
- es5-ext "~0.10.11"
- es6-iterator "2"
- es6-symbol "3"
- event-emitter "~0.3.4"
-
-es6-symbol@3, es6-symbol@~3.1, es6-symbol@~3.1.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.0.tgz#94481c655e7a7cad82eba832d97d5433496d7ffa"
- dependencies:
- d "~0.1.1"
- es5-ext "~0.10.11"
-
-es6-weak-map@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.1.tgz#0d2bbd8827eb5fb4ba8f97fbfea50d43db21ea81"
- dependencies:
- d "^0.1.1"
- es5-ext "^0.10.8"
- es6-iterator "2"
- es6-symbol "3"
-
-escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
-
-escodegen@^1.6.1:
- version "1.8.1"
- resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018"
- dependencies:
- esprima "^2.7.1"
- estraverse "^1.9.1"
- esutils "^2.0.2"
- optionator "^0.8.1"
- optionalDependencies:
- source-map "~0.2.0"
-
-escope@^3.6.0:
- version "3.6.0"
- resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
- dependencies:
- es6-map "^0.1.3"
- es6-weak-map "^2.0.1"
- esrecurse "^4.1.0"
- estraverse "^4.1.1"
-
-eslint-config-postcss@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/eslint-config-postcss/-/eslint-config-postcss-2.0.2.tgz#cae1c6093ced7850894a5b85fbe1d1e232b72afb"
-
-eslint@^3.0.0, eslint@^3.16.1:
- version "3.16.1"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.16.1.tgz#9bc31fc7341692cf772e80607508f67d711c5609"
- dependencies:
- babel-code-frame "^6.16.0"
- chalk "^1.1.3"
- concat-stream "^1.4.6"
- debug "^2.1.1"
- doctrine "^1.2.2"
- escope "^3.6.0"
- espree "^3.4.0"
- estraverse "^4.2.0"
- esutils "^2.0.2"
- file-entry-cache "^2.0.0"
- glob "^7.0.3"
- globals "^9.14.0"
- ignore "^3.2.0"
- imurmurhash "^0.1.4"
- inquirer "^0.12.0"
- is-my-json-valid "^2.10.0"
- is-resolvable "^1.0.0"
- js-yaml "^3.5.1"
- json-stable-stringify "^1.0.0"
- levn "^0.3.0"
- lodash "^4.0.0"
- mkdirp "^0.5.0"
- natural-compare "^1.4.0"
- optionator "^0.8.2"
- path-is-inside "^1.0.1"
- pluralize "^1.2.1"
- progress "^1.1.8"
- require-uncached "^1.0.2"
- shelljs "^0.7.5"
- strip-bom "^3.0.0"
- strip-json-comments "~2.0.1"
- table "^3.7.8"
- text-table "~0.2.0"
- user-home "^2.0.0"
-
-espree@^3.4.0:
- version "3.4.0"
- resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.0.tgz#41656fa5628e042878025ef467e78f125cb86e1d"
- dependencies:
- acorn "4.0.4"
- acorn-jsx "^3.0.0"
-
-esprima@^2.7.1:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581"
-
-esprima@^3.1.1:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
-
-esrecurse@^4.1.0:
- version "4.1.0"
- resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220"
- dependencies:
- estraverse "~4.1.0"
- object-assign "^4.0.1"
-
-estraverse@^1.9.1:
- version "1.9.3"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44"
-
-estraverse@^4.1.1, estraverse@^4.2.0:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
-
-estraverse@~4.1.0:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2"
-
-esutils@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
-
-event-emitter@~0.3.4:
- version "0.3.4"
- resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.4.tgz#8d63ddfb4cfe1fae3b32ca265c4c720222080bb5"
- dependencies:
- d "~0.1.1"
- es5-ext "~0.10.7"
-
-events@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924"
-
-exec-sh@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.0.tgz#14f75de3f20d286ef933099b2ce50a90359cef10"
- dependencies:
- merge "^1.1.3"
-
-execa@^0.6.0:
- version "0.6.0"
- resolved "https://registry.yarnpkg.com/execa/-/execa-0.6.0.tgz#934fc9f04a9febb4d4b449d976e92cfd95ef4f6e"
- dependencies:
- cross-spawn "^5.0.1"
- get-stream "^3.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"
-
-exit-hook@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
-
-expand-brackets@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b"
- dependencies:
- is-posix-bracket "^0.1.0"
-
-expand-range@^1.8.1:
- version "1.8.2"
- resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337"
- dependencies:
- fill-range "^2.1.0"
-
-expand-tilde@^1.2.1, expand-tilde@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-1.2.2.tgz#0b81eba897e5a3d31d1c3d102f8f01441e559449"
- dependencies:
- os-homedir "^1.0.1"
-
-extend@^3.0.0, extend@~3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.0.tgz#5a474353b9f3353ddd8176dfd37b91c83a46f1d4"
-
-extglob@^0.3.1:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1"
- dependencies:
- is-extglob "^1.0.0"
-
-extsprintf@1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.2.tgz#e1080e0658e300b06294990cc70e1502235fd550"
-
-fancy-log@^1.1.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.0.tgz#45be17d02bb9917d60ccffd4995c999e6c8c9948"
- dependencies:
- chalk "^1.1.1"
- time-stamp "^1.0.0"
-
-fast-levenshtein@~2.0.4:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
-
-fb-watchman@^1.8.0:
- version "1.9.2"
- resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-1.9.2.tgz#a24cf47827f82d38fb59a69ad70b76e3b6ae7383"
- dependencies:
- bser "1.0.2"
-
-fb-watchman@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.0.tgz#54e9abf7dfa2f26cd9b1636c588c1afc05de5d58"
- dependencies:
- bser "^2.0.0"
-
-figures@^1.3.5, figures@^1.7.0:
- version "1.7.0"
- resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
- dependencies:
- escape-string-regexp "^1.0.5"
- object-assign "^4.1.0"
-
-file-entry-cache@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
- dependencies:
- flat-cache "^1.2.1"
- object-assign "^4.0.1"
-
-filename-regex@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.0.tgz#996e3e80479b98b9897f15a8a58b3d084e926775"
-
-fileset@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/fileset/-/fileset-2.0.3.tgz#8e7548a96d3cc2327ee5e674168723a333bba2a0"
- dependencies:
- glob "^7.0.3"
- minimatch "^3.0.3"
-
-fill-range@^2.1.0:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723"
- dependencies:
- is-number "^2.1.0"
- isobject "^2.0.0"
- randomatic "^1.1.3"
- repeat-element "^1.1.2"
- repeat-string "^1.5.2"
-
-find-index@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/find-index/-/find-index-0.1.1.tgz#675d358b2ca3892d795a1ab47232f8b6e2e0dde4"
-
-find-up@^1.0.0:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
- dependencies:
- path-exists "^2.0.0"
- pinkie-promise "^2.0.0"
-
-find-up@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
- dependencies:
- locate-path "^2.0.0"
-
-findup-sync@^0.4.2:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-0.4.3.tgz#40043929e7bc60adf0b7f4827c4c6e75a0deca12"
- dependencies:
- detect-file "^0.1.0"
- is-glob "^2.0.1"
- micromatch "^2.3.7"
- resolve-dir "^0.1.0"
-
-fined@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/fined/-/fined-1.0.2.tgz#5b28424b760d7598960b7ef8480dff8ad3660e97"
- dependencies:
- expand-tilde "^1.2.1"
- lodash.assignwith "^4.0.7"
- lodash.isempty "^4.2.1"
- lodash.isplainobject "^4.0.4"
- lodash.isstring "^4.0.1"
- lodash.pick "^4.2.1"
- parse-filepath "^1.0.1"
-
-first-chunk-stream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz#59bfb50cd905f60d7c394cd3d9acaab4e6ad934e"
-
-flagged-respawn@^0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/flagged-respawn/-/flagged-respawn-0.3.2.tgz#ff191eddcd7088a675b2610fffc976be9b8074b5"
-
-flat-cache@^1.2.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96"
- dependencies:
- circular-json "^0.3.1"
- del "^2.0.2"
- graceful-fs "^4.1.2"
- write "^0.2.1"
-
-for-in@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
-
-for-own@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce"
- dependencies:
- for-in "^1.0.1"
-
-forever-agent@~0.6.1:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
-
-form-data@~2.1.1:
- version "2.1.2"
- resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.2.tgz#89c3534008b97eada4cbb157d58f6f5df025eae4"
- dependencies:
- asynckit "^0.4.0"
- combined-stream "^1.0.5"
- mime-types "^2.1.12"
-
-fs-exists-sync@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/fs-exists-sync/-/fs-exists-sync-0.1.0.tgz#982d6893af918e72d08dec9e8673ff2b5a8d6add"
-
-fs-extra@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-2.0.0.tgz#337352bded4a0b714f3eb84de8cea765e9d37600"
- dependencies:
- graceful-fs "^4.1.2"
- jsonfile "^2.1.0"
-
-fs.realpath@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
-
-fsevents@^1.0.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.1.tgz#f19fd28f43eeaf761680e519a203c4d0b3d31aff"
- dependencies:
- nan "^2.3.0"
- node-pre-gyp "^0.6.29"
-
-fstream-ignore@~1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105"
- dependencies:
- fstream "^1.0.0"
- inherits "2"
- minimatch "^3.0.0"
-
-fstream@^1.0.0, fstream@^1.0.2, fstream@~1.0.10:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.10.tgz#604e8a92fe26ffd9f6fae30399d4984e1ab22822"
- dependencies:
- graceful-fs "^4.1.2"
- inherits "~2.0.0"
- mkdirp ">=0.5 0"
- rimraf "2"
-
-gauge@~2.7.1:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.3.tgz#1c23855f962f17b3ad3d0dc7443f304542edfe09"
- dependencies:
- aproba "^1.0.3"
- console-control-strings "^1.0.0"
- has-unicode "^2.0.0"
- object-assign "^4.1.0"
- signal-exit "^3.0.0"
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
- wide-align "^1.1.0"
-
-gaze@^0.5.1:
- version "0.5.2"
- resolved "https://registry.yarnpkg.com/gaze/-/gaze-0.5.2.tgz#40b709537d24d1d45767db5a908689dfe69ac44f"
- dependencies:
- globule "~0.1.0"
-
-generate-function@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
-
-generate-object-property@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
- dependencies:
- is-property "^1.0.0"
-
-get-caller-file@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5"
-
-get-stream@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
-
-getpass@^0.1.1:
- version "0.1.6"
- resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.6.tgz#283ffd9fc1256840875311c1b60e8c40187110e6"
- dependencies:
- assert-plus "^1.0.0"
-
-glob-base@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4"
- dependencies:
- glob-parent "^2.0.0"
- is-glob "^2.0.0"
-
-glob-parent@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28"
- dependencies:
- is-glob "^2.0.0"
-
-glob-stream@^3.1.5:
- version "3.1.18"
- resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-3.1.18.tgz#9170a5f12b790306fdfe598f313f8f7954fd143b"
- dependencies:
- glob "^4.3.1"
- glob2base "^0.0.12"
- minimatch "^2.0.1"
- ordered-read-streams "^0.1.0"
- through2 "^0.6.1"
- unique-stream "^1.0.0"
-
-glob-watcher@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/glob-watcher/-/glob-watcher-0.0.6.tgz#b95b4a8df74b39c83298b0c05c978b4d9a3b710b"
- dependencies:
- gaze "^0.5.1"
-
-glob2base@^0.0.12:
- version "0.0.12"
- resolved "https://registry.yarnpkg.com/glob2base/-/glob2base-0.0.12.tgz#9d419b3e28f12e83a362164a277055922c9c0d56"
- dependencies:
- find-index "^0.1.1"
-
-glob@^4.3.1:
- version "4.5.3"
- resolved "https://registry.yarnpkg.com/glob/-/glob-4.5.3.tgz#c6cb73d3226c1efef04de3c56d012f03377ee15f"
- dependencies:
- inflight "^1.0.4"
- inherits "2"
- minimatch "^2.0.1"
- once "^1.3.0"
-
-glob@^7.0.0, glob@^7.0.3, glob@^7.0.5:
- version "7.1.1"
- resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8"
- dependencies:
- fs.realpath "^1.0.0"
- inflight "^1.0.4"
- inherits "2"
- minimatch "^3.0.2"
- once "^1.3.0"
- path-is-absolute "^1.0.0"
-
-glob@~3.1.21:
- version "3.1.21"
- resolved "https://registry.yarnpkg.com/glob/-/glob-3.1.21.tgz#d29e0a055dea5138f4d07ed40e8982e83c2066cd"
- dependencies:
- graceful-fs "~1.2.0"
- inherits "1"
- minimatch "~0.2.11"
-
-global-modules@^0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-0.2.3.tgz#ea5a3bed42c6d6ce995a4f8a1269b5dae223828d"
- dependencies:
- global-prefix "^0.1.4"
- is-windows "^0.2.0"
-
-global-prefix@^0.1.4:
- version "0.1.5"
- resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-0.1.5.tgz#8d3bc6b8da3ca8112a160d8d496ff0462bfef78f"
- dependencies:
- homedir-polyfill "^1.0.0"
- ini "^1.3.4"
- is-windows "^0.2.0"
- which "^1.2.12"
-
-globals@^9.0.0, globals@^9.14.0:
- version "9.16.0"
- resolved "https://registry.yarnpkg.com/globals/-/globals-9.16.0.tgz#63e903658171ec2d9f51b1d31de5e2b8dc01fb80"
-
-globby@^5.0.0:
- version "5.0.0"
- resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
- dependencies:
- array-union "^1.0.1"
- arrify "^1.0.0"
- glob "^7.0.3"
- object-assign "^4.0.1"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
-globule@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/globule/-/globule-0.1.0.tgz#d9c8edde1da79d125a151b79533b978676346ae5"
- dependencies:
- glob "~3.1.21"
- lodash "~1.0.1"
- minimatch "~0.2.11"
-
-glogg@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/glogg/-/glogg-1.0.0.tgz#7fe0f199f57ac906cf512feead8f90ee4a284fc5"
- dependencies:
- sparkles "^1.0.0"
-
-graceful-fs@^3.0.0:
- version "3.0.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818"
- dependencies:
- natives "^1.1.0"
-
-graceful-fs@^4.1.2, graceful-fs@^4.1.6:
- version "4.1.11"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
-
-graceful-fs@~1.2.0:
- version "1.2.3"
- resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-1.2.3.tgz#15a4806a57547cb2d2dbf27f42e89a8c3451b364"
-
-"graceful-readlink@>= 1.0.0":
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725"
-
-growly@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
-
-gulp-eslint@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/gulp-eslint/-/gulp-eslint-3.0.1.tgz#04e57e3e18c6974267c12cf6855dc717d4a313bd"
- dependencies:
- bufferstreams "^1.1.1"
- eslint "^3.0.0"
- gulp-util "^3.0.6"
-
-gulp-jest@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/gulp-jest/-/gulp-jest-1.0.0.tgz#cc8803a60503b00de02c825243d5d02ab1d05c39"
- dependencies:
- gulp-util "^3.0.0"
- through2 "^2.0.1"
-
-gulp-util@^3.0.0, gulp-util@^3.0.6, gulp-util@^3.0.7:
- version "3.0.8"
- resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f"
- dependencies:
- array-differ "^1.0.0"
- array-uniq "^1.0.2"
- beeper "^1.0.0"
- chalk "^1.0.0"
- dateformat "^2.0.0"
- fancy-log "^1.1.0"
- gulplog "^1.0.0"
- has-gulplog "^0.1.0"
- lodash._reescape "^3.0.0"
- lodash._reevaluate "^3.0.0"
- lodash._reinterpolate "^3.0.0"
- lodash.template "^3.0.0"
- minimist "^1.1.0"
- multipipe "^0.1.2"
- object-assign "^3.0.0"
- replace-ext "0.0.1"
- through2 "^2.0.0"
- vinyl "^0.5.0"
-
-gulp@^3.9.1:
- version "3.9.1"
- resolved "https://registry.yarnpkg.com/gulp/-/gulp-3.9.1.tgz#571ce45928dd40af6514fc4011866016c13845b4"
- dependencies:
- archy "^1.0.0"
- chalk "^1.0.0"
- deprecated "^0.0.1"
- gulp-util "^3.0.0"
- interpret "^1.0.0"
- liftoff "^2.1.0"
- minimist "^1.1.0"
- orchestrator "^0.3.0"
- pretty-hrtime "^1.0.0"
- semver "^4.1.0"
- tildify "^1.0.0"
- v8flags "^2.0.2"
- vinyl-fs "^0.3.0"
-
-gulplog@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/gulplog/-/gulplog-1.0.0.tgz#e28c4d45d05ecbbed818363ce8f9c5926229ffe5"
- dependencies:
- glogg "^1.0.0"
-
-handlebars@^4.0.3:
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.6.tgz#2ce4484850537f9c97a8026d5399b935c4ed4ed7"
- dependencies:
- async "^1.4.0"
- optimist "^0.6.1"
- source-map "^0.4.4"
- optionalDependencies:
- uglify-js "^2.6"
-
-har-validator@~2.0.6:
- version "2.0.6"
- resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d"
- dependencies:
- chalk "^1.1.1"
- commander "^2.9.0"
- is-my-json-valid "^2.12.4"
- pinkie-promise "^2.0.0"
-
-has-ansi@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
- dependencies:
- ansi-regex "^2.0.0"
-
-has-flag@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa"
-
-has-gulplog@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/has-gulplog/-/has-gulplog-0.1.0.tgz#6414c82913697da51590397dafb12f22967811ce"
- dependencies:
- sparkles "^1.0.0"
-
-has-unicode@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9"
-
-hawk@~3.1.3:
- version "3.1.3"
- resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4"
- dependencies:
- boom "2.x.x"
- cryptiles "2.x.x"
- hoek "2.x.x"
- sntp "1.x.x"
-
-hoek@2.x.x:
- version "2.16.3"
- resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed"
-
-home-or-tmp@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8"
- dependencies:
- os-homedir "^1.0.0"
- os-tmpdir "^1.0.1"
-
-homedir-polyfill@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc"
- dependencies:
- parse-passwd "^1.0.0"
-
-hosted-git-info@^2.1.4:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.2.0.tgz#7a0d097863d886c0fabbdcd37bf1758d8becf8a5"
-
-html-encoding-sniffer@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da"
- dependencies:
- whatwg-encoding "^1.0.1"
-
-http-signature@~1.1.0:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf"
- dependencies:
- assert-plus "^0.2.0"
- jsprim "^1.2.2"
- sshpk "^1.7.0"
-
-https-browserify@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82"
-
-iconv-lite@0.4.13:
- version "0.4.13"
- resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.13.tgz#1f88aba4ab0b1508e8312acc39345f36e992e2f2"
-
-ieee754@^1.1.4:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4"
-
-ignore@^3.2.0:
- version "3.2.4"
- resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.4.tgz#4055e03596729a8fabe45a43c100ad5ed815c4e8"
-
-imurmurhash@^0.1.4:
- version "0.1.4"
- resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
-
-indent-string@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
- dependencies:
- repeating "^2.0.0"
-
-indent-string@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.1.0.tgz#08ff4334603388399b329e6b9538dc7a3cf5de7d"
-
-indexof@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d"
-
-inflight@^1.0.4:
- version "1.0.6"
- resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
- dependencies:
- once "^1.3.0"
- wrappy "1"
-
-inherits@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b"
-
-inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
-
-inherits@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1"
-
-ini@^1.3.4, ini@~1.3.0:
- version "1.3.4"
- resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
-
-inquirer@^0.12.0:
- version "0.12.0"
- resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
- dependencies:
- ansi-escapes "^1.1.0"
- ansi-regex "^2.0.0"
- chalk "^1.0.0"
- cli-cursor "^1.0.1"
- cli-width "^2.0.0"
- figures "^1.3.5"
- lodash "^4.3.0"
- readline2 "^1.0.1"
- run-async "^0.1.0"
- rx-lite "^3.1.2"
- string-width "^1.0.1"
- strip-ansi "^3.0.0"
- through "^2.3.6"
-
-interpret@^0.6.4:
- version "0.6.6"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b"
-
-interpret@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.1.tgz#d579fb7f693b858004947af39fa0db49f795602c"
-
-invariant@^2.2.0:
- version "2.2.2"
- resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
- dependencies:
- loose-envify "^1.0.0"
-
-invert-kv@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6"
-
-is-absolute@^0.2.3:
- version "0.2.6"
- resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-0.2.6.tgz#20de69f3db942ef2d87b9c2da36f172235b1b5eb"
- dependencies:
- is-relative "^0.2.1"
- is-windows "^0.2.0"
-
-is-arrayish@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
-
-is-binary-path@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898"
- dependencies:
- binary-extensions "^1.0.0"
-
-is-buffer@^1.0.2:
- version "1.1.4"
- resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b"
-
-is-builtin-module@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe"
- dependencies:
- builtin-modules "^1.0.0"
-
-is-ci@^1.0.9:
- version "1.0.10"
- resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e"
- dependencies:
- ci-info "^1.0.0"
-
-is-dotfile@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.2.tgz#2c132383f39199f8edc268ca01b9b007d205cc4d"
-
-is-equal-shallow@^0.1.3:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534"
- dependencies:
- is-primitive "^2.0.0"
-
-is-extendable@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
-
-is-extglob@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0"
-
-is-finite@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa"
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
- dependencies:
- number-is-nan "^1.0.0"
-
-is-fullwidth-code-point@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
-
-is-glob@^2.0.0, is-glob@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863"
- dependencies:
- is-extglob "^1.0.0"
-
-is-my-json-valid@^2.10.0, is-my-json-valid@^2.12.4:
- version "2.16.0"
- resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693"
- dependencies:
- generate-function "^2.0.0"
- generate-object-property "^1.1.0"
- jsonpointer "^4.0.0"
- xtend "^4.0.0"
-
-is-number@^2.0.2, is-number@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f"
- dependencies:
- kind-of "^3.0.2"
-
-is-path-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
-
-is-path-in-cwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
- dependencies:
- is-path-inside "^1.0.0"
-
-is-path-inside@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
- dependencies:
- path-is-inside "^1.0.1"
-
-is-posix-bracket@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4"
-
-is-primitive@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575"
-
-is-promise@^2.1.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa"
-
-is-property@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
-
-is-relative@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-0.2.1.tgz#d27f4c7d516d175fb610db84bbeef23c3bc97aa5"
- dependencies:
- is-unc-path "^0.1.1"
-
-is-resolvable@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
- dependencies:
- tryit "^1.0.1"
-
-is-stream@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
-
-is-typedarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
-
-is-unc-path@^0.1.1:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-0.1.2.tgz#6ab053a72573c10250ff416a3814c35178af39b9"
- dependencies:
- unc-path-regex "^0.1.0"
-
-is-utf8@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
-
-is-windows@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c"
-
-isarray@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
-
-isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
-
-isexe@^1.1.1:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/isexe/-/isexe-1.1.2.tgz#36f3e22e60750920f5e7241a476a8c6a42275ad0"
-
-isobject@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89"
- dependencies:
- isarray "1.0.0"
-
-isstream@~0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
-
-istanbul-api@^1.1.0-alpha.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.1.1.tgz#d36e2f1560d1a43ce304c4ff7338182de61c8f73"
- dependencies:
- async "^2.1.4"
- fileset "^2.0.2"
- istanbul-lib-coverage "^1.0.0"
- istanbul-lib-hook "^1.0.0"
- istanbul-lib-instrument "^1.3.0"
- istanbul-lib-report "^1.0.0-alpha.3"
- istanbul-lib-source-maps "^1.1.0"
- istanbul-reports "^1.0.0"
- js-yaml "^3.7.0"
- mkdirp "^0.5.1"
- once "^1.4.0"
-
-istanbul-lib-coverage@^1.0.0, istanbul-lib-coverage@^1.0.0-alpha, istanbul-lib-coverage@^1.0.0-alpha.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.0.1.tgz#f263efb519c051c5f1f3343034fc40e7b43ff212"
-
-istanbul-lib-hook@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.0.0.tgz#fc5367ee27f59268e8f060b0c7aaf051d9c425c5"
- dependencies:
- append-transform "^0.4.0"
-
-istanbul-lib-instrument@^1.1.1, istanbul-lib-instrument@^1.3.0, istanbul-lib-instrument@^1.4.2:
- version "1.4.2"
- resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.4.2.tgz#0e2fdfac93c1dabf2e31578637dc78a19089f43e"
- dependencies:
- babel-generator "^6.18.0"
- babel-template "^6.16.0"
- babel-traverse "^6.18.0"
- babel-types "^6.18.0"
- babylon "^6.13.0"
- istanbul-lib-coverage "^1.0.0"
- semver "^5.3.0"
-
-istanbul-lib-report@^1.0.0-alpha.3:
- version "1.0.0-alpha.3"
- resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.0.0-alpha.3.tgz#32d5f6ec7f33ca3a602209e278b2e6ff143498af"
- dependencies:
- async "^1.4.2"
- istanbul-lib-coverage "^1.0.0-alpha"
- mkdirp "^0.5.1"
- path-parse "^1.0.5"
- rimraf "^2.4.3"
- supports-color "^3.1.2"
-
-istanbul-lib-source-maps@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.1.0.tgz#9d429218f35b823560ea300a96ff0c3bbdab785f"
- dependencies:
- istanbul-lib-coverage "^1.0.0-alpha.0"
- mkdirp "^0.5.1"
- rimraf "^2.4.4"
- source-map "^0.5.3"
-
-istanbul-reports@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.0.1.tgz#9a17176bc4a6cbebdae52b2f15961d52fa623fbc"
- dependencies:
- handlebars "^4.0.3"
-
-jest-changed-files@^19.0.2:
- version "19.0.2"
- resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-19.0.2.tgz#16c54c84c3270be408e06d2e8af3f3e37a885824"
-
-jest-cli@^19.0.2:
- version "19.0.2"
- resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-19.0.2.tgz#cc3620b62acac5f2d93a548cb6ef697d4ec85443"
- dependencies:
- ansi-escapes "^1.4.0"
- callsites "^2.0.0"
- chalk "^1.1.1"
- graceful-fs "^4.1.6"
- is-ci "^1.0.9"
- istanbul-api "^1.1.0-alpha.1"
- istanbul-lib-coverage "^1.0.0"
- istanbul-lib-instrument "^1.1.1"
- jest-changed-files "^19.0.2"
- jest-config "^19.0.2"
- jest-environment-jsdom "^19.0.2"
- jest-haste-map "^19.0.0"
- jest-jasmine2 "^19.0.2"
- jest-message-util "^19.0.0"
- jest-regex-util "^19.0.0"
- jest-resolve-dependencies "^19.0.0"
- jest-runtime "^19.0.2"
- jest-snapshot "^19.0.2"
- jest-util "^19.0.2"
- micromatch "^2.3.11"
- node-notifier "^5.0.1"
- slash "^1.0.0"
- string-length "^1.0.1"
- throat "^3.0.0"
- which "^1.1.1"
- worker-farm "^1.3.1"
- yargs "^6.3.0"
-
-jest-config@^19.0.2:
- version "19.0.2"
- resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-19.0.2.tgz#1b9bd2db0ddd16df61c2b10a54009e1768da6411"
- dependencies:
- chalk "^1.1.1"
- jest-environment-jsdom "^19.0.2"
- jest-environment-node "^19.0.2"
- jest-jasmine2 "^19.0.2"
- jest-regex-util "^19.0.0"
- jest-resolve "^19.0.2"
- jest-validate "^19.0.2"
- pretty-format "^19.0.0"
-
-jest-diff@^19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-19.0.0.tgz#d1563cfc56c8b60232988fbc05d4d16ed90f063c"
- dependencies:
- chalk "^1.1.3"
- diff "^3.0.0"
- jest-matcher-utils "^19.0.0"
- pretty-format "^19.0.0"
-
-jest-environment-jsdom@^19.0.2:
- version "19.0.2"
- resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-19.0.2.tgz#ceda859c4a4b94ab35e4de7dab54b926f293e4a3"
- dependencies:
- jest-mock "^19.0.0"
- jest-util "^19.0.2"
- jsdom "^9.11.0"
-
-jest-environment-node@^19.0.2:
- version "19.0.2"
- resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-19.0.2.tgz#6e84079db87ed21d0c05e1f9669f207b116fe99b"
- dependencies:
- jest-mock "^19.0.0"
- jest-util "^19.0.2"
-
-jest-file-exists@^19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/jest-file-exists/-/jest-file-exists-19.0.0.tgz#cca2e587a11ec92e24cfeab3f8a94d657f3fceb8"
-
-jest-haste-map@^19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-19.0.0.tgz#adde00b62b1fe04432a104b3254fc5004514b55e"
- dependencies:
- fb-watchman "^2.0.0"
- graceful-fs "^4.1.6"
- micromatch "^2.3.11"
- sane "~1.5.0"
- worker-farm "^1.3.1"
-
-jest-jasmine2@^19.0.2:
- version "19.0.2"
- resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-19.0.2.tgz#167991ac825981fb1a800af126e83afcca832c73"
- dependencies:
- graceful-fs "^4.1.6"
- jest-matcher-utils "^19.0.0"
- jest-matchers "^19.0.0"
- jest-message-util "^19.0.0"
- jest-snapshot "^19.0.2"
-
-jest-matcher-utils@^19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-19.0.0.tgz#5ecd9b63565d2b001f61fbf7ec4c7f537964564d"
- dependencies:
- chalk "^1.1.3"
- pretty-format "^19.0.0"
-
-jest-matchers@^19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/jest-matchers/-/jest-matchers-19.0.0.tgz#c74ecc6ebfec06f384767ba4d6fa4a42d6755754"
- dependencies:
- jest-diff "^19.0.0"
- jest-matcher-utils "^19.0.0"
- jest-message-util "^19.0.0"
- jest-regex-util "^19.0.0"
-
-jest-message-util@^19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-19.0.0.tgz#721796b89c0e4d761606f9ba8cb828a3b6246416"
- dependencies:
- chalk "^1.1.1"
- micromatch "^2.3.11"
-
-jest-mock@^19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-19.0.0.tgz#67038641e9607ab2ce08ec4a8cb83aabbc899d01"
-
-jest-regex-util@^19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-19.0.0.tgz#b7754587112aede1456510bb1f6afe74ef598691"
-
-jest-resolve-dependencies@^19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-19.0.0.tgz#a741ad1fa094140e64ecf2642a504f834ece22ee"
- dependencies:
- jest-file-exists "^19.0.0"
-
-jest-resolve@^19.0.2:
- version "19.0.2"
- resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-19.0.2.tgz#5793575de4f07aec32f7d7ff0c6c181963eefb3c"
- dependencies:
- browser-resolve "^1.11.2"
- jest-haste-map "^19.0.0"
- resolve "^1.2.0"
-
-jest-runtime@^19.0.2:
- version "19.0.2"
- resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-19.0.2.tgz#d9a43e72de416d27d196fd9c7940d98fe6685407"
- dependencies:
- babel-core "^6.0.0"
- babel-jest "^19.0.0"
- babel-plugin-istanbul "^4.0.0"
- chalk "^1.1.3"
- graceful-fs "^4.1.6"
- jest-config "^19.0.2"
- jest-file-exists "^19.0.0"
- jest-haste-map "^19.0.0"
- jest-regex-util "^19.0.0"
- jest-resolve "^19.0.2"
- jest-util "^19.0.2"
- json-stable-stringify "^1.0.1"
- micromatch "^2.3.11"
- strip-bom "3.0.0"
- yargs "^6.3.0"
-
-jest-snapshot@^19.0.2:
- version "19.0.2"
- resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-19.0.2.tgz#9c1b216214f7187c38bfd5c70b1efab16b0ff50b"
- dependencies:
- chalk "^1.1.3"
- jest-diff "^19.0.0"
- jest-file-exists "^19.0.0"
- jest-matcher-utils "^19.0.0"
- jest-util "^19.0.2"
- natural-compare "^1.4.0"
- pretty-format "^19.0.0"
-
-jest-util@^19.0.2:
- version "19.0.2"
- resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-19.0.2.tgz#e0a0232a2ab9e6b2b53668bdb3534c2b5977ed41"
- dependencies:
- chalk "^1.1.1"
- graceful-fs "^4.1.6"
- jest-file-exists "^19.0.0"
- jest-message-util "^19.0.0"
- jest-mock "^19.0.0"
- jest-validate "^19.0.2"
- leven "^2.0.0"
- mkdirp "^0.5.1"
-
-jest-validate@^19.0.2:
- version "19.0.2"
- resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-19.0.2.tgz#dc534df5f1278d5b63df32b14241d4dbf7244c0c"
- dependencies:
- chalk "^1.1.1"
- jest-matcher-utils "^19.0.0"
- leven "^2.0.0"
- pretty-format "^19.0.0"
-
-jodid25519@^1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/jodid25519/-/jodid25519-1.0.2.tgz#06d4912255093419477d425633606e0e90782967"
- dependencies:
- jsbn "~0.1.0"
-
-js-base64@^2.1.9:
- version "2.1.9"
- resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.1.9.tgz#f0e80ae039a4bd654b5f281fc93f04a914a7fcce"
-
-js-tokens@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
-
-js-yaml@^3.4.3, js-yaml@^3.5.1, js-yaml@^3.7.0:
- version "3.8.1"
- resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.1.tgz#782ba50200be7b9e5a8537001b7804db3ad02628"
- dependencies:
- argparse "^1.0.7"
- esprima "^3.1.1"
-
-jsbn@~0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
-
-jsdom@^9.11.0:
- version "9.11.0"
- resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.11.0.tgz#a95b0304e521a2ca5a63c6ea47bf7708a7a84591"
- dependencies:
- abab "^1.0.3"
- acorn "^4.0.4"
- acorn-globals "^3.1.0"
- array-equal "^1.0.0"
- content-type-parser "^1.0.1"
- cssom ">= 0.3.2 < 0.4.0"
- cssstyle ">= 0.2.37 < 0.3.0"
- escodegen "^1.6.1"
- html-encoding-sniffer "^1.0.1"
- nwmatcher ">= 1.3.9 < 2.0.0"
- parse5 "^1.5.1"
- request "^2.79.0"
- sax "^1.2.1"
- symbol-tree "^3.2.1"
- tough-cookie "^2.3.2"
- webidl-conversions "^4.0.0"
- whatwg-encoding "^1.0.1"
- whatwg-url "^4.3.0"
- xml-name-validator "^2.0.1"
-
-jsesc@^1.3.0:
- version "1.3.0"
- resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b"
-
-json-loader@^0.5.4:
- version "0.5.4"
- resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.4.tgz#8baa1365a632f58a3c46d20175fc6002c96e37de"
-
-json-schema@0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
-
-json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
- dependencies:
- jsonify "~0.0.0"
-
-json-stringify-safe@~5.0.1:
- version "5.0.1"
- resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
-
-json5@^0.5.0:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821"
-
-jsonfile@^2.1.0:
- version "2.4.0"
- resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8"
- optionalDependencies:
- graceful-fs "^4.1.6"
-
-jsonify@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
-
-jsonpointer@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
-
-jsprim@^1.2.2:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.3.1.tgz#2a7256f70412a29ee3670aaca625994c4dcff252"
- dependencies:
- extsprintf "1.0.2"
- json-schema "0.2.3"
- verror "1.3.6"
-
-kind-of@^3.0.2:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.1.0.tgz#475d698a5e49ff5e53d14e3e732429dc8bf4cf47"
- dependencies:
- is-buffer "^1.0.2"
-
-lazy-cache@^1.0.3:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e"
-
-lcid@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835"
- dependencies:
- invert-kv "^1.0.0"
-
-leven@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580"
-
-levn@^0.3.0, levn@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
- dependencies:
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
-
-liftoff@^2.1.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/liftoff/-/liftoff-2.3.0.tgz#a98f2ff67183d8ba7cfaca10548bd7ff0550b385"
- dependencies:
- extend "^3.0.0"
- findup-sync "^0.4.2"
- fined "^1.0.1"
- flagged-respawn "^0.3.2"
- lodash.isplainobject "^4.0.4"
- lodash.isstring "^4.0.1"
- lodash.mapvalues "^4.4.0"
- rechoir "^0.6.2"
- resolve "^1.1.7"
-
-lint-staged@^3.3.1:
- version "3.3.1"
- resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-3.3.1.tgz#b725d98a2be1f82cb228069fab682f503c95234d"
- dependencies:
- app-root-path "^2.0.0"
- cosmiconfig "^1.1.0"
- execa "^0.6.0"
- listr "^0.11.0"
- minimatch "^3.0.0"
- npm-which "^3.0.1"
- staged-git-files "0.0.4"
- which "^1.2.11"
-
-listr-silent-renderer@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz#924b5a3757153770bf1a8e3fbf74b8bbf3f9242e"
-
-listr-update-renderer@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.2.0.tgz#ca80e1779b4e70266807e8eed1ad6abe398550f9"
- dependencies:
- chalk "^1.1.3"
- cli-truncate "^0.2.1"
- elegant-spinner "^1.0.1"
- figures "^1.7.0"
- indent-string "^3.0.0"
- log-symbols "^1.0.2"
- log-update "^1.0.2"
- strip-ansi "^3.0.1"
-
-listr-verbose-renderer@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.0.tgz#44dc01bb0c34a03c572154d4d08cde9b1dc5620f"
- dependencies:
- chalk "^1.1.3"
- cli-cursor "^1.0.2"
- date-fns "^1.27.2"
- figures "^1.7.0"
-
-listr@^0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/listr/-/listr-0.11.0.tgz#5e778bc23806ac3ab984ed75564458151f39b03e"
- dependencies:
- chalk "^1.1.3"
- cli-truncate "^0.2.1"
- figures "^1.7.0"
- indent-string "^2.1.0"
- is-promise "^2.1.0"
- is-stream "^1.1.0"
- listr-silent-renderer "^1.1.1"
- listr-update-renderer "^0.2.0"
- listr-verbose-renderer "^0.4.0"
- log-symbols "^1.0.2"
- log-update "^1.0.2"
- ora "^0.2.3"
- rxjs "^5.0.0-beta.11"
- stream-to-observable "^0.1.0"
- strip-ansi "^3.0.1"
-
-load-json-file@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0"
- dependencies:
- graceful-fs "^4.1.2"
- parse-json "^2.2.0"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
- strip-bom "^2.0.0"
-
-loader-utils@^0.2.11:
- version "0.2.17"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348"
- dependencies:
- big.js "^3.1.3"
- emojis-list "^2.0.0"
- json5 "^0.5.0"
- object-assign "^4.0.1"
-
-loader-utils@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.0.2.tgz#a9f923c865a974623391a8602d031137fad74830"
- dependencies:
- big.js "^3.1.3"
- emojis-list "^2.0.0"
- json5 "^0.5.0"
-
-locate-path@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
- dependencies:
- p-locate "^2.0.0"
- path-exists "^3.0.0"
-
-lodash._basecopy@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36"
-
-lodash._basetostring@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5"
-
-lodash._basevalues@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7"
-
-lodash._getnative@^3.0.0:
- version "3.9.1"
- resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5"
-
-lodash._isiterateecall@^3.0.0:
- version "3.0.9"
- resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c"
-
-lodash._reescape@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._reescape/-/lodash._reescape-3.0.0.tgz#2b1d6f5dfe07c8a355753e5f27fac7f1cde1616a"
-
-lodash._reevaluate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz#58bc74c40664953ae0b124d806996daca431e2ed"
-
-lodash._reinterpolate@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
-
-lodash._root@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692"
-
-lodash.assignwith@^4.0.7:
- version "4.2.0"
- resolved "https://registry.yarnpkg.com/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz#127a97f02adc41751a954d24b0de17e100e038eb"
-
-lodash.clone@^4.3.2:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/lodash.clone/-/lodash.clone-4.5.0.tgz#195870450f5a13192478df4bc3d23d2dea1907b6"
-
-lodash.escape@^3.0.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698"
- dependencies:
- lodash._root "^3.0.0"
-
-lodash.isarguments@^3.0.0:
- version "3.1.0"
- resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a"
-
-lodash.isarray@^3.0.0:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55"
-
-lodash.isempty@^4.2.1:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.isempty/-/lodash.isempty-4.4.0.tgz#6f86cbedd8be4ec987be9aaf33c9684db1b31e7e"
-
-lodash.isplainobject@^4.0.4:
- version "4.0.6"
- resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
-
-lodash.isstring@^4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
-
-lodash.keys@^3.0.0:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a"
- dependencies:
- lodash._getnative "^3.0.0"
- lodash.isarguments "^3.0.0"
- lodash.isarray "^3.0.0"
-
-lodash.mapvalues@^4.4.0:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz#1bafa5005de9dd6f4f26668c30ca37230cc9689c"
-
-lodash.pick@^4.2.1:
- version "4.4.0"
- resolved "https://registry.yarnpkg.com/lodash.pick/-/lodash.pick-4.4.0.tgz#52f05610fff9ded422611441ed1fc123a03001b3"
-
-lodash.restparam@^3.0.0:
- version "3.6.1"
- resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805"
-
-lodash.some@^4.2.2:
- version "4.6.0"
- resolved "https://registry.yarnpkg.com/lodash.some/-/lodash.some-4.6.0.tgz#1bb9f314ef6b8baded13b549169b2a945eb68e4d"
-
-lodash.template@^3.0.0:
- version "3.6.2"
- resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f"
- dependencies:
- lodash._basecopy "^3.0.0"
- lodash._basetostring "^3.0.0"
- lodash._basevalues "^3.0.0"
- lodash._isiterateecall "^3.0.0"
- lodash._reinterpolate "^3.0.0"
- lodash.escape "^3.0.0"
- lodash.keys "^3.0.0"
- lodash.restparam "^3.0.0"
- lodash.templatesettings "^3.0.0"
-
-lodash.templatesettings@^3.0.0:
- version "3.1.1"
- resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5"
- dependencies:
- lodash._reinterpolate "^3.0.0"
- lodash.escape "^3.0.0"
-
-lodash@^4.0.0, lodash@^4.14.0, lodash@^4.2.0, lodash@^4.3.0:
- version "4.17.4"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
-
-lodash@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551"
-
-log-symbols@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18"
- dependencies:
- chalk "^1.0.0"
-
-log-update@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/log-update/-/log-update-1.0.2.tgz#19929f64c4093d2d2e7075a1dad8af59c296b8d1"
- dependencies:
- ansi-escapes "^1.0.0"
- cli-cursor "^1.0.2"
-
-longest@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097"
-
-loose-envify@^1.0.0:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848"
- dependencies:
- js-tokens "^3.0.0"
-
-lru-cache@2:
- version "2.7.3"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952"
-
-lru-cache@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.0.2.tgz#1d17679c069cda5d040991a09dbc2c0db377e55e"
- dependencies:
- pseudomap "^1.0.1"
- yallist "^2.0.0"
-
-makeerror@1.0.x:
- version "1.0.11"
- resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.11.tgz#e01a5c9109f2af79660e4e8b9587790184f5a96c"
- dependencies:
- tmpl "1.0.x"
-
-map-cache@^0.2.0:
- version "0.2.2"
- resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
-
-memory-fs@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290"
-
-memory-fs@^0.3.0, memory-fs@~0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20"
- dependencies:
- errno "^0.1.3"
- readable-stream "^2.0.1"
-
-merge@^1.1.3:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
-
-micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7:
- version "2.3.11"
- resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565"
- dependencies:
- arr-diff "^2.0.0"
- array-unique "^0.2.1"
- braces "^1.8.2"
- expand-brackets "^0.1.4"
- extglob "^0.3.1"
- filename-regex "^2.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.1"
- kind-of "^3.0.2"
- normalize-path "^2.0.1"
- object.omit "^2.0.0"
- parse-glob "^3.0.4"
- regex-cache "^0.4.2"
-
-mime-db@~1.26.0:
- version "1.26.0"
- resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.26.0.tgz#eaffcd0e4fc6935cf8134da246e2e6c35305adff"
-
-mime-types@^2.1.12, mime-types@~2.1.7:
- version "2.1.14"
- resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.14.tgz#f7ef7d97583fcaf3b7d282b6f8b5679dab1e94ee"
- dependencies:
- mime-db "~1.26.0"
-
-minimatch@^2.0.1:
- version "2.0.10"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7"
- dependencies:
- brace-expansion "^1.0.0"
-
-minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3:
- version "3.0.3"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774"
- dependencies:
- brace-expansion "^1.0.0"
-
-minimatch@~0.2.11:
- version "0.2.14"
- resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-0.2.14.tgz#c74e780574f63c6f9a090e90efbe6ef53a6a756a"
- dependencies:
- lru-cache "2"
- sigmund "~1.0.0"
-
-minimist@0.0.8, minimist@~0.0.1:
- version "0.0.8"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
-
-minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
-
-"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
- dependencies:
- minimist "0.0.8"
-
-ms@0.7.1:
- version "0.7.1"
- resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
-
-ms@0.7.2:
- version "0.7.2"
- resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.2.tgz#ae25cf2512b3885a1d95d7f037868d8431124765"
-
-multipipe@^0.1.2:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/multipipe/-/multipipe-0.1.2.tgz#2a8f2ddf70eed564dff2d57f1e1a137d9f05078b"
- dependencies:
- duplexer2 "0.0.2"
-
-mute-stream@0.0.5:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
-
-nan@^2.3.0:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/nan/-/nan-2.5.1.tgz#d5b01691253326a97a2bbee9e61c55d8d60351e2"
-
-natives@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.0.tgz#e9ff841418a6b2ec7a495e939984f78f163e6e31"
-
-natural-compare@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
-
-node-int64@^0.4.0:
- version "0.4.0"
- resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
-
-node-libs-browser@^0.7.0:
- version "0.7.0"
- resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b"
- dependencies:
- assert "^1.1.1"
- browserify-zlib "^0.1.4"
- buffer "^4.9.0"
- console-browserify "^1.1.0"
- constants-browserify "^1.0.0"
- crypto-browserify "3.3.0"
- domain-browser "^1.1.1"
- events "^1.0.0"
- https-browserify "0.0.1"
- os-browserify "^0.2.0"
- path-browserify "0.0.0"
- process "^0.11.0"
- punycode "^1.2.4"
- querystring-es3 "^0.2.0"
- readable-stream "^2.0.5"
- stream-browserify "^2.0.1"
- stream-http "^2.3.1"
- string_decoder "^0.10.25"
- timers-browserify "^2.0.2"
- tty-browserify "0.0.0"
- url "^0.11.0"
- util "^0.10.3"
- vm-browserify "0.0.4"
-
-node-notifier@^5.0.1:
- version "5.0.2"
- resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.0.2.tgz#4438449fe69e321f941cef943986b0797032701b"
- dependencies:
- growly "^1.3.0"
- semver "^5.3.0"
- shellwords "^0.1.0"
- which "^1.2.12"
-
-node-pre-gyp@^0.6.29:
- version "0.6.33"
- resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.33.tgz#640ac55198f6a925972e0c16c4ac26a034d5ecc9"
- dependencies:
- mkdirp "~0.5.1"
- nopt "~3.0.6"
- npmlog "^4.0.1"
- rc "~1.1.6"
- request "^2.79.0"
- rimraf "~2.5.4"
- semver "~5.3.0"
- tar "~2.2.1"
- tar-pack "~3.3.0"
-
-nopt@~3.0.6:
- version "3.0.6"
- resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
- dependencies:
- abbrev "1"
-
-normalize-package-data@^2.3.2:
- version "2.3.5"
- resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.3.5.tgz#8d924f142960e1777e7ffe170543631cc7cb02df"
- dependencies:
- hosted-git-info "^2.1.4"
- is-builtin-module "^1.0.0"
- semver "2 || 3 || 4 || 5"
- validate-npm-package-license "^3.0.1"
-
-normalize-path@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.0.1.tgz#47886ac1662760d4261b7d979d241709d3ce3f7a"
-
-npm-path@^2.0.2:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/npm-path/-/npm-path-2.0.3.tgz#15cff4e1c89a38da77f56f6055b24f975dfb2bbe"
- dependencies:
- which "^1.2.10"
-
-npm-run-path@^2.0.0:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
- dependencies:
- path-key "^2.0.0"
-
-npm-which@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/npm-which/-/npm-which-3.0.1.tgz#9225f26ec3a285c209cae67c3b11a6b4ab7140aa"
- dependencies:
- commander "^2.9.0"
- npm-path "^2.0.2"
- which "^1.2.10"
-
-npmlog@^4.0.1:
- version "4.0.2"
- resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.0.2.tgz#d03950e0e78ce1527ba26d2a7592e9348ac3e75f"
- dependencies:
- are-we-there-yet "~1.1.2"
- console-control-strings "~1.1.0"
- gauge "~2.7.1"
- set-blocking "~2.0.0"
-
-number-is-nan@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
-
-"nwmatcher@>= 1.3.9 < 2.0.0":
- version "1.3.9"
- resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.3.9.tgz#8bab486ff7fa3dfd086656bbe8b17116d3692d2a"
-
-oauth-sign@~0.8.1:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43"
-
-object-assign@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-3.0.0.tgz#9bedd5ca0897949bca47e7ff408062d549f587f2"
-
-object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1:
- version "4.1.1"
- resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
-
-object.omit@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa"
- dependencies:
- for-own "^0.1.4"
- is-extendable "^0.1.1"
-
-once@^1.3.0, once@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
- dependencies:
- wrappy "1"
-
-once@~1.3.0, once@~1.3.3:
- version "1.3.3"
- resolved "https://registry.yarnpkg.com/once/-/once-1.3.3.tgz#b2e261557ce4c314ec8304f3fa82663e4297ca20"
- dependencies:
- wrappy "1"
-
-onetime@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
-
-optimist@^0.6.1, optimist@~0.6.0:
- version "0.6.1"
- resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686"
- dependencies:
- minimist "~0.0.1"
- wordwrap "~0.0.2"
-
-optionator@^0.8.1, optionator@^0.8.2:
- version "0.8.2"
- resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
- dependencies:
- deep-is "~0.1.3"
- fast-levenshtein "~2.0.4"
- levn "~0.3.0"
- prelude-ls "~1.1.2"
- type-check "~0.3.2"
- wordwrap "~1.0.0"
-
-ora@^0.2.3:
- version "0.2.3"
- resolved "https://registry.yarnpkg.com/ora/-/ora-0.2.3.tgz#37527d220adcd53c39b73571d754156d5db657a4"
- dependencies:
- chalk "^1.1.1"
- cli-cursor "^1.0.2"
- cli-spinners "^0.1.2"
- object-assign "^4.0.1"
-
-orchestrator@^0.3.0:
- version "0.3.8"
- resolved "https://registry.yarnpkg.com/orchestrator/-/orchestrator-0.3.8.tgz#14e7e9e2764f7315fbac184e506c7aa6df94ad7e"
- dependencies:
- end-of-stream "~0.1.5"
- sequencify "~0.0.7"
- stream-consume "~0.1.0"
-
-ordered-read-streams@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-0.1.0.tgz#fd565a9af8eb4473ba69b6ed8a34352cb552f126"
-
-os-browserify@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f"
-
-os-homedir@^1.0.0, os-homedir@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
-
-os-locale@^1.4.0:
- version "1.4.0"
- resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
- dependencies:
- lcid "^1.0.0"
-
-os-shim@^0.1.2:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/os-shim/-/os-shim-0.1.3.tgz#6b62c3791cf7909ea35ed46e17658bb417cb3917"
-
-os-tmpdir@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
-
-p-finally@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae"
-
-p-limit@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
-
-p-locate@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
- dependencies:
- p-limit "^1.1.0"
-
-pako@~0.2.0:
- version "0.2.9"
- resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75"
-
-parse-filepath@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.1.tgz#159d6155d43904d16c10ef698911da1e91969b73"
- dependencies:
- is-absolute "^0.2.3"
- map-cache "^0.2.0"
- path-root "^0.1.1"
-
-parse-glob@^3.0.4:
- version "3.0.4"
- resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c"
- dependencies:
- glob-base "^0.3.0"
- is-dotfile "^1.0.0"
- is-extglob "^1.0.0"
- is-glob "^2.0.0"
-
-parse-json@^2.2.0:
- version "2.2.0"
- resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
- dependencies:
- error-ex "^1.2.0"
-
-parse-passwd@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6"
-
-parse5@^1.5.1:
- version "1.5.1"
- resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94"
-
-path-browserify@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a"
-
-path-exists@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
- dependencies:
- pinkie-promise "^2.0.0"
-
-path-exists@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
-
-path-is-absolute@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
-
-path-is-inside@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
-
-path-key@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
-
-path-parse@^1.0.5:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
-
-path-root-regex@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d"
-
-path-root@^0.1.1:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7"
- dependencies:
- path-root-regex "^0.1.0"
-
-path-type@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441"
- dependencies:
- graceful-fs "^4.1.2"
- pify "^2.0.0"
- pinkie-promise "^2.0.0"
-
-pbkdf2-compat@2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288"
-
-pify@^2.0.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
-
-pinkie-promise@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
- dependencies:
- pinkie "^2.0.0"
-
-pinkie@^2.0.0:
- version "2.0.4"
- resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
-
-pluralize@^1.2.1:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
-
-postcss-js@^0.3.0:
- version "0.3.0"
- resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-0.3.0.tgz#a5b690e24e7697d94eb293104da0f8e5cc10adf7"
- dependencies:
- camelcase-css "^1.0.1"
- postcss "^5.2.14"
-
-postcss-load-config@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a"
- dependencies:
- cosmiconfig "^2.1.0"
- object-assign "^4.1.0"
- postcss-load-options "^1.2.0"
- postcss-load-plugins "^2.3.0"
-
-postcss-load-options@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c"
- dependencies:
- cosmiconfig "^2.1.0"
- object-assign "^4.1.0"
-
-postcss-load-plugins@^2.3.0:
- version "2.3.0"
- resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92"
- dependencies:
- cosmiconfig "^2.1.1"
- object-assign "^4.1.0"
-
-postcss-safe-parser@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-2.0.0.tgz#5a629fe1363225a3a2b4b1f657b59d3462455c6b"
- dependencies:
- postcss "^5.2.0"
-
-postcss@^5.2.0, postcss@^5.2.14, postcss@^5.2.15, postcss@^5.2.4:
- version "5.2.15"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.15.tgz#a9e8685e50e06cc5b3fdea5297273246c26f5b30"
- dependencies:
- chalk "^1.1.3"
- js-base64 "^2.1.9"
- source-map "^0.5.6"
- supports-color "^3.2.3"
-
-pre-commit@^1.2.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/pre-commit/-/pre-commit-1.2.2.tgz#dbcee0ee9de7235e57f79c56d7ce94641a69eec6"
- dependencies:
- cross-spawn "^5.0.1"
- spawn-sync "^1.0.15"
- which "1.2.x"
-
-prelude-ls@~1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
-
-preserve@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
-
-pretty-format@^19.0.0:
- version "19.0.0"
- resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-19.0.0.tgz#56530d32acb98a3fa4851c4e2b9d37b420684c84"
- dependencies:
- ansi-styles "^3.0.0"
-
-pretty-hrtime@^1.0.0:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1"
-
-private@^0.1.6:
- version "0.1.7"
- resolved "https://registry.yarnpkg.com/private/-/private-0.1.7.tgz#68ce5e8a1ef0a23bb570cc28537b5332aba63ef1"
-
-process-nextick-args@~1.0.6:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
-
-process@^0.11.0:
- version "0.11.9"
- resolved "https://registry.yarnpkg.com/process/-/process-0.11.9.tgz#7bd5ad21aa6253e7da8682264f1e11d11c0318c1"
-
-progress@^1.1.8:
- version "1.1.8"
- resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
-
-prr@~0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a"
-
-pseudomap@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
-
-punycode@1.3.2:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d"
-
-punycode@^1.2.4, punycode@^1.4.1:
- version "1.4.1"
- resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e"
-
-qs@~6.3.0:
- version "6.3.1"
- resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.1.tgz#918c0b3bcd36679772baf135b1acb4c1651ed79d"
-
-querystring-es3@^0.2.0:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73"
-
-querystring@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
-
-randomatic@^1.1.3:
- version "1.1.6"
- resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.6.tgz#110dcabff397e9dcff7c0789ccc0a49adf1ec5bb"
- dependencies:
- is-number "^2.0.2"
- kind-of "^3.0.2"
-
-raw-loader@^0.5.1:
- version "0.5.1"
- resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa"
-
-rc@~1.1.6:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/rc/-/rc-1.1.7.tgz#c5ea564bb07aff9fd3a5b32e906c1d3a65940fea"
- dependencies:
- deep-extend "~0.4.0"
- ini "~1.3.0"
- minimist "^1.2.0"
- strip-json-comments "~2.0.1"
-
-read-pkg-up@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
- dependencies:
- find-up "^1.0.0"
- read-pkg "^1.0.0"
-
-read-pkg@^1.0.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28"
- dependencies:
- load-json-file "^1.0.0"
- normalize-package-data "^2.3.2"
- path-type "^1.0.0"
-
-"readable-stream@>=1.0.33-1 <1.1.0-0":
- version "1.0.34"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
-"readable-stream@^2.0.0 || ^1.1.13", readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.0, readable-stream@^2.1.5, readable-stream@^2.2.2:
- version "2.2.3"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.3.tgz#9cf49463985df016c8ae8813097a9293a9b33729"
- dependencies:
- buffer-shims "^1.0.0"
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "~1.0.0"
- process-nextick-args "~1.0.6"
- string_decoder "~0.10.x"
- util-deprecate "~1.0.1"
-
-readable-stream@~1.1.9:
- version "1.1.14"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9"
- dependencies:
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "0.0.1"
- string_decoder "~0.10.x"
-
-readable-stream@~2.1.4:
- version "2.1.5"
- resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0"
- dependencies:
- buffer-shims "^1.0.0"
- core-util-is "~1.0.0"
- inherits "~2.0.1"
- isarray "~1.0.0"
- process-nextick-args "~1.0.6"
- string_decoder "~0.10.x"
- util-deprecate "~1.0.1"
-
-readdirp@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78"
- dependencies:
- graceful-fs "^4.1.2"
- minimatch "^3.0.2"
- readable-stream "^2.0.2"
- set-immediate-shim "^1.0.1"
-
-readline2@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- mute-stream "0.0.5"
-
-rechoir@^0.6.2:
- version "0.6.2"
- resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
- dependencies:
- resolve "^1.1.6"
-
-regenerator-runtime@^0.10.0:
- version "0.10.3"
- resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.3.tgz#8c4367a904b51ea62a908ac310bf99ff90a82a3e"
-
-regex-cache@^0.4.2:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145"
- dependencies:
- is-equal-shallow "^0.1.3"
- is-primitive "^2.0.0"
-
-repeat-element@^1.1.2:
- version "1.1.2"
- resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a"
-
-repeat-string@^1.5.2:
- version "1.6.1"
- resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637"
-
-repeating@^2.0.0:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda"
- dependencies:
- is-finite "^1.0.0"
-
-replace-ext@0.0.1:
- version "0.0.1"
- resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924"
-
-request@^2.79.0:
- version "2.79.0"
- resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de"
- dependencies:
- aws-sign2 "~0.6.0"
- aws4 "^1.2.1"
- caseless "~0.11.0"
- combined-stream "~1.0.5"
- extend "~3.0.0"
- forever-agent "~0.6.1"
- form-data "~2.1.1"
- har-validator "~2.0.6"
- hawk "~3.1.3"
- http-signature "~1.1.0"
- is-typedarray "~1.0.0"
- isstream "~0.1.2"
- json-stringify-safe "~5.0.1"
- mime-types "~2.1.7"
- oauth-sign "~0.8.1"
- qs "~6.3.0"
- stringstream "~0.0.4"
- tough-cookie "~2.3.0"
- tunnel-agent "~0.4.1"
- uuid "^3.0.0"
-
-require-directory@^2.1.1:
- version "2.1.1"
- resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
-
-require-from-string@^1.1.0:
- version "1.2.1"
- resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418"
-
-require-main-filename@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
-
-require-uncached@^1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
- dependencies:
- caller-path "^0.1.0"
- resolve-from "^1.0.0"
-
-resolve-dir@^0.1.0:
- version "0.1.1"
- resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-0.1.1.tgz#b219259a5602fac5c5c496ad894a6e8cc430261e"
- dependencies:
- expand-tilde "^1.2.2"
- global-modules "^0.2.3"
-
-resolve-from@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
-
-resolve@1.1.7:
- version "1.1.7"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
-
-resolve@^1.1.6, resolve@^1.1.7, resolve@^1.2.0:
- version "1.3.2"
- resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.2.tgz#1f0442c9e0cbb8136e87b9305f932f46c7f28235"
- dependencies:
- path-parse "^1.0.5"
-
-restore-cursor@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
- dependencies:
- exit-hook "^1.0.0"
- onetime "^1.0.0"
-
-right-align@^0.1.1:
- version "0.1.3"
- resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
- dependencies:
- align-text "^0.1.1"
-
-rimraf@2, rimraf@^2.2.8, rimraf@^2.4.3, rimraf@^2.4.4:
- version "2.6.1"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
- dependencies:
- glob "^7.0.5"
-
-rimraf@~2.5.1, rimraf@~2.5.4:
- version "2.5.4"
- resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
- dependencies:
- glob "^7.0.5"
-
-ripemd160@0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce"
-
-run-async@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
- dependencies:
- once "^1.3.0"
-
-rx-lite@^3.1.2:
- version "3.1.2"
- resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
-
-rxjs@^5.0.0-beta.11:
- version "5.2.0"
- resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.2.0.tgz#db537de8767c05fa73721587a29e0085307d318b"
- dependencies:
- symbol-observable "^1.0.1"
-
-sane@~1.5.0:
- version "1.5.0"
- resolved "https://registry.yarnpkg.com/sane/-/sane-1.5.0.tgz#a4adeae764d048621ecb27d5f9ecf513101939f3"
- dependencies:
- anymatch "^1.3.0"
- exec-sh "^0.2.0"
- fb-watchman "^1.8.0"
- minimatch "^3.0.2"
- minimist "^1.1.1"
- walker "~1.0.5"
- watch "~0.10.0"
-
-sax@^1.2.1:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828"
-
-"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@~5.3.0:
- version "5.3.0"
- resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
-
-semver@^4.1.0:
- version "4.3.6"
- resolved "https://registry.yarnpkg.com/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da"
-
-sequencify@~0.0.7:
- version "0.0.7"
- resolved "https://registry.yarnpkg.com/sequencify/-/sequencify-0.0.7.tgz#90cff19d02e07027fd767f5ead3e7b95d1e7380c"
-
-set-blocking@^2.0.0, set-blocking@~2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
-
-set-immediate-shim@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61"
-
-setimmediate@^1.0.4:
- version "1.0.5"
- resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
-
-sha.js@2.2.6:
- version "2.2.6"
- resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
-
-shebang-command@^1.2.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
- dependencies:
- shebang-regex "^1.0.0"
-
-shebang-regex@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
-
-shelljs@^0.7.5:
- version "0.7.6"
- resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.6.tgz#379cccfb56b91c8601e4793356eb5382924de9ad"
- dependencies:
- glob "^7.0.0"
- interpret "^1.0.0"
- rechoir "^0.6.2"
-
-shellwords@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14"
-
-sigmund@~1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590"
-
-signal-exit@^3.0.0:
- version "3.0.2"
- resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
-
-slash@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55"
-
-slice-ansi@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
-
-sntp@1.x.x:
- version "1.0.9"
- resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198"
- dependencies:
- hoek "2.x.x"
-
-source-list-map@~0.1.7:
- version "0.1.8"
- resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106"
-
-source-map-support@^0.4.2:
- version "0.4.11"
- resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.11.tgz#647f939978b38535909530885303daf23279f322"
- dependencies:
- source-map "^0.5.3"
-
-source-map@^0.4.4, source-map@~0.4.1:
- version "0.4.4"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
- dependencies:
- amdefine ">=0.0.4"
-
-source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1:
- version "0.5.6"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
-
-source-map@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d"
- dependencies:
- amdefine ">=0.0.4"
-
-sparkles@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3"
-
-spawn-sync@^1.0.15:
- version "1.0.15"
- resolved "https://registry.yarnpkg.com/spawn-sync/-/spawn-sync-1.0.15.tgz#b00799557eb7fb0c8376c29d44e8a1ea67e57476"
- dependencies:
- concat-stream "^1.4.7"
- os-shim "^0.1.2"
-
-spdx-correct@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40"
- dependencies:
- spdx-license-ids "^1.0.2"
-
-spdx-expression-parse@~1.0.0:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c"
-
-spdx-license-ids@^1.0.2:
- version "1.2.2"
- resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57"
-
-sprintf-js@~1.0.2:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
-
-sshpk@^1.7.0:
- version "1.10.2"
- resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.10.2.tgz#d5a804ce22695515638e798dbe23273de070a5fa"
- dependencies:
- asn1 "~0.2.3"
- assert-plus "^1.0.0"
- dashdash "^1.12.0"
- getpass "^0.1.1"
- optionalDependencies:
- bcrypt-pbkdf "^1.0.0"
- ecc-jsbn "~0.1.1"
- jodid25519 "^1.0.0"
- jsbn "~0.1.0"
- tweetnacl "~0.14.0"
-
-staged-git-files@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/staged-git-files/-/staged-git-files-0.0.4.tgz#d797e1b551ca7a639dec0237dc6eb4bb9be17d35"
-
-stream-browserify@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db"
- dependencies:
- inherits "~2.0.1"
- readable-stream "^2.0.2"
-
-stream-consume@~0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.0.tgz#a41ead1a6d6081ceb79f65b061901b6d8f3d1d0f"
-
-stream-http@^2.3.1:
- version "2.6.3"
- resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.6.3.tgz#4c3ddbf9635968ea2cfd4e48d43de5def2625ac3"
- dependencies:
- builtin-status-codes "^3.0.0"
- inherits "^2.0.1"
- readable-stream "^2.1.0"
- to-arraybuffer "^1.0.0"
- xtend "^4.0.0"
-
-stream-to-observable@^0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.1.0.tgz#45bf1d9f2d7dc09bed81f1c307c430e68b84cffe"
-
-string-length@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/string-length/-/string-length-1.0.1.tgz#56970fb1c38558e9e70b728bf3de269ac45adfac"
- dependencies:
- strip-ansi "^3.0.0"
-
-string-width@^1.0.1, string-width@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
- dependencies:
- code-point-at "^1.0.0"
- is-fullwidth-code-point "^1.0.0"
- strip-ansi "^3.0.0"
-
-string-width@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e"
- dependencies:
- is-fullwidth-code-point "^2.0.0"
- strip-ansi "^3.0.0"
-
-string_decoder@^0.10.25, string_decoder@~0.10.x:
- version "0.10.31"
- resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
-
-stringstream@~0.0.4:
- version "0.0.5"
- resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878"
-
-strip-ansi@^3.0.0, strip-ansi@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
- dependencies:
- ansi-regex "^2.0.0"
-
-strip-bom@3.0.0, strip-bom@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
-
-strip-bom@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-1.0.0.tgz#85b8862f3844b5a6d5ec8467a93598173a36f794"
- dependencies:
- first-chunk-stream "^1.0.0"
- is-utf8 "^0.2.0"
-
-strip-bom@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e"
- dependencies:
- is-utf8 "^0.2.0"
-
-strip-eof@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
-
-strip-json-comments@~2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
-
-sugarss@^0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-0.2.0.tgz#ac34237563327c6ff897b64742bf6aec190ad39e"
- dependencies:
- postcss "^5.2.4"
-
-supports-color@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
-
-supports-color@^3.1.0, supports-color@^3.1.2, supports-color@^3.2.3:
- version "3.2.3"
- resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
- dependencies:
- has-flag "^1.0.0"
-
-symbol-observable@^1.0.1:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
-
-symbol-tree@^3.2.1:
- version "3.2.2"
- resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6"
-
-table@^3.7.8:
- version "3.8.3"
- resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
- dependencies:
- ajv "^4.7.0"
- ajv-keywords "^1.0.0"
- chalk "^1.1.1"
- lodash "^4.0.0"
- slice-ansi "0.0.4"
- string-width "^2.0.0"
-
-tapable@^0.1.8, tapable@~0.1.8:
- version "0.1.10"
- resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4"
-
-tar-pack@~3.3.0:
- version "3.3.0"
- resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.3.0.tgz#30931816418f55afc4d21775afdd6720cee45dae"
- dependencies:
- debug "~2.2.0"
- fstream "~1.0.10"
- fstream-ignore "~1.0.5"
- once "~1.3.3"
- readable-stream "~2.1.4"
- rimraf "~2.5.1"
- tar "~2.2.1"
- uid-number "~0.0.6"
-
-tar@~2.2.1:
- version "2.2.1"
- resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
- dependencies:
- block-stream "*"
- fstream "^1.0.2"
- inherits "2"
-
-test-exclude@^4.0.0:
- version "4.0.0"
- resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.0.0.tgz#0ddc0100b8ae7e88b34eb4fd98a907e961991900"
- dependencies:
- arrify "^1.0.1"
- micromatch "^2.3.11"
- object-assign "^4.1.0"
- read-pkg-up "^1.0.1"
- require-main-filename "^1.0.1"
-
-text-table@~0.2.0:
- version "0.2.0"
- resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
-
-throat@^3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6"
-
-through2@^0.6.1:
- version "0.6.5"
- resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48"
- dependencies:
- readable-stream ">=1.0.33-1 <1.1.0-0"
- xtend ">=4.0.0 <4.1.0-0"
-
-through2@^2.0.0, through2@^2.0.1:
- version "2.0.3"
- resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be"
- dependencies:
- readable-stream "^2.1.5"
- xtend "~4.0.1"
-
-through@^2.3.6, through@^2.3.8:
- version "2.3.8"
- resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
-
-tildify@^1.0.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/tildify/-/tildify-1.2.0.tgz#dcec03f55dca9b7aa3e5b04f21817eb56e63588a"
- dependencies:
- os-homedir "^1.0.0"
-
-time-stamp@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-1.0.1.tgz#9f4bd23559c9365966f3302dbba2b07c6b99b151"
-
-timers-browserify@^2.0.2:
- version "2.0.2"
- resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.2.tgz#ab4883cf597dcd50af211349a00fbca56ac86b86"
- dependencies:
- setimmediate "^1.0.4"
-
-tmpl@1.0.x:
- version "1.0.4"
- resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.4.tgz#23640dd7b42d00433911140820e5cf440e521dd1"
-
-to-arraybuffer@^1.0.0:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"
-
-to-fast-properties@^1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.2.tgz#f3f5c0c3ba7299a7ef99427e44633257ade43320"
-
-tough-cookie@^2.3.2, tough-cookie@~2.3.0:
- version "2.3.2"
- resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.2.tgz#f081f76e4c85720e6c37a5faced737150d84072a"
- dependencies:
- punycode "^1.4.1"
-
-tr46@~0.0.3:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
-
-trim-right@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
-
-tryit@^1.0.1:
- version "1.0.3"
- resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
-
-tty-browserify@0.0.0:
- version "0.0.0"
- resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6"
-
-tunnel-agent@~0.4.1:
- version "0.4.3"
- resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb"
-
-tweetnacl@^0.14.3, tweetnacl@~0.14.0:
- version "0.14.5"
- resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
-
-type-check@~0.3.2:
- version "0.3.2"
- resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
- dependencies:
- prelude-ls "~1.1.2"
-
-typedarray@^0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
-
-uglify-js@^2.6, uglify-js@~2.7.3:
- version "2.7.5"
- resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8"
- dependencies:
- async "~0.2.6"
- source-map "~0.5.1"
- uglify-to-browserify "~1.0.0"
- yargs "~3.10.0"
-
-uglify-to-browserify@~1.0.0:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7"
-
-uid-number@~0.0.6:
- version "0.0.6"
- resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81"
-
-unc-path-regex@^0.1.0:
- version "0.1.2"
- resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa"
-
-unique-stream@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-1.0.0.tgz#d59a4a75427447d9aa6c91e70263f8d26a4b104b"
-
-url@^0.11.0:
- version "0.11.0"
- resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1"
- dependencies:
- punycode "1.3.2"
- querystring "0.2.0"
-
-user-home@^1.1.1:
- version "1.1.1"
- resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
-
-user-home@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
- dependencies:
- os-homedir "^1.0.0"
-
-util-deprecate@~1.0.1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
-
-util@0.10.3, util@^0.10.3:
- version "0.10.3"
- resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9"
- dependencies:
- inherits "2.0.1"
-
-uuid@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.0.1.tgz#6544bba2dfda8c1cf17e629a3a305e2bb1fee6c1"
-
-v8flags@^2.0.2:
- version "2.0.11"
- resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.0.11.tgz#bca8f30f0d6d60612cc2c00641e6962d42ae6881"
- dependencies:
- user-home "^1.1.1"
-
-validate-npm-package-license@^3.0.1:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc"
- dependencies:
- spdx-correct "~1.0.0"
- spdx-expression-parse "~1.0.0"
-
-verror@1.3.6:
- version "1.3.6"
- resolved "https://registry.yarnpkg.com/verror/-/verror-1.3.6.tgz#cff5df12946d297d2baaefaa2689e25be01c005c"
- dependencies:
- extsprintf "1.0.2"
-
-vinyl-fs@^0.3.0:
- version "0.3.14"
- resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-0.3.14.tgz#9a6851ce1cac1c1cea5fe86c0931d620c2cfa9e6"
- dependencies:
- defaults "^1.0.0"
- glob-stream "^3.1.5"
- glob-watcher "^0.0.6"
- graceful-fs "^3.0.0"
- mkdirp "^0.5.0"
- strip-bom "^1.0.0"
- through2 "^0.6.1"
- vinyl "^0.4.0"
-
-vinyl@^0.4.0:
- version "0.4.6"
- resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.4.6.tgz#2f356c87a550a255461f36bbeb2a5ba8bf784847"
- dependencies:
- clone "^0.2.0"
- clone-stats "^0.0.1"
-
-vinyl@^0.5.0:
- version "0.5.3"
- resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-0.5.3.tgz#b0455b38fc5e0cf30d4325132e461970c2091cde"
- dependencies:
- clone "^1.0.0"
- clone-stats "^0.0.1"
- replace-ext "0.0.1"
-
-vinyl@^1.1.0:
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-1.2.0.tgz#5c88036cf565e5df05558bfc911f8656df218884"
- dependencies:
- clone "^1.0.0"
- clone-stats "^0.0.1"
- replace-ext "0.0.1"
-
-vm-browserify@0.0.4:
- version "0.0.4"
- resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
- dependencies:
- indexof "0.0.1"
-
-walker@~1.0.5:
- version "1.0.7"
- resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb"
- dependencies:
- makeerror "1.0.x"
-
-watch@~0.10.0:
- version "0.10.0"
- resolved "https://registry.yarnpkg.com/watch/-/watch-0.10.0.tgz#77798b2da0f9910d595f1ace5b0c2258521f21dc"
-
-watchpack@^0.2.1:
- version "0.2.9"
- resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b"
- dependencies:
- async "^0.9.0"
- chokidar "^1.0.0"
- graceful-fs "^4.1.2"
-
-webidl-conversions@^3.0.0:
- version "3.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
-
-webidl-conversions@^4.0.0:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.1.tgz#8015a17ab83e7e1b311638486ace81da6ce206a0"
-
-webpack-core@~0.6.9:
- version "0.6.9"
- resolved "https://registry.yarnpkg.com/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2"
- dependencies:
- source-list-map "~0.1.7"
- source-map "~0.4.1"
-
-webpack-stream@^3.2.0:
- version "3.2.0"
- resolved "https://registry.yarnpkg.com/webpack-stream/-/webpack-stream-3.2.0.tgz#3a1d160fb11d41727b7ce6f32f722464f98b2186"
- dependencies:
- gulp-util "^3.0.7"
- lodash.clone "^4.3.2"
- lodash.some "^4.2.2"
- memory-fs "^0.3.0"
- through "^2.3.8"
- vinyl "^1.1.0"
- webpack "^1.12.9"
-
-webpack@^1.12.9:
- version "1.14.0"
- resolved "https://registry.yarnpkg.com/webpack/-/webpack-1.14.0.tgz#54f1ffb92051a328a5b2057d6ae33c289462c823"
- dependencies:
- acorn "^3.0.0"
- async "^1.3.0"
- clone "^1.0.2"
- enhanced-resolve "~0.9.0"
- interpret "^0.6.4"
- loader-utils "^0.2.11"
- memory-fs "~0.3.0"
- mkdirp "~0.5.0"
- node-libs-browser "^0.7.0"
- optimist "~0.6.0"
- supports-color "^3.1.0"
- tapable "~0.1.8"
- uglify-js "~2.7.3"
- watchpack "^0.2.1"
- webpack-core "~0.6.9"
-
-whatwg-encoding@^1.0.1:
- version "1.0.1"
- resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.1.tgz#3c6c451a198ee7aec55b1ec61d0920c67801a5f4"
- dependencies:
- iconv-lite "0.4.13"
-
-whatwg-url@^4.3.0:
- version "4.5.0"
- resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-4.5.0.tgz#79bb6f0e370a4dda1cbc8f3062a490cf8bbb09ea"
- dependencies:
- tr46 "~0.0.3"
- webidl-conversions "^3.0.0"
-
-which-module@^1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
-
-which@1.2.x, which@^1.1.1, which@^1.2.10, which@^1.2.11, which@^1.2.12, which@^1.2.9:
- version "1.2.12"
- resolved "https://registry.yarnpkg.com/which/-/which-1.2.12.tgz#de67b5e450269f194909ef23ece4ebe416fa1192"
- dependencies:
- isexe "^1.1.1"
-
-wide-align@^1.1.0:
- version "1.1.0"
- resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.0.tgz#40edde802a71fea1f070da3e62dcda2e7add96ad"
- dependencies:
- string-width "^1.0.1"
-
-window-size@0.1.0:
- version "0.1.0"
- resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d"
-
-wordwrap@0.0.2:
- version "0.0.2"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f"
-
-wordwrap@~0.0.2:
- version "0.0.3"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107"
-
-wordwrap@~1.0.0:
- version "1.0.0"
- resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
-
-worker-farm@^1.3.1:
- version "1.3.1"
- resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.3.1.tgz#4333112bb49b17aa050b87895ca6b2cacf40e5ff"
- dependencies:
- errno ">=0.1.1 <0.2.0-0"
- xtend ">=4.0.0 <4.1.0-0"
-
-wrap-ansi@^2.0.0:
- version "2.1.0"
- resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85"
- dependencies:
- string-width "^1.0.1"
- strip-ansi "^3.0.1"
-
-wrappy@1:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
-
-write@^0.2.1:
- version "0.2.1"
- resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
- dependencies:
- mkdirp "^0.5.1"
-
-xml-name-validator@^2.0.1:
- version "2.0.1"
- resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635"
-
-"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@~4.0.1:
- version "4.0.1"
- resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"
-
-y18n@^3.2.1:
- version "3.2.1"
- resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41"
-
-yallist@^2.0.0:
- version "2.0.0"
- resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.0.0.tgz#306c543835f09ee1a4cb23b7bce9ab341c91cdd4"
-
-yargs-parser@^4.2.0:
- version "4.2.1"
- resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-4.2.1.tgz#29cceac0dc4f03c6c87b4a9f217dd18c9f74871c"
- dependencies:
- camelcase "^3.0.0"
-
-yargs@^6.3.0:
- version "6.6.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208"
- dependencies:
- camelcase "^3.0.0"
- cliui "^3.2.0"
- decamelize "^1.1.1"
- get-caller-file "^1.0.1"
- os-locale "^1.4.0"
- read-pkg-up "^1.0.1"
- require-directory "^2.1.1"
- require-main-filename "^1.0.1"
- set-blocking "^2.0.0"
- string-width "^1.0.2"
- which-module "^1.0.0"
- y18n "^3.2.1"
- yargs-parser "^4.2.0"
-
-yargs@~3.10.0:
- version "3.10.0"
- resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1"
- dependencies:
- camelcase "^1.0.2"
- cliui "^2.1.0"
- decamelize "^1.0.0"
- window-size "0.1.0"