diff --git a/CHANGELOG.md b/CHANGELOG.md index 17e2675..9129680 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,13 @@ +# 0.3.0 + +- Add support for 0.19 + # 0.2.0 -* Add support for sanitizing history +- Add support for sanitizing history # 0.1.0 -* Initial release of ElmRings! -* Support for history exporting -* Example +- Initial release of ElmRings! +- Support for history exporting +- Example diff --git a/README.md b/README.md index d8a8336..f8da3bd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # elm-rings [![Build Status](https://travis-ci.org/arsduo/elm-rings.svg?branch=master)](https://travis-ci.org/arsduo/elm-rings) -_Programmatically record the state of your Elm application as your users use it_ +_Programmatically record the state of your Elm application as your users use it in Elm 0.19 and 0.18_ If you’ve ever received a support ticket, you’ve seen something like this: “Carmen M. can’t complete her quiz, it’s not affecting any other students”. Great. Was she unable to select answers to the questions? Able to answer but the submit button stays disabled? Able to tap submit but to no avail? @@ -38,7 +38,7 @@ npm install elm-rings ### Capturing History -And add code like this to your application wherever you initialize the Elm app you want to listen to: +And add code like this to your application wherever you initialize the Elm app you want to listen to. ```javascript import ElmRings from "javascript/ElmRings.js"; @@ -104,6 +104,9 @@ MySecretData "access_token" {password = "myP@ssw0rd", expiration = "tomorrow"} As an Elm history entry, this will look like ```js +// 0.19 +{"$": "MySecretData", "a": "access_token", "b": {"password": "myP@ssw0rd", "expiration": "tomorrow"}} +// 0.18 {"ctor": "MySecretData", "_0": "access_token", "_1": {"password": "myP@ssw0rd", "expiration": "tomorrow"}} ``` @@ -116,10 +119,11 @@ ElmRing's sanitization is done by the `sanitizeElmHistory` function in sanitizeElmHistory(historyData, ["MySecretData", "password"], function( elmObjectOrRecord ) { - if (elmObjectOrRecord.ctor == "MySecretData") { + // for 0.18, replace $ with ctor and a with _1 + if (elmObjectOrRecord.$ == "MySecretData") { // replace the access token // make sure to return the updated object! - return { ...elmObjectOrRecord, _0: "[FILTERED]" }; + return { ...elmObjectOrRecord, a: "[FILTERED]" }; } else { // we have a record, replace the password field return { ...elmObjectOrRecord, password: "[FILTERED]" }; @@ -130,7 +134,7 @@ sanitizeElmHistory(historyData, ["MySecretData", "password"], function( We'll receive back a sanitized entry: ```js -{"ctor": "MySecretData", "_0": "[FILTERED]", "_1": {"password": "[FILTERED]", "expiration": "tomorrow"}} +{"$": "MySecretData", "a": "[FILTERED]", "b": {"password": "[FILTERED]", "expiration": "tomorrow"}} ``` If you specify the `watchWords` and `historySanitizer` function, ElmRings will automatically @@ -141,25 +145,47 @@ up (though you can silence this if you really want to `playDangerousWithData`). ## Example -Want to see ElmRings in action? Check out the example app! It's all in the browser, but you can imagine how you could send the data to your server and display the results on a support page if you'd like. +Want to see ElmRings in action? + +#### 0.18 + +If you're using 0.18, you can check out the example app! It's all in the browser, but you can imagine how you could send the data to your server and display the results on a support page if you'd like. To run the example locally: 1. Check out the repo 2. Run `yarn install && elm-package install` -3. Run `yarn example` -4. Visit [http://localhost:8080](http://localhost:8080) +3. Run `yarn example18` +4. Visit [http://localhost:8080/example18/](http://localhost:8080/example18/) The example in action: +#### 0.19 + +If you're on 0.19, I've adapted a copy of @rtfeldman's [Elm SPA +example](https://github.com/rtfeldman/elm-spa-example/) to work with ElmRings. (The ElmRings +example app is blocked by an apparent bug in [Elm 0.19's debug +mode](https://github.com/elm/compiler/issues/1799).) It's less flashy, but it's all there. + +To run the example locally: + +1. Check out the repo +2. Run `yarn install && elm-package install` +3. Run `yarn example` +4. Visit [http://localhost:8080/example19/](http://localhost:8080/example19/) +5. Open the browser console to see the history output +6. Click on a tag and verify that the next history export sanitized which tag you chose + +![elm-rings-0 19](https://user-images.githubusercontent.com/48325/45588143-6bbea080-b8d5-11e8-8f20-7f3c6dcde817.gif) + ## Caveats Of course, there are caveats, even after you clean the history of sensitive data. -* **Performance:** an app that generates a lot of entries may well run into performance problems eventually., especially on lower-powered hardware (such as the Chromebooks or iPads schools use). I haven’t measured when those would occur, but if you’re storing a lot of data or generating a flood of events, keep that in mind. (I’d be grateful for any data!) -* **Exposing your internals:** with debug mode enabled your users (and, in theory, any Javascript on your page to see exactly what data your app stores and how it’s structured. All front end applications have to assume any data is open to the world, but this makes it unusually accessible. +- **Performance:** an app that generates a lot of entries may well run into performance problems eventually., especially on lower-powered hardware (such as the Chromebooks or iPads schools use). I haven’t measured when those would occur, but if you’re storing a lot of data or generating a flood of events, keep that in mind. (I’d be grateful for any data!) +- **Exposing your internals:** with debug mode enabled your users (and, in theory, any Javascript on your page to see exactly what data your app stores and how it’s structured. All front end applications have to assume any data is open to the world, but this makes it unusually accessible. Given those caveats, you may decide (like us) to only capture state for particular users for whom a flag is enabled. The big drawback of that approach is that you can’t proactively know who will encounter an error — it’ll be difficult to capture hard-to-reproduce problems. @@ -212,8 +238,8 @@ When filing an issue, please include a good description of what's happening and When submitting a pull request: -* make sure that all tests pass when running `yarn test` -* write a good description of the problem your code solves +- make sure that all tests pass when running `yarn test` +- write a good description of the problem your code solves Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms. See diff --git a/elm.json b/elm.json new file mode 100644 index 0000000..f751b15 --- /dev/null +++ b/elm.json @@ -0,0 +1,22 @@ +{ + "type": "application", + "source-directories": ["."], + "elm-version": "0.19.0", + "dependencies": { + "direct": { + "elm/browser": "1.0.0", + "elm/core": "1.0.0", + "elm/html": "1.0.0" + }, + "indirect": { + "elm/json": "1.0.0", + "elm/time": "1.0.0", + "elm/url": "1.0.0", + "elm/virtual-dom": "1.0.2" + } + }, + "test-dependencies": { + "direct": {}, + "indirect": {} + } +} diff --git a/example/counter.elm b/example-0.18/counter.elm similarity index 100% rename from example/counter.elm rename to example-0.18/counter.elm diff --git a/example/elm-package.json b/example-0.18/elm-package.json similarity index 100% rename from example/elm-package.json rename to example-0.18/elm-package.json diff --git a/example/index.html b/example-0.18/index.html similarity index 100% rename from example/index.html rename to example-0.18/index.html diff --git a/example/index.js b/example-0.18/index.js similarity index 100% rename from example/index.js rename to example-0.18/index.js diff --git a/example/webpack.config.js b/example-0.18/webpack.config.js similarity index 100% rename from example/webpack.config.js rename to example-0.18/webpack.config.js diff --git a/example-0.19/LICENSE b/example-0.19/LICENSE new file mode 100644 index 0000000..7875cad --- /dev/null +++ b/example-0.19/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-2018 Richard Feldman and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/example-0.19/README.md b/example-0.19/README.md new file mode 100644 index 0000000..5c79144 --- /dev/null +++ b/example-0.19/README.md @@ -0,0 +1 @@ +# ADAPTED FROM @rtfeldman's [Elm SPA example](https://github.com/rtfeldman/elm-spa-example/) diff --git a/example-0.19/assets/icons/android-chrome-192x192.png b/example-0.19/assets/icons/android-chrome-192x192.png new file mode 100644 index 0000000..ff83974 Binary files /dev/null and b/example-0.19/assets/icons/android-chrome-192x192.png differ diff --git a/example-0.19/assets/icons/android-chrome-512x512.png b/example-0.19/assets/icons/android-chrome-512x512.png new file mode 100644 index 0000000..ec8f581 Binary files /dev/null and b/example-0.19/assets/icons/android-chrome-512x512.png differ diff --git a/example-0.19/assets/icons/apple-touch-icon.png b/example-0.19/assets/icons/apple-touch-icon.png new file mode 100644 index 0000000..0a048cc Binary files /dev/null and b/example-0.19/assets/icons/apple-touch-icon.png differ diff --git a/example-0.19/assets/icons/browserconfig.xml b/example-0.19/assets/icons/browserconfig.xml new file mode 100644 index 0000000..b3930d0 --- /dev/null +++ b/example-0.19/assets/icons/browserconfig.xml @@ -0,0 +1,9 @@ + + + + + + #da532c + + + diff --git a/example-0.19/assets/icons/favicon-16x16.png b/example-0.19/assets/icons/favicon-16x16.png new file mode 100644 index 0000000..246ebd7 Binary files /dev/null and b/example-0.19/assets/icons/favicon-16x16.png differ diff --git a/example-0.19/assets/icons/favicon-32x32.png b/example-0.19/assets/icons/favicon-32x32.png new file mode 100644 index 0000000..72a40d1 Binary files /dev/null and b/example-0.19/assets/icons/favicon-32x32.png differ diff --git a/example-0.19/assets/icons/favicon.ico b/example-0.19/assets/icons/favicon.ico new file mode 100644 index 0000000..ac27808 Binary files /dev/null and b/example-0.19/assets/icons/favicon.ico differ diff --git a/example-0.19/assets/icons/mstile-144x144.png b/example-0.19/assets/icons/mstile-144x144.png new file mode 100644 index 0000000..c606809 Binary files /dev/null and b/example-0.19/assets/icons/mstile-144x144.png differ diff --git a/example-0.19/assets/icons/mstile-150x150.png b/example-0.19/assets/icons/mstile-150x150.png new file mode 100644 index 0000000..df842e1 Binary files /dev/null and b/example-0.19/assets/icons/mstile-150x150.png differ diff --git a/example-0.19/assets/icons/mstile-310x150.png b/example-0.19/assets/icons/mstile-310x150.png new file mode 100644 index 0000000..e3f88b8 Binary files /dev/null and b/example-0.19/assets/icons/mstile-310x150.png differ diff --git a/example-0.19/assets/icons/mstile-310x310.png b/example-0.19/assets/icons/mstile-310x310.png new file mode 100644 index 0000000..f0702f4 Binary files /dev/null and b/example-0.19/assets/icons/mstile-310x310.png differ diff --git a/example-0.19/assets/icons/mstile-70x70.png b/example-0.19/assets/icons/mstile-70x70.png new file mode 100644 index 0000000..8b7596f Binary files /dev/null and b/example-0.19/assets/icons/mstile-70x70.png differ diff --git a/example-0.19/assets/icons/safari-pinned-tab.svg b/example-0.19/assets/icons/safari-pinned-tab.svg new file mode 100644 index 0000000..1d414ab --- /dev/null +++ b/example-0.19/assets/icons/safari-pinned-tab.svg @@ -0,0 +1,29 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + + + + + + + diff --git a/example-0.19/assets/images/error.jpg b/example-0.19/assets/images/error.jpg new file mode 100644 index 0000000..dfc53d1 Binary files /dev/null and b/example-0.19/assets/images/error.jpg differ diff --git a/example-0.19/assets/images/loading.svg b/example-0.19/assets/images/loading.svg new file mode 100644 index 0000000..4549525 --- /dev/null +++ b/example-0.19/assets/images/loading.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/example-0.19/assets/images/smiley-cyrus.jpg b/example-0.19/assets/images/smiley-cyrus.jpg new file mode 100644 index 0000000..784a6b9 Binary files /dev/null and b/example-0.19/assets/images/smiley-cyrus.jpg differ diff --git a/example-0.19/assets/site.webmanifest b/example-0.19/assets/site.webmanifest new file mode 100644 index 0000000..fa99de7 --- /dev/null +++ b/example-0.19/assets/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "", + "short_name": "", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone" +} diff --git a/example-0.19/elm.js b/example-0.19/elm.js new file mode 100644 index 0000000..85969b2 --- /dev/null +++ b/example-0.19/elm.js @@ -0,0 +1,20756 @@ +(function(scope) { + "use strict"; + + function F(arity, fun, wrapper) { + wrapper.a = arity; + wrapper.f = fun; + return wrapper; + } + + function F2(fun) { + return F(2, fun, function(a) { + return function(b) { + return fun(a, b); + }; + }); + } + function F3(fun) { + return F(3, fun, function(a) { + return function(b) { + return function(c) { + return fun(a, b, c); + }; + }; + }); + } + function F4(fun) { + return F(4, fun, function(a) { + return function(b) { + return function(c) { + return function(d) { + return fun(a, b, c, d); + }; + }; + }; + }); + } + function F5(fun) { + return F(5, fun, function(a) { + return function(b) { + return function(c) { + return function(d) { + return function(e) { + return fun(a, b, c, d, e); + }; + }; + }; + }; + }); + } + function F6(fun) { + return F(6, fun, function(a) { + return function(b) { + return function(c) { + return function(d) { + return function(e) { + return function(f) { + return fun(a, b, c, d, e, f); + }; + }; + }; + }; + }; + }); + } + function F7(fun) { + return F(7, fun, function(a) { + return function(b) { + return function(c) { + return function(d) { + return function(e) { + return function(f) { + return function(g) { + return fun(a, b, c, d, e, f, g); + }; + }; + }; + }; + }; + }; + }); + } + function F8(fun) { + return F(8, fun, function(a) { + return function(b) { + return function(c) { + return function(d) { + return function(e) { + return function(f) { + return function(g) { + return function(h) { + return fun(a, b, c, d, e, f, g, h); + }; + }; + }; + }; + }; + }; + }; + }); + } + function F9(fun) { + return F(9, fun, function(a) { + return function(b) { + return function(c) { + return function(d) { + return function(e) { + return function(f) { + return function(g) { + return function(h) { + return function(i) { + return fun(a, b, c, d, e, f, g, h, i); + }; + }; + }; + }; + }; + }; + }; + }; + }); + } + + function A2(fun, a, b) { + return fun.a === 2 ? fun.f(a, b) : fun(a)(b); + } + function A3(fun, a, b, c) { + return fun.a === 3 ? fun.f(a, b, c) : fun(a)(b)(c); + } + function A4(fun, a, b, c, d) { + return fun.a === 4 ? fun.f(a, b, c, d) : fun(a)(b)(c)(d); + } + function A5(fun, a, b, c, d, e) { + return fun.a === 5 ? fun.f(a, b, c, d, e) : fun(a)(b)(c)(d)(e); + } + function A6(fun, a, b, c, d, e, f) { + return fun.a === 6 ? fun.f(a, b, c, d, e, f) : fun(a)(b)(c)(d)(e)(f); + } + function A7(fun, a, b, c, d, e, f, g) { + return fun.a === 7 ? fun.f(a, b, c, d, e, f, g) : fun(a)(b)(c)(d)(e)(f)(g); + } + function A8(fun, a, b, c, d, e, f, g, h) { + return fun.a === 8 + ? fun.f(a, b, c, d, e, f, g, h) + : fun(a)(b)(c)(d)(e)(f)(g)(h); + } + function A9(fun, a, b, c, d, e, f, g, h, i) { + return fun.a === 9 + ? fun.f(a, b, c, d, e, f, g, h, i) + : fun(a)(b)(c)(d)(e)(f)(g)(h)(i); + } + + console.warn( + "Compiled in DEBUG mode. Follow the advice at https://elm-lang.org/0.19.0/optimize for better performance and smaller assets." + ); + + var _List_Nil_UNUSED = { $: 0 }; + var _List_Nil = { $: "[]" }; + + function _List_Cons_UNUSED(hd, tl) { + return { $: 1, a: hd, b: tl }; + } + function _List_Cons(hd, tl) { + return { $: "::", a: hd, b: tl }; + } + + var _List_cons = F2(_List_Cons); + + function _List_fromArray(arr) { + var out = _List_Nil; + for (var i = arr.length; i--; ) { + out = _List_Cons(arr[i], out); + } + return out; + } + + function _List_toArray(xs) { + for ( + var out = []; + xs.b; + xs = xs.b // WHILE_CONS + ) { + out.push(xs.a); + } + return out; + } + + var _List_map2 = F3(function(f, xs, ys) { + for ( + var arr = []; + xs.b && ys.b; + xs = xs.b, ys = ys.b // WHILE_CONSES + ) { + arr.push(A2(f, xs.a, ys.a)); + } + return _List_fromArray(arr); + }); + + var _List_map3 = F4(function(f, xs, ys, zs) { + for ( + var arr = []; + xs.b && ys.b && zs.b; + xs = xs.b, ys = ys.b, zs = zs.b // WHILE_CONSES + ) { + arr.push(A3(f, xs.a, ys.a, zs.a)); + } + return _List_fromArray(arr); + }); + + var _List_map4 = F5(function(f, ws, xs, ys, zs) { + for ( + var arr = []; + ws.b && xs.b && ys.b && zs.b; + ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b // WHILE_CONSES + ) { + arr.push(A4(f, ws.a, xs.a, ys.a, zs.a)); + } + return _List_fromArray(arr); + }); + + var _List_map5 = F6(function(f, vs, ws, xs, ys, zs) { + for ( + var arr = []; + vs.b && ws.b && xs.b && ys.b && zs.b; + vs = vs.b, ws = ws.b, xs = xs.b, ys = ys.b, zs = zs.b // WHILE_CONSES + ) { + arr.push(A5(f, vs.a, ws.a, xs.a, ys.a, zs.a)); + } + return _List_fromArray(arr); + }); + + var _List_sortBy = F2(function(f, xs) { + return _List_fromArray( + _List_toArray(xs).sort(function(a, b) { + return _Utils_cmp(f(a), f(b)); + }) + ); + }); + + var _List_sortWith = F2(function(f, xs) { + return _List_fromArray( + _List_toArray(xs).sort(function(a, b) { + var ord = A2(f, a, b); + return ord === elm$core$Basics$EQ + ? 0 + : ord === elm$core$Basics$LT + ? -1 + : 1; + }) + ); + }); + + // EQUALITY + + function _Utils_eq(x, y) { + for ( + var pair, stack = [], isEqual = _Utils_eqHelp(x, y, 0, stack); + isEqual && (pair = stack.pop()); + isEqual = _Utils_eqHelp(pair.a, pair.b, 0, stack) + ) {} + + return isEqual; + } + + function _Utils_eqHelp(x, y, depth, stack) { + if (depth > 100) { + stack.push(_Utils_Tuple2(x, y)); + return true; + } + + if (x === y) { + return true; + } + + if (typeof x !== "object" || x === null || y === null) { + typeof x === "function" && _Debug_crash(5); + return false; + } + + /**/ + if (x.$ === "Set_elm_builtin") { + x = elm$core$Set$toList(x); + y = elm$core$Set$toList(y); + } + if (x.$ === "RBNode_elm_builtin" || x.$ === "RBEmpty_elm_builtin") { + x = elm$core$Dict$toList(x); + y = elm$core$Dict$toList(y); + } + //*/ + + /**_UNUSED/ + if (x.$ < 0) + { + x = elm$core$Dict$toList(x); + y = elm$core$Dict$toList(y); + } + //*/ + + for (var key in x) { + if (!_Utils_eqHelp(x[key], y[key], depth + 1, stack)) { + return false; + } + } + return true; + } + + var _Utils_equal = F2(_Utils_eq); + var _Utils_notEqual = F2(function(a, b) { + return !_Utils_eq(a, b); + }); + + // COMPARISONS + + // Code in Generate/JavaScript.hs, Basics.js, and List.js depends on + // the particular integer values assigned to LT, EQ, and GT. + + function _Utils_cmp(x, y, ord) { + if (typeof x !== "object") { + return x === y ? /*EQ*/ 0 : x < y ? /*LT*/ -1 : /*GT*/ 1; + } + + /**/ + if (x instanceof String) { + var a = x.valueOf(); + var b = y.valueOf(); + return a === b ? 0 : a < b ? -1 : 1; + } + //*/ + + /**_UNUSED/ + if (!x.$) + //*/ + /**/ + if (x.$[0] === "#") { + //*/ + return (ord = _Utils_cmp(x.a, y.a)) + ? ord + : (ord = _Utils_cmp(x.b, y.b)) + ? ord + : _Utils_cmp(x.c, y.c); + } + + // traverse conses until end of a list or a mismatch + for (; x.b && y.b && !(ord = _Utils_cmp(x.a, y.a)); x = x.b, y = y.b) {} // WHILE_CONSES + return ord || (x.b ? /*GT*/ 1 : y.b ? /*LT*/ -1 : /*EQ*/ 0); + } + + var _Utils_lt = F2(function(a, b) { + return _Utils_cmp(a, b) < 0; + }); + var _Utils_le = F2(function(a, b) { + return _Utils_cmp(a, b) < 1; + }); + var _Utils_gt = F2(function(a, b) { + return _Utils_cmp(a, b) > 0; + }); + var _Utils_ge = F2(function(a, b) { + return _Utils_cmp(a, b) >= 0; + }); + + var _Utils_compare = F2(function(x, y) { + var n = _Utils_cmp(x, y); + return n < 0 + ? elm$core$Basics$LT + : n + ? elm$core$Basics$GT + : elm$core$Basics$EQ; + }); + + // COMMON VALUES + + var _Utils_Tuple0_UNUSED = 0; + var _Utils_Tuple0 = { $: "#0" }; + + function _Utils_Tuple2_UNUSED(a, b) { + return { a: a, b: b }; + } + function _Utils_Tuple2(a, b) { + return { $: "#2", a: a, b: b }; + } + + function _Utils_Tuple3_UNUSED(a, b, c) { + return { a: a, b: b, c: c }; + } + function _Utils_Tuple3(a, b, c) { + return { $: "#3", a: a, b: b, c: c }; + } + + function _Utils_chr_UNUSED(c) { + return c; + } + function _Utils_chr(c) { + return new String(c); + } + + // RECORDS + + function _Utils_update(oldRecord, updatedFields) { + var newRecord = {}; + + for (var key in oldRecord) { + newRecord[key] = oldRecord[key]; + } + + for (var key in updatedFields) { + newRecord[key] = updatedFields[key]; + } + + return newRecord; + } + + // APPEND + + var _Utils_append = F2(_Utils_ap); + + function _Utils_ap(xs, ys) { + // append Strings + if (typeof xs === "string") { + return xs + ys; + } + + // append Lists + if (!xs.b) { + return ys; + } + var root = _List_Cons(xs.a, ys); + xs = xs.b; + for ( + var curr = root; + xs.b; + xs = xs.b // WHILE_CONS + ) { + curr = curr.b = _List_Cons(xs.a, ys); + } + return root; + } + + var _JsArray_empty = []; + + function _JsArray_singleton(value) { + return [value]; + } + + function _JsArray_length(array) { + return array.length; + } + + var _JsArray_initialize = F3(function(size, offset, func) { + var result = new Array(size); + + for (var i = 0; i < size; i++) { + result[i] = func(offset + i); + } + + return result; + }); + + var _JsArray_initializeFromList = F2(function(max, ls) { + var result = new Array(max); + + for (var i = 0; i < max && ls.b; i++) { + result[i] = ls.a; + ls = ls.b; + } + + result.length = i; + return _Utils_Tuple2(result, ls); + }); + + var _JsArray_unsafeGet = F2(function(index, array) { + return array[index]; + }); + + var _JsArray_unsafeSet = F3(function(index, value, array) { + var length = array.length; + var result = new Array(length); + + for (var i = 0; i < length; i++) { + result[i] = array[i]; + } + + result[index] = value; + return result; + }); + + var _JsArray_push = F2(function(value, array) { + var length = array.length; + var result = new Array(length + 1); + + for (var i = 0; i < length; i++) { + result[i] = array[i]; + } + + result[length] = value; + return result; + }); + + var _JsArray_foldl = F3(function(func, acc, array) { + var length = array.length; + + for (var i = 0; i < length; i++) { + acc = A2(func, array[i], acc); + } + + return acc; + }); + + var _JsArray_foldr = F3(function(func, acc, array) { + for (var i = array.length - 1; i >= 0; i--) { + acc = A2(func, array[i], acc); + } + + return acc; + }); + + var _JsArray_map = F2(function(func, array) { + var length = array.length; + var result = new Array(length); + + for (var i = 0; i < length; i++) { + result[i] = func(array[i]); + } + + return result; + }); + + var _JsArray_indexedMap = F3(function(func, offset, array) { + var length = array.length; + var result = new Array(length); + + for (var i = 0; i < length; i++) { + result[i] = A2(func, offset + i, array[i]); + } + + return result; + }); + + var _JsArray_slice = F3(function(from, to, array) { + return array.slice(from, to); + }); + + var _JsArray_appendN = F3(function(n, dest, source) { + var destLen = dest.length; + var itemsToCopy = n - destLen; + + if (itemsToCopy > source.length) { + itemsToCopy = source.length; + } + + var size = destLen + itemsToCopy; + var result = new Array(size); + + for (var i = 0; i < destLen; i++) { + result[i] = dest[i]; + } + + for (var i = 0; i < itemsToCopy; i++) { + result[i + destLen] = source[i]; + } + + return result; + }); + + // LOG + + var _Debug_log_UNUSED = F2(function(tag, value) { + return value; + }); + + var _Debug_log = F2(function(tag, value) { + console.log(tag + ": " + _Debug_toString(value)); + return value; + }); + + // TODOS + + function _Debug_todo(moduleName, region) { + return function(message) { + _Debug_crash(8, moduleName, region, message); + }; + } + + function _Debug_todoCase(moduleName, region, value) { + return function(message) { + _Debug_crash(9, moduleName, region, value, message); + }; + } + + // TO STRING + + function _Debug_toString_UNUSED(value) { + return ""; + } + + function _Debug_toString(value) { + return _Debug_toAnsiString(false, value); + } + + function _Debug_toAnsiString(ansi, value) { + if (typeof value === "function") { + return _Debug_internalColor(ansi, ""); + } + + if (typeof value === "boolean") { + return _Debug_ctorColor(ansi, value ? "True" : "False"); + } + + if (typeof value === "number") { + return _Debug_numberColor(ansi, value + ""); + } + + if (value instanceof String) { + return _Debug_charColor(ansi, "'" + _Debug_addSlashes(value, true) + "'"); + } + + if (typeof value === "string") { + return _Debug_stringColor( + ansi, + '"' + _Debug_addSlashes(value, false) + '"' + ); + } + + if (typeof value === "object" && "$" in value) { + var tag = value.$; + + if (typeof tag === "number") { + return _Debug_internalColor(ansi, ""); + } + + if (tag[0] === "#") { + var output = []; + for (var k in value) { + if (k === "$") continue; + output.push(_Debug_toAnsiString(ansi, value[k])); + } + return "(" + output.join(",") + ")"; + } + + if (tag === "Set_elm_builtin") { + return ( + _Debug_ctorColor(ansi, "Set") + + _Debug_fadeColor(ansi, ".fromList") + + " " + + _Debug_toAnsiString(ansi, elm$core$Set$toList(value)) + ); + } + + if (tag === "RBNode_elm_builtin" || tag === "RBEmpty_elm_builtin") { + return ( + _Debug_ctorColor(ansi, "Dict") + + _Debug_fadeColor(ansi, ".fromList") + + " " + + _Debug_toAnsiString(ansi, elm$core$Dict$toList(value)) + ); + } + + if (tag === "Array_elm_builtin") { + return ( + _Debug_ctorColor(ansi, "Array") + + _Debug_fadeColor(ansi, ".fromList") + + " " + + _Debug_toAnsiString(ansi, elm$core$Array$toList(value)) + ); + } + + if (tag === "::" || tag === "[]") { + var output = "["; + + value.b && + ((output += _Debug_toAnsiString(ansi, value.a)), (value = value.b)); + + for ( + ; + value.b; + value = value.b // WHILE_CONS + ) { + output += "," + _Debug_toAnsiString(ansi, value.a); + } + return output + "]"; + } + + var output = ""; + for (var i in value) { + if (i === "$") continue; + var str = _Debug_toAnsiString(ansi, value[i]); + var c0 = str[0]; + var parenless = + c0 === "{" || + c0 === "(" || + c0 === "[" || + c0 === "<" || + c0 === '"' || + str.indexOf(" ") < 0; + output += " " + (parenless ? str : "(" + str + ")"); + } + return _Debug_ctorColor(ansi, tag) + output; + } + + if (typeof value === "object") { + var output = []; + for (var key in value) { + var field = key[0] === "_" ? key.slice(1) : key; + output.push( + _Debug_fadeColor(ansi, field) + + " = " + + _Debug_toAnsiString(ansi, value[key]) + ); + } + if (output.length === 0) { + return "{}"; + } + return "{ " + output.join(", ") + " }"; + } + + return _Debug_internalColor(ansi, ""); + } + + function _Debug_addSlashes(str, isChar) { + var s = str + .replace(/\\/g, "\\\\") + .replace(/\n/g, "\\n") + .replace(/\t/g, "\\t") + .replace(/\r/g, "\\r") + .replace(/\v/g, "\\v") + .replace(/\0/g, "\\0"); + + if (isChar) { + return s.replace(/\'/g, "\\'"); + } else { + return s.replace(/\"/g, '\\"'); + } + } + + function _Debug_ctorColor(ansi, string) { + return ansi ? "\x1b[96m" + string + "\x1b[0m" : string; + } + + function _Debug_numberColor(ansi, string) { + return ansi ? "\x1b[95m" + string + "\x1b[0m" : string; + } + + function _Debug_stringColor(ansi, string) { + return ansi ? "\x1b[93m" + string + "\x1b[0m" : string; + } + + function _Debug_charColor(ansi, string) { + return ansi ? "\x1b[92m" + string + "\x1b[0m" : string; + } + + function _Debug_fadeColor(ansi, string) { + return ansi ? "\x1b[37m" + string + "\x1b[0m" : string; + } + + function _Debug_internalColor(ansi, string) { + return ansi ? "\x1b[94m" + string + "\x1b[0m" : string; + } + + // CRASH + + function _Debug_crash_UNUSED(identifier) { + throw new Error( + "https://github.com/elm/core/blob/1.0.0/hints/" + identifier + ".md" + ); + } + + function _Debug_crash(identifier, fact1, fact2, fact3, fact4) { + switch (identifier) { + case 0: + throw new Error( + 'What node should I take over? In JavaScript I need something like:\n\n Elm.Main.init({\n node: document.getElementById("elm-node")\n })\n\nYou need to do this with any Browser.sandbox or Browser.element program.' + ); + + case 1: + throw new Error( + "Browser.application programs cannot handle URLs like this:\n\n " + + document.location.href + + "\n\nWhat is the root? The root of your file system? Try looking at this program with `elm reactor` or some other server." + ); + + case 2: + var jsonErrorString = fact1; + throw new Error( + "Problem with the flags given to your Elm program on initialization.\n\n" + + jsonErrorString + ); + + case 3: + var portName = fact1; + throw new Error( + "There can only be one port named `" + + portName + + "`, but your program has multiple." + ); + + case 4: + var portName = fact1; + var problem = fact2; + throw new Error( + "Trying to send an unexpected type of value through port `" + + portName + + "`:\n" + + problem + ); + + case 5: + throw new Error( + 'Trying to use `(==)` on functions.\nThere is no way to know if functions are "the same" in the Elm sense.\nRead more about this at https://package.elm-lang.org/packages/elm/core/latest/Basics#== which describes why it is this way and what the better version will look like.' + ); + + case 6: + var moduleName = fact1; + throw new Error( + "Your page is loading multiple Elm scripts with a module named " + + moduleName + + ". Maybe a duplicate script is getting loaded accidentally? If not, rename one of them so I know which is which!" + ); + + case 8: + var moduleName = fact1; + var region = fact2; + var message = fact3; + throw new Error( + "TODO in module `" + + moduleName + + "` " + + _Debug_regionToString(region) + + "\n\n" + + message + ); + + case 9: + var moduleName = fact1; + var region = fact2; + var value = fact3; + var message = fact4; + throw new Error( + "TODO in module `" + + moduleName + + "` from the `case` expression " + + _Debug_regionToString(region) + + "\n\nIt received the following value:\n\n " + + _Debug_toString(value).replace("\n", "\n ") + + "\n\nBut the branch that handles it says:\n\n " + + message.replace("\n", "\n ") + ); + + case 10: + throw new Error("Bug in https://github.com/elm/virtual-dom/issues"); + + case 11: + throw new Error("Cannot perform mod 0. Division by zero error."); + } + } + + function _Debug_regionToString(region) { + if (region.start.line === region.end.line) { + return "on line " + region.start.line; + } + return "on lines " + region.start.line + " through " + region.end.line; + } + + // MATH + + var _Basics_add = F2(function(a, b) { + return a + b; + }); + var _Basics_sub = F2(function(a, b) { + return a - b; + }); + var _Basics_mul = F2(function(a, b) { + return a * b; + }); + var _Basics_fdiv = F2(function(a, b) { + return a / b; + }); + var _Basics_idiv = F2(function(a, b) { + return (a / b) | 0; + }); + var _Basics_pow = F2(Math.pow); + + var _Basics_remainderBy = F2(function(b, a) { + return a % b; + }); + + // https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/divmodnote-letter.pdf + var _Basics_modBy = F2(function(modulus, x) { + var answer = x % modulus; + return modulus === 0 + ? _Debug_crash(11) + : (answer > 0 && modulus < 0) || (answer < 0 && modulus > 0) + ? answer + modulus + : answer; + }); + + // TRIGONOMETRY + + var _Basics_pi = Math.PI; + var _Basics_e = Math.E; + var _Basics_cos = Math.cos; + var _Basics_sin = Math.sin; + var _Basics_tan = Math.tan; + var _Basics_acos = Math.acos; + var _Basics_asin = Math.asin; + var _Basics_atan = Math.atan; + var _Basics_atan2 = F2(Math.atan2); + + // MORE MATH + + function _Basics_toFloat(x) { + return x; + } + function _Basics_truncate(n) { + return n | 0; + } + function _Basics_isInfinite(n) { + return n === Infinity || n === -Infinity; + } + + var _Basics_ceiling = Math.ceil; + var _Basics_floor = Math.floor; + var _Basics_round = Math.round; + var _Basics_sqrt = Math.sqrt; + var _Basics_log = Math.log; + var _Basics_isNaN = isNaN; + + // BOOLEANS + + function _Basics_not(bool) { + return !bool; + } + var _Basics_and = F2(function(a, b) { + return a && b; + }); + var _Basics_or = F2(function(a, b) { + return a || b; + }); + var _Basics_xor = F2(function(a, b) { + return a !== b; + }); + + function _Char_toCode(char) { + var code = char.charCodeAt(0); + if (0xd800 <= code && code <= 0xdbff) { + return (code - 0xd800) * 0x400 + char.charCodeAt(1) - 0xdc00 + 0x10000; + } + return code; + } + + function _Char_fromCode(code) { + return _Utils_chr( + code < 0 || 0x10ffff < code + ? "\uFFFD" + : code <= 0xffff + ? String.fromCharCode(code) + : ((code -= 0x10000), + String.fromCharCode(Math.floor(code / 0x400) + 0xd800) + + String.fromCharCode((code % 0x400) + 0xdc00)) + ); + } + + function _Char_toUpper(char) { + return _Utils_chr(char.toUpperCase()); + } + + function _Char_toLower(char) { + return _Utils_chr(char.toLowerCase()); + } + + function _Char_toLocaleUpper(char) { + return _Utils_chr(char.toLocaleUpperCase()); + } + + function _Char_toLocaleLower(char) { + return _Utils_chr(char.toLocaleLowerCase()); + } + + var _String_cons = F2(function(chr, str) { + return chr + str; + }); + + function _String_uncons(string) { + var word = string.charCodeAt(0); + return word + ? elm$core$Maybe$Just( + 0xd800 <= word && word <= 0xdbff + ? _Utils_Tuple2(_Utils_chr(string[0] + string[1]), string.slice(2)) + : _Utils_Tuple2(_Utils_chr(string[0]), string.slice(1)) + ) + : elm$core$Maybe$Nothing; + } + + var _String_append = F2(function(a, b) { + return a + b; + }); + + function _String_length(str) { + return str.length; + } + + var _String_map = F2(function(func, string) { + var len = string.length; + var array = new Array(len); + var i = 0; + while (i < len) { + var word = string.charCodeAt(i); + if (0xd800 <= word && word <= 0xdbff) { + array[i] = func(_Utils_chr(string[i] + string[i + 1])); + i += 2; + continue; + } + array[i] = func(_Utils_chr(string[i])); + i++; + } + return array.join(""); + }); + + var _String_filter = F2(function(isGood, str) { + var arr = []; + var len = str.length; + var i = 0; + while (i < len) { + var char = str[i]; + var word = str.charCodeAt(i); + i++; + if (0xd800 <= word && word <= 0xdbff) { + char += str[i]; + i++; + } + + if (isGood(_Utils_chr(char))) { + arr.push(char); + } + } + return arr.join(""); + }); + + function _String_reverse(str) { + var len = str.length; + var arr = new Array(len); + var i = 0; + while (i < len) { + var word = str.charCodeAt(i); + if (0xd800 <= word && word <= 0xdbff) { + arr[len - i] = str[i + 1]; + i++; + arr[len - i] = str[i - 1]; + i++; + } else { + arr[len - i] = str[i]; + i++; + } + } + return arr.join(""); + } + + var _String_foldl = F3(function(func, state, string) { + var len = string.length; + var i = 0; + while (i < len) { + var char = string[i]; + var word = string.charCodeAt(i); + i++; + if (0xd800 <= word && word <= 0xdbff) { + char += string[i]; + i++; + } + state = A2(func, _Utils_chr(char), state); + } + return state; + }); + + var _String_foldr = F3(function(func, state, string) { + var i = string.length; + while (i--) { + var char = string[i]; + var word = string.charCodeAt(i); + if (0xdc00 <= word && word <= 0xdfff) { + i--; + char = string[i] + char; + } + state = A2(func, _Utils_chr(char), state); + } + return state; + }); + + var _String_split = F2(function(sep, str) { + return str.split(sep); + }); + + var _String_join = F2(function(sep, strs) { + return strs.join(sep); + }); + + var _String_slice = F3(function(start, end, str) { + return str.slice(start, end); + }); + + function _String_trim(str) { + return str.trim(); + } + + function _String_trimLeft(str) { + return str.replace(/^\s+/, ""); + } + + function _String_trimRight(str) { + return str.replace(/\s+$/, ""); + } + + function _String_words(str) { + return _List_fromArray(str.trim().split(/\s+/g)); + } + + function _String_lines(str) { + return _List_fromArray(str.split(/\r\n|\r|\n/g)); + } + + function _String_toUpper(str) { + return str.toUpperCase(); + } + + function _String_toLower(str) { + return str.toLowerCase(); + } + + var _String_any = F2(function(isGood, string) { + var i = string.length; + while (i--) { + var char = string[i]; + var word = string.charCodeAt(i); + if (0xdc00 <= word && word <= 0xdfff) { + i--; + char = string[i] + char; + } + if (isGood(_Utils_chr(char))) { + return true; + } + } + return false; + }); + + var _String_all = F2(function(isGood, string) { + var i = string.length; + while (i--) { + var char = string[i]; + var word = string.charCodeAt(i); + if (0xdc00 <= word && word <= 0xdfff) { + i--; + char = string[i] + char; + } + if (!isGood(_Utils_chr(char))) { + return false; + } + } + return true; + }); + + var _String_contains = F2(function(sub, str) { + return str.indexOf(sub) > -1; + }); + + var _String_startsWith = F2(function(sub, str) { + return str.indexOf(sub) === 0; + }); + + var _String_endsWith = F2(function(sub, str) { + return ( + str.length >= sub.length && + str.lastIndexOf(sub) === str.length - sub.length + ); + }); + + var _String_indexes = F2(function(sub, str) { + var subLen = sub.length; + + if (subLen < 1) { + return _List_Nil; + } + + var i = 0; + var is = []; + + while ((i = str.indexOf(sub, i)) > -1) { + is.push(i); + i = i + subLen; + } + + return _List_fromArray(is); + }); + + // TO STRING + + function _String_fromNumber(number) { + return number + ""; + } + + // INT CONVERSIONS + + function _String_toInt(str) { + var total = 0; + var code0 = str.charCodeAt(0); + var start = code0 == 0x2b /* + */ || code0 == 0x2d /* - */ ? 1 : 0; + + for (var i = start; i < str.length; ++i) { + var code = str.charCodeAt(i); + if (code < 0x30 || 0x39 < code) { + return elm$core$Maybe$Nothing; + } + total = 10 * total + code - 0x30; + } + + return i == start + ? elm$core$Maybe$Nothing + : elm$core$Maybe$Just(code0 == 0x2d ? -total : total); + } + + // FLOAT CONVERSIONS + + function _String_toFloat(s) { + // check if it is a hex, octal, or binary number + if (s.length === 0 || /[\sxbo]/.test(s)) { + return elm$core$Maybe$Nothing; + } + var n = +s; + // faster isNaN check + return n === n ? elm$core$Maybe$Just(n) : elm$core$Maybe$Nothing; + } + + function _String_fromList(chars) { + return _List_toArray(chars).join(""); + } + + /**/ + function _Json_errorToString(error) { + return elm$json$Json$Decode$errorToString(error); + } + //*/ + + // CORE DECODERS + + function _Json_succeed(msg) { + return { + $: 0, + a: msg + }; + } + + function _Json_fail(msg) { + return { + $: 1, + a: msg + }; + } + + var _Json_decodeInt = { $: 2 }; + var _Json_decodeBool = { $: 3 }; + var _Json_decodeFloat = { $: 4 }; + var _Json_decodeValue = { $: 5 }; + var _Json_decodeString = { $: 6 }; + + function _Json_decodeList(decoder) { + return { $: 7, b: decoder }; + } + function _Json_decodeArray(decoder) { + return { $: 8, b: decoder }; + } + + function _Json_decodeNull(value) { + return { $: 9, c: value }; + } + + var _Json_decodeField = F2(function(field, decoder) { + return { + $: 10, + d: field, + b: decoder + }; + }); + + var _Json_decodeIndex = F2(function(index, decoder) { + return { + $: 11, + e: index, + b: decoder + }; + }); + + function _Json_decodeKeyValuePairs(decoder) { + return { + $: 12, + b: decoder + }; + } + + function _Json_mapMany(f, decoders) { + return { + $: 13, + f: f, + g: decoders + }; + } + + var _Json_andThen = F2(function(callback, decoder) { + return { + $: 14, + b: decoder, + h: callback + }; + }); + + function _Json_oneOf(decoders) { + return { + $: 15, + g: decoders + }; + } + + // DECODING OBJECTS + + var _Json_map1 = F2(function(f, d1) { + return _Json_mapMany(f, [d1]); + }); + + var _Json_map2 = F3(function(f, d1, d2) { + return _Json_mapMany(f, [d1, d2]); + }); + + var _Json_map3 = F4(function(f, d1, d2, d3) { + return _Json_mapMany(f, [d1, d2, d3]); + }); + + var _Json_map4 = F5(function(f, d1, d2, d3, d4) { + return _Json_mapMany(f, [d1, d2, d3, d4]); + }); + + var _Json_map5 = F6(function(f, d1, d2, d3, d4, d5) { + return _Json_mapMany(f, [d1, d2, d3, d4, d5]); + }); + + var _Json_map6 = F7(function(f, d1, d2, d3, d4, d5, d6) { + return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6]); + }); + + var _Json_map7 = F8(function(f, d1, d2, d3, d4, d5, d6, d7) { + return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7]); + }); + + var _Json_map8 = F9(function(f, d1, d2, d3, d4, d5, d6, d7, d8) { + return _Json_mapMany(f, [d1, d2, d3, d4, d5, d6, d7, d8]); + }); + + // DECODE + + var _Json_runOnString = F2(function(decoder, string) { + try { + var value = JSON.parse(string); + return _Json_runHelp(decoder, value); + } catch (e) { + return elm$core$Result$Err( + A2( + elm$json$Json$Decode$Failure, + "This is not valid JSON! " + e.message, + _Json_wrap(string) + ) + ); + } + }); + + var _Json_run = F2(function(decoder, value) { + return _Json_runHelp(decoder, _Json_unwrap(value)); + }); + + function _Json_runHelp(decoder, value) { + switch (decoder.$) { + case 3: + return typeof value === "boolean" + ? elm$core$Result$Ok(value) + : _Json_expecting("a BOOL", value); + + case 2: + if (typeof value !== "number") { + return _Json_expecting("an INT", value); + } + + if ( + -2147483647 < value && + value < 2147483647 && + (value | 0) === value + ) { + return elm$core$Result$Ok(value); + } + + if (isFinite(value) && !(value % 1)) { + return elm$core$Result$Ok(value); + } + + return _Json_expecting("an INT", value); + + case 4: + return typeof value === "number" + ? elm$core$Result$Ok(value) + : _Json_expecting("a FLOAT", value); + + case 6: + return typeof value === "string" + ? elm$core$Result$Ok(value) + : value instanceof String + ? elm$core$Result$Ok(value + "") + : _Json_expecting("a STRING", value); + + case 9: + return value === null + ? elm$core$Result$Ok(decoder.c) + : _Json_expecting("null", value); + + case 5: + return elm$core$Result$Ok(_Json_wrap(value)); + + case 7: + if (!Array.isArray(value)) { + return _Json_expecting("a LIST", value); + } + return _Json_runArrayDecoder(decoder.b, value, _List_fromArray); + + case 8: + if (!Array.isArray(value)) { + return _Json_expecting("an ARRAY", value); + } + return _Json_runArrayDecoder(decoder.b, value, _Json_toElmArray); + + case 10: + var field = decoder.d; + if (typeof value !== "object" || value === null || !(field in value)) { + return _Json_expecting( + "an OBJECT with a field named `" + field + "`", + value + ); + } + var result = _Json_runHelp(decoder.b, value[field]); + return elm$core$Result$isOk(result) + ? result + : elm$core$Result$Err( + A2(elm$json$Json$Decode$Field, field, result.a) + ); + + case 11: + var index = decoder.e; + if (!Array.isArray(value)) { + return _Json_expecting("an ARRAY", value); + } + if (index >= value.length) { + return _Json_expecting( + "a LONGER array. Need index " + + index + + " but only see " + + value.length + + " entries", + value + ); + } + var result = _Json_runHelp(decoder.b, value[index]); + return elm$core$Result$isOk(result) + ? result + : elm$core$Result$Err( + A2(elm$json$Json$Decode$Index, index, result.a) + ); + + case 12: + if ( + typeof value !== "object" || + value === null || + Array.isArray(value) + ) { + return _Json_expecting("an OBJECT", value); + } + + var keyValuePairs = _List_Nil; + // TODO test perf of Object.keys and switch when support is good enough + for (var key in value) { + if (value.hasOwnProperty(key)) { + var result = _Json_runHelp(decoder.b, value[key]); + if (!elm$core$Result$isOk(result)) { + return elm$core$Result$Err( + A2(elm$json$Json$Decode$Field, key, result.a) + ); + } + keyValuePairs = _List_Cons( + _Utils_Tuple2(key, result.a), + keyValuePairs + ); + } + } + return elm$core$Result$Ok(elm$core$List$reverse(keyValuePairs)); + + case 13: + var answer = decoder.f; + var decoders = decoder.g; + for (var i = 0; i < decoders.length; i++) { + var result = _Json_runHelp(decoders[i], value); + if (!elm$core$Result$isOk(result)) { + return result; + } + answer = answer(result.a); + } + return elm$core$Result$Ok(answer); + + case 14: + var result = _Json_runHelp(decoder.b, value); + return !elm$core$Result$isOk(result) + ? result + : _Json_runHelp(decoder.h(result.a), value); + + case 15: + var errors = _List_Nil; + for ( + var temp = decoder.g; + temp.b; + temp = temp.b // WHILE_CONS + ) { + var result = _Json_runHelp(temp.a, value); + if (elm$core$Result$isOk(result)) { + return result; + } + errors = _List_Cons(result.a, errors); + } + return elm$core$Result$Err( + elm$json$Json$Decode$OneOf(elm$core$List$reverse(errors)) + ); + + case 1: + return elm$core$Result$Err( + A2(elm$json$Json$Decode$Failure, decoder.a, _Json_wrap(value)) + ); + + case 0: + return elm$core$Result$Ok(decoder.a); + } + } + + function _Json_runArrayDecoder(decoder, value, toElmValue) { + var len = value.length; + var array = new Array(len); + for (var i = 0; i < len; i++) { + var result = _Json_runHelp(decoder, value[i]); + if (!elm$core$Result$isOk(result)) { + return elm$core$Result$Err(A2(elm$json$Json$Decode$Index, i, result.a)); + } + array[i] = result.a; + } + return elm$core$Result$Ok(toElmValue(array)); + } + + function _Json_toElmArray(array) { + return A2(elm$core$Array$initialize, array.length, function(i) { + return array[i]; + }); + } + + function _Json_expecting(type, value) { + return elm$core$Result$Err( + A2(elm$json$Json$Decode$Failure, "Expecting " + type, _Json_wrap(value)) + ); + } + + // EQUALITY + + function _Json_equality(x, y) { + if (x === y) { + return true; + } + + if (x.$ !== y.$) { + return false; + } + + switch (x.$) { + case 0: + case 1: + return x.a === y.a; + + case 3: + case 2: + case 4: + case 6: + case 5: + return true; + + case 9: + return x.c === y.c; + + case 7: + case 8: + case 12: + return _Json_equality(x.b, y.b); + + case 10: + return x.d === y.d && _Json_equality(x.b, y.b); + + case 11: + return x.e === y.e && _Json_equality(x.b, y.b); + + case 13: + return x.f === y.f && _Json_listEquality(x.g, y.g); + + case 14: + return x.h === y.h && _Json_equality(x.b, y.b); + + case 15: + return _Json_listEquality(x.g, y.g); + } + } + + function _Json_listEquality(aDecoders, bDecoders) { + var len = aDecoders.length; + if (len !== bDecoders.length) { + return false; + } + for (var i = 0; i < len; i++) { + if (!_Json_equality(aDecoders[i], bDecoders[i])) { + return false; + } + } + return true; + } + + // ENCODE + + var _Json_encode = F2(function(indentLevel, value) { + return JSON.stringify(_Json_unwrap(value), null, indentLevel) + ""; + }); + + function _Json_wrap(value) { + return { $: 0, a: value }; + } + function _Json_unwrap(value) { + return value.a; + } + + function _Json_wrap_UNUSED(value) { + return value; + } + function _Json_unwrap_UNUSED(value) { + return value; + } + + function _Json_emptyArray() { + return []; + } + function _Json_emptyObject() { + return {}; + } + + var _Json_addField = F3(function(key, value, object) { + object[key] = _Json_unwrap(value); + return object; + }); + + function _Json_addEntry(func) { + return F2(function(entry, array) { + array.push(_Json_unwrap(func(entry))); + return array; + }); + } + + var _Json_encodeNull = _Json_wrap(null); + + // TASKS + + function _Scheduler_succeed(value) { + return { + $: 0, + a: value + }; + } + + function _Scheduler_fail(error) { + return { + $: 1, + a: error + }; + } + + function _Scheduler_binding(callback) { + return { + $: 2, + b: callback, + c: null + }; + } + + var _Scheduler_andThen = F2(function(callback, task) { + return { + $: 3, + b: callback, + d: task + }; + }); + + var _Scheduler_onError = F2(function(callback, task) { + return { + $: 4, + b: callback, + d: task + }; + }); + + function _Scheduler_receive(callback) { + return { + $: 5, + b: callback + }; + } + + // PROCESSES + + var _Scheduler_guid = 0; + + function _Scheduler_rawSpawn(task) { + var proc = { + $: 0, + e: _Scheduler_guid++, + f: task, + g: null, + h: [] + }; + + _Scheduler_enqueue(proc); + + return proc; + } + + function _Scheduler_spawn(task) { + return _Scheduler_binding(function(callback) { + callback(_Scheduler_succeed(_Scheduler_rawSpawn(task))); + }); + } + + function _Scheduler_rawSend(proc, msg) { + proc.h.push(msg); + _Scheduler_enqueue(proc); + } + + var _Scheduler_send = F2(function(proc, msg) { + return _Scheduler_binding(function(callback) { + _Scheduler_rawSend(proc, msg); + callback(_Scheduler_succeed(_Utils_Tuple0)); + }); + }); + + function _Scheduler_kill(proc) { + return _Scheduler_binding(function(callback) { + var task = proc.f; + if (task.$ === 2 && task.c) { + task.c(); + } + + proc.f = null; + + callback(_Scheduler_succeed(_Utils_Tuple0)); + }); + } + + /* STEP PROCESSES + +type alias Process = + { $ : tag + , id : unique_id + , root : Task + , stack : null | { $: SUCCEED | FAIL, a: callback, b: stack } + , mailbox : [msg] + } + +*/ + + var _Scheduler_working = false; + var _Scheduler_queue = []; + + function _Scheduler_enqueue(proc) { + _Scheduler_queue.push(proc); + if (_Scheduler_working) { + return; + } + _Scheduler_working = true; + while ((proc = _Scheduler_queue.shift())) { + _Scheduler_step(proc); + } + _Scheduler_working = false; + } + + function _Scheduler_step(proc) { + while (proc.f) { + var rootTag = proc.f.$; + if (rootTag === 0 || rootTag === 1) { + while (proc.g && proc.g.$ !== rootTag) { + proc.g = proc.g.i; + } + if (!proc.g) { + return; + } + proc.f = proc.g.b(proc.f.a); + proc.g = proc.g.i; + } else if (rootTag === 2) { + proc.f.c = proc.f.b(function(newRoot) { + proc.f = newRoot; + _Scheduler_enqueue(proc); + }); + return; + } else if (rootTag === 5) { + if (proc.h.length === 0) { + return; + } + proc.f = proc.f.b(proc.h.shift()); + } // if (rootTag === 3 || rootTag === 4) + else { + proc.g = { + $: rootTag === 3 ? 0 : 1, + b: proc.f.b, + i: proc.g + }; + proc.f = proc.f.d; + } + } + } + + function _Process_sleep(time) { + return _Scheduler_binding(function(callback) { + var id = setTimeout(function() { + callback(_Scheduler_succeed(_Utils_Tuple0)); + }, time); + + return function() { + clearTimeout(id); + }; + }); + } + + // PROGRAMS + + var _Platform_worker = F4(function(impl, flagDecoder, debugMetadata, args) { + return _Platform_initialize( + flagDecoder, + args, + impl.init, + impl.update, + impl.subscriptions, + function() { + return function() {}; + } + ); + }); + + // INITIALIZE A PROGRAM + + function _Platform_initialize( + flagDecoder, + args, + init, + update, + subscriptions, + stepperBuilder + ) { + var result = A2( + _Json_run, + flagDecoder, + _Json_wrap(args ? args["flags"] : undefined) + ); + elm$core$Result$isOk(result) || + _Debug_crash(2 /**/, _Json_errorToString(result.a) /**/); + var managers = {}; + result = init(result.a); + var model = result.a; + var stepper = stepperBuilder(sendToApp, model); + var ports = _Platform_setupEffects(managers, sendToApp); + + function sendToApp(msg, viewMetadata) { + result = A2(update, msg, model); + stepper((model = result.a), viewMetadata); + _Platform_dispatchEffects(managers, result.b, subscriptions(model)); + } + + _Platform_dispatchEffects(managers, result.b, subscriptions(model)); + + return ports ? { ports: ports } : {}; + } + + // TRACK PRELOADS + // + // This is used by code in elm/browser and elm/http + // to register any HTTP requests that are triggered by init. + // + + var _Platform_preload; + + function _Platform_registerPreload(url) { + _Platform_preload.add(url); + } + + // EFFECT MANAGERS + + var _Platform_effectManagers = {}; + + function _Platform_setupEffects(managers, sendToApp) { + var ports; + + // setup all necessary effect managers + for (var key in _Platform_effectManagers) { + var manager = _Platform_effectManagers[key]; + + if (manager.a) { + ports = ports || {}; + ports[key] = manager.a(key, sendToApp); + } + + managers[key] = _Platform_instantiateManager(manager, sendToApp); + } + + return ports; + } + + function _Platform_createManager(init, onEffects, onSelfMsg, cmdMap, subMap) { + return { + b: init, + c: onEffects, + d: onSelfMsg, + e: cmdMap, + f: subMap + }; + } + + function _Platform_instantiateManager(info, sendToApp) { + var router = { + g: sendToApp, + h: undefined + }; + + var onEffects = info.c; + var onSelfMsg = info.d; + var cmdMap = info.e; + var subMap = info.f; + + function loop(state) { + return A2( + _Scheduler_andThen, + loop, + _Scheduler_receive(function(msg) { + var value = msg.a; + + if (msg.$ === 0) { + return A3(onSelfMsg, router, value, state); + } + + return cmdMap && subMap + ? A4(onEffects, router, value.i, value.j, state) + : A3(onEffects, router, cmdMap ? value.i : value.j, state); + }) + ); + } + + return (router.h = _Scheduler_rawSpawn( + A2(_Scheduler_andThen, loop, info.b) + )); + } + + // ROUTING + + var _Platform_sendToApp = F2(function(router, msg) { + return _Scheduler_binding(function(callback) { + router.g(msg); + callback(_Scheduler_succeed(_Utils_Tuple0)); + }); + }); + + var _Platform_sendToSelf = F2(function(router, msg) { + return A2(_Scheduler_send, router.h, { + $: 0, + a: msg + }); + }); + + // BAGS + + function _Platform_leaf(home) { + return function(value) { + return { + $: 1, + k: home, + l: value + }; + }; + } + + function _Platform_batch(list) { + return { + $: 2, + m: list + }; + } + + var _Platform_map = F2(function(tagger, bag) { + return { + $: 3, + n: tagger, + o: bag + }; + }); + + // PIPE BAGS INTO EFFECT MANAGERS + + function _Platform_dispatchEffects(managers, cmdBag, subBag) { + var effectsDict = {}; + _Platform_gatherEffects(true, cmdBag, effectsDict, null); + _Platform_gatherEffects(false, subBag, effectsDict, null); + + for (var home in managers) { + _Scheduler_rawSend(managers[home], { + $: "fx", + a: effectsDict[home] || { i: _List_Nil, j: _List_Nil } + }); + } + } + + function _Platform_gatherEffects(isCmd, bag, effectsDict, taggers) { + switch (bag.$) { + case 1: + var home = bag.k; + var effect = _Platform_toEffect(isCmd, home, taggers, bag.l); + effectsDict[home] = _Platform_insert(isCmd, effect, effectsDict[home]); + return; + + case 2: + for ( + var list = bag.m; + list.b; + list = list.b // WHILE_CONS + ) { + _Platform_gatherEffects(isCmd, list.a, effectsDict, taggers); + } + return; + + case 3: + _Platform_gatherEffects(isCmd, bag.o, effectsDict, { + p: bag.n, + q: taggers + }); + return; + } + } + + function _Platform_toEffect(isCmd, home, taggers, value) { + function applyTaggers(x) { + for (var temp = taggers; temp; temp = temp.q) { + x = temp.p(x); + } + return x; + } + + var map = isCmd + ? _Platform_effectManagers[home].e + : _Platform_effectManagers[home].f; + + return A2(map, applyTaggers, value); + } + + function _Platform_insert(isCmd, newEffect, effects) { + effects = effects || { i: _List_Nil, j: _List_Nil }; + + isCmd + ? (effects.i = _List_Cons(newEffect, effects.i)) + : (effects.j = _List_Cons(newEffect, effects.j)); + + return effects; + } + + // PORTS + + function _Platform_checkPortName(name) { + if (_Platform_effectManagers[name]) { + _Debug_crash(3, name); + } + } + + // OUTGOING PORTS + + function _Platform_outgoingPort(name, converter) { + _Platform_checkPortName(name); + _Platform_effectManagers[name] = { + e: _Platform_outgoingPortMap, + r: converter, + a: _Platform_setupOutgoingPort + }; + return _Platform_leaf(name); + } + + var _Platform_outgoingPortMap = F2(function(tagger, value) { + return value; + }); + + function _Platform_setupOutgoingPort(name) { + var subs = []; + var converter = _Platform_effectManagers[name].r; + + // CREATE MANAGER + + var init = _Process_sleep(0); + + _Platform_effectManagers[name].b = init; + _Platform_effectManagers[name].c = F3(function(router, cmdList, state) { + for ( + ; + cmdList.b; + cmdList = cmdList.b // WHILE_CONS + ) { + // grab a separate reference to subs in case unsubscribe is called + var currentSubs = subs; + var value = _Json_unwrap(converter(cmdList.a)); + for (var i = 0; i < currentSubs.length; i++) { + currentSubs[i](value); + } + } + return init; + }); + + // PUBLIC API + + function subscribe(callback) { + subs.push(callback); + } + + function unsubscribe(callback) { + // copy subs into a new array in case unsubscribe is called within a + // subscribed callback + subs = subs.slice(); + var index = subs.indexOf(callback); + if (index >= 0) { + subs.splice(index, 1); + } + } + + return { + subscribe: subscribe, + unsubscribe: unsubscribe + }; + } + + // INCOMING PORTS + + function _Platform_incomingPort(name, converter) { + _Platform_checkPortName(name); + _Platform_effectManagers[name] = { + f: _Platform_incomingPortMap, + r: converter, + a: _Platform_setupIncomingPort + }; + return _Platform_leaf(name); + } + + var _Platform_incomingPortMap = F2(function(tagger, finalTagger) { + return function(value) { + return tagger(finalTagger(value)); + }; + }); + + function _Platform_setupIncomingPort(name, sendToApp) { + var subs = _List_Nil; + var converter = _Platform_effectManagers[name].r; + + // CREATE MANAGER + + var init = _Scheduler_succeed(null); + + _Platform_effectManagers[name].b = init; + _Platform_effectManagers[name].c = F3(function(router, subList, state) { + subs = subList; + return init; + }); + + // PUBLIC API + + function send(incomingValue) { + var result = A2(_Json_run, converter, _Json_wrap(incomingValue)); + + elm$core$Result$isOk(result) || _Debug_crash(4, name, result.a); + + var value = result.a; + for ( + var temp = subs; + temp.b; + temp = temp.b // WHILE_CONS + ) { + sendToApp(temp.a(value)); + } + } + + return { send: send }; + } + + // EXPORT ELM MODULES + // + // Have DEBUG and PROD versions so that we can (1) give nicer errors in + // debug mode and (2) not pay for the bits needed for that in prod mode. + // + + function _Platform_export_UNUSED(exports) { + scope["Elm"] + ? _Platform_mergeExportsProd(scope["Elm"], exports) + : (scope["Elm"] = exports); + } + + function _Platform_mergeExportsProd(obj, exports) { + for (var name in exports) { + name in obj + ? name == "init" + ? _Debug_crash(6) + : _Platform_mergeExportsProd(obj[name], exports[name]) + : (obj[name] = exports[name]); + } + } + + function _Platform_export(exports) { + scope["Elm"] + ? _Platform_mergeExportsDebug("Elm", scope["Elm"], exports) + : (scope["Elm"] = exports); + } + + function _Platform_mergeExportsDebug(moduleName, obj, exports) { + for (var name in exports) { + name in obj + ? name == "init" + ? _Debug_crash(6, moduleName) + : _Platform_mergeExportsDebug( + moduleName + "." + name, + obj[name], + exports[name] + ) + : (obj[name] = exports[name]); + } + } + + // HELPERS + + var _VirtualDom_divertHrefToApp; + + var _VirtualDom_doc = typeof document !== "undefined" ? document : {}; + + function _VirtualDom_appendChild(parent, child) { + parent.appendChild(child); + } + + var _VirtualDom_init = F4(function( + virtualNode, + flagDecoder, + debugMetadata, + args + ) { + // NOTE: this function needs _Platform_export available to work + + /**_UNUSED/ + var node = args['node']; + //*/ + /**/ + var node = args && args["node"] ? args["node"] : _Debug_crash(0); + //*/ + + node.parentNode.replaceChild( + _VirtualDom_render(virtualNode, function() {}), + node + ); + + return {}; + }); + + // TEXT + + function _VirtualDom_text(string) { + return { + $: 0, + a: string + }; + } + + // NODE + + var _VirtualDom_nodeNS = F2(function(namespace, tag) { + return F2(function(factList, kidList) { + for ( + var kids = [], descendantsCount = 0; + kidList.b; + kidList = kidList.b // WHILE_CONS + ) { + var kid = kidList.a; + descendantsCount += kid.b || 0; + kids.push(kid); + } + descendantsCount += kids.length; + + return { + $: 1, + c: tag, + d: _VirtualDom_organizeFacts(factList), + e: kids, + f: namespace, + b: descendantsCount + }; + }); + }); + + var _VirtualDom_node = _VirtualDom_nodeNS(undefined); + + // KEYED NODE + + var _VirtualDom_keyedNodeNS = F2(function(namespace, tag) { + return F2(function(factList, kidList) { + for ( + var kids = [], descendantsCount = 0; + kidList.b; + kidList = kidList.b // WHILE_CONS + ) { + var kid = kidList.a; + descendantsCount += kid.b.b || 0; + kids.push(kid); + } + descendantsCount += kids.length; + + return { + $: 2, + c: tag, + d: _VirtualDom_organizeFacts(factList), + e: kids, + f: namespace, + b: descendantsCount + }; + }); + }); + + var _VirtualDom_keyedNode = _VirtualDom_keyedNodeNS(undefined); + + // CUSTOM + + function _VirtualDom_custom(factList, model, render, diff) { + return { + $: 3, + d: _VirtualDom_organizeFacts(factList), + g: model, + h: render, + i: diff + }; + } + + // MAP + + var _VirtualDom_map = F2(function(tagger, node) { + return { + $: 4, + j: tagger, + k: node, + b: 1 + (node.b || 0) + }; + }); + + // LAZY + + function _VirtualDom_thunk(refs, thunk) { + return { + $: 5, + l: refs, + m: thunk, + k: undefined + }; + } + + var _VirtualDom_lazy = F2(function(func, a) { + return _VirtualDom_thunk([func, a], function() { + return func(a); + }); + }); + + var _VirtualDom_lazy2 = F3(function(func, a, b) { + return _VirtualDom_thunk([func, a, b], function() { + return A2(func, a, b); + }); + }); + + var _VirtualDom_lazy3 = F4(function(func, a, b, c) { + return _VirtualDom_thunk([func, a, b, c], function() { + return A3(func, a, b, c); + }); + }); + + var _VirtualDom_lazy4 = F5(function(func, a, b, c, d) { + return _VirtualDom_thunk([func, a, b, c, d], function() { + return A4(func, a, b, c, d); + }); + }); + + var _VirtualDom_lazy5 = F6(function(func, a, b, c, d, e) { + return _VirtualDom_thunk([func, a, b, c, d, e], function() { + return A5(func, a, b, c, d, e); + }); + }); + + var _VirtualDom_lazy6 = F7(function(func, a, b, c, d, e, f) { + return _VirtualDom_thunk([func, a, b, c, d, e, f], function() { + return A6(func, a, b, c, d, e, f); + }); + }); + + var _VirtualDom_lazy7 = F8(function(func, a, b, c, d, e, f, g) { + return _VirtualDom_thunk([func, a, b, c, d, e, f, g], function() { + return A7(func, a, b, c, d, e, f, g); + }); + }); + + var _VirtualDom_lazy8 = F9(function(func, a, b, c, d, e, f, g, h) { + return _VirtualDom_thunk([func, a, b, c, d, e, f, g, h], function() { + return A8(func, a, b, c, d, e, f, g, h); + }); + }); + + // FACTS + + var _VirtualDom_on = F2(function(key, handler) { + return { + $: "a0", + n: key, + o: handler + }; + }); + var _VirtualDom_style = F2(function(key, value) { + return { + $: "a1", + n: key, + o: value + }; + }); + var _VirtualDom_property = F2(function(key, value) { + return { + $: "a2", + n: key, + o: value + }; + }); + var _VirtualDom_attribute = F2(function(key, value) { + return { + $: "a3", + n: key, + o: value + }; + }); + var _VirtualDom_attributeNS = F3(function(namespace, key, value) { + return { + $: "a4", + n: key, + o: { f: namespace, o: value } + }; + }); + + // XSS ATTACK VECTOR CHECKS + + function _VirtualDom_noScript(tag) { + return tag == "script" ? "p" : tag; + } + + function _VirtualDom_noOnOrFormAction(key) { + return /^(on|formAction$)/i.test(key) ? "data-" + key : key; + } + + function _VirtualDom_noInnerHtmlOrFormAction(key) { + return key == "innerHTML" || key == "formAction" ? "data-" + key : key; + } + + function _VirtualDom_noJavaScriptUri_UNUSED(value) { + return /^javascript:/i.test(value.replace(/\s/g, "")) ? "" : value; + } + + function _VirtualDom_noJavaScriptUri(value) { + return /^javascript:/i.test(value.replace(/\s/g, "")) + ? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")' + : value; + } + + function _VirtualDom_noJavaScriptOrHtmlUri_UNUSED(value) { + return /^\s*(javascript:|data:text\/html)/i.test(value) ? "" : value; + } + + function _VirtualDom_noJavaScriptOrHtmlUri(value) { + return /^\s*(javascript:|data:text\/html)/i.test(value) + ? 'javascript:alert("This is an XSS vector. Please use ports or web components instead.")' + : value; + } + + // MAP FACTS + + var _VirtualDom_mapAttribute = F2(function(func, attr) { + return attr.$ === "a0" + ? A2(_VirtualDom_on, attr.n, _VirtualDom_mapHandler(func, attr.o)) + : attr; + }); + + function _VirtualDom_mapHandler(func, handler) { + var tag = elm$virtual_dom$VirtualDom$toHandlerInt(handler); + + // 0 = Normal + // 1 = MayStopPropagation + // 2 = MayPreventDefault + // 3 = Custom + + return { + $: handler.$, + a: !tag + ? A2(elm$json$Json$Decode$map, func, handler.a) + : A3( + elm$json$Json$Decode$map2, + tag < 3 ? _VirtualDom_mapEventTuple : _VirtualDom_mapEventRecord, + elm$json$Json$Decode$succeed(func), + handler.a + ) + }; + } + + var _VirtualDom_mapEventTuple = F2(function(func, tuple) { + return _Utils_Tuple2(func(tuple.a), tuple.b); + }); + + var _VirtualDom_mapEventRecord = F2(function(func, record) { + return { + message: func(record.message), + stopPropagation: record.stopPropagation, + preventDefault: record.preventDefault + }; + }); + + // ORGANIZE FACTS + + function _VirtualDom_organizeFacts(factList) { + for ( + var facts = {}; + factList.b; + factList = factList.b // WHILE_CONS + ) { + var entry = factList.a; + + var tag = entry.$; + var key = entry.n; + var value = entry.o; + + if (tag === "a2") { + key === "className" + ? _VirtualDom_addClass(facts, key, _Json_unwrap(value)) + : (facts[key] = _Json_unwrap(value)); + + continue; + } + + var subFacts = facts[tag] || (facts[tag] = {}); + tag === "a3" && key === "class" + ? _VirtualDom_addClass(subFacts, key, value) + : (subFacts[key] = value); + } + + return facts; + } + + function _VirtualDom_addClass(object, key, newClass) { + var classes = object[key]; + object[key] = classes ? classes + " " + newClass : newClass; + } + + // RENDER + + function _VirtualDom_render(vNode, eventNode) { + var tag = vNode.$; + + if (tag === 5) { + return _VirtualDom_render(vNode.k || (vNode.k = vNode.m()), eventNode); + } + + if (tag === 0) { + return _VirtualDom_doc.createTextNode(vNode.a); + } + + if (tag === 4) { + var subNode = vNode.k; + var tagger = vNode.j; + + while (subNode.$ === 4) { + typeof tagger !== "object" + ? (tagger = [tagger, subNode.j]) + : tagger.push(subNode.j); + + subNode = subNode.k; + } + + var subEventRoot = { j: tagger, p: eventNode }; + var domNode = _VirtualDom_render(subNode, subEventRoot); + domNode.elm_event_node_ref = subEventRoot; + return domNode; + } + + if (tag === 3) { + var domNode = vNode.h(vNode.g); + _VirtualDom_applyFacts(domNode, eventNode, vNode.d); + return domNode; + } + + // at this point `tag` must be 1 or 2 + + var domNode = vNode.f + ? _VirtualDom_doc.createElementNS(vNode.f, vNode.c) + : _VirtualDom_doc.createElement(vNode.c); + + if (_VirtualDom_divertHrefToApp && vNode.c == "a") { + domNode.addEventListener("click", _VirtualDom_divertHrefToApp(domNode)); + } + + _VirtualDom_applyFacts(domNode, eventNode, vNode.d); + + for (var kids = vNode.e, i = 0; i < kids.length; i++) { + _VirtualDom_appendChild( + domNode, + _VirtualDom_render(tag === 1 ? kids[i] : kids[i].b, eventNode) + ); + } + + return domNode; + } + + // APPLY FACTS + + function _VirtualDom_applyFacts(domNode, eventNode, facts) { + for (var key in facts) { + var value = facts[key]; + + key === "a1" + ? _VirtualDom_applyStyles(domNode, value) + : key === "a0" + ? _VirtualDom_applyEvents(domNode, eventNode, value) + : key === "a3" + ? _VirtualDom_applyAttrs(domNode, value) + : key === "a4" + ? _VirtualDom_applyAttrsNS(domNode, value) + : (key !== "value" || + key !== "checked" || + domNode[key] !== value) && + (domNode[key] = value); + } + } + + // APPLY STYLES + + function _VirtualDom_applyStyles(domNode, styles) { + var domNodeStyle = domNode.style; + + for (var key in styles) { + domNodeStyle[key] = styles[key]; + } + } + + // APPLY ATTRS + + function _VirtualDom_applyAttrs(domNode, attrs) { + for (var key in attrs) { + var value = attrs[key]; + value ? domNode.setAttribute(key, value) : domNode.removeAttribute(key); + } + } + + // APPLY NAMESPACED ATTRS + + function _VirtualDom_applyAttrsNS(domNode, nsAttrs) { + for (var key in nsAttrs) { + var pair = nsAttrs[key]; + var namespace = pair.f; + var value = pair.o; + + value + ? domNode.setAttributeNS(namespace, key, value) + : domNode.removeAttributeNS(namespace, key); + } + } + + // APPLY EVENTS + + function _VirtualDom_applyEvents(domNode, eventNode, events) { + var allCallbacks = domNode.elmFs || (domNode.elmFs = {}); + + for (var key in events) { + var newHandler = events[key]; + var oldCallback = allCallbacks[key]; + + if (!newHandler) { + domNode.removeEventListener(key, oldCallback); + allCallbacks[key] = undefined; + continue; + } + + if (oldCallback) { + var oldHandler = oldCallback.q; + if (oldHandler.$ === newHandler.$) { + oldCallback.q = newHandler; + continue; + } + domNode.removeEventListener(key, oldCallback); + } + + oldCallback = _VirtualDom_makeCallback(eventNode, newHandler); + domNode.addEventListener( + key, + oldCallback, + _VirtualDom_passiveSupported && { + passive: elm$virtual_dom$VirtualDom$toHandlerInt(newHandler) < 2 + } + ); + allCallbacks[key] = oldCallback; + } + } + + // PASSIVE EVENTS + + var _VirtualDom_passiveSupported; + + try { + window.addEventListener( + "t", + null, + Object.defineProperty({}, "passive", { + get: function() { + _VirtualDom_passiveSupported = true; + } + }) + ); + } catch (e) {} + + // EVENT HANDLERS + + function _VirtualDom_makeCallback(eventNode, initialHandler) { + function callback(event) { + var handler = callback.q; + var result = _Json_runHelp(handler.a, event); + + if (!elm$core$Result$isOk(result)) { + return; + } + + var tag = elm$virtual_dom$VirtualDom$toHandlerInt(handler); + + // 0 = Normal + // 1 = MayStopPropagation + // 2 = MayPreventDefault + // 3 = Custom + + var value = result.a; + var message = !tag ? value : tag < 3 ? value.a : value.message; + var stopPropagation = + tag == 1 ? value.b : tag == 3 && value.stopPropagation; + var currentEventNode = (stopPropagation && event.stopPropagation(), + (tag == 2 ? value.b : tag == 3 && value.preventDefault) && + event.preventDefault(), + eventNode); + var tagger; + var i; + while ((tagger = currentEventNode.j)) { + if (typeof tagger == "function") { + message = tagger(message); + } else { + for (var i = tagger.length; i--; ) { + message = tagger[i](message); + } + } + currentEventNode = currentEventNode.p; + } + currentEventNode(message, stopPropagation); // stopPropagation implies isSync + } + + callback.q = initialHandler; + + return callback; + } + + function _VirtualDom_equalEvents(x, y) { + return x.$ == y.$ && _Json_equality(x.a, y.a); + } + + // DIFF + + // TODO: Should we do patches like in iOS? + // + // type Patch + // = At Int Patch + // | Batch (List Patch) + // | Change ... + // + // How could it not be better? + // + function _VirtualDom_diff(x, y) { + var patches = []; + _VirtualDom_diffHelp(x, y, patches, 0); + return patches; + } + + function _VirtualDom_pushPatch(patches, type, index, data) { + var patch = { + $: type, + r: index, + s: data, + t: undefined, + u: undefined + }; + patches.push(patch); + return patch; + } + + function _VirtualDom_diffHelp(x, y, patches, index) { + if (x === y) { + return; + } + + var xType = x.$; + var yType = y.$; + + // Bail if you run into different types of nodes. Implies that the + // structure has changed significantly and it's not worth a diff. + if (xType !== yType) { + if (xType === 1 && yType === 2) { + y = _VirtualDom_dekey(y); + yType = 1; + } else { + _VirtualDom_pushPatch(patches, 0, index, y); + return; + } + } + + // Now we know that both nodes are the same $. + switch (yType) { + case 5: + var xRefs = x.l; + var yRefs = y.l; + var i = xRefs.length; + var same = i === yRefs.length; + while (same && i--) { + same = xRefs[i] === yRefs[i]; + } + if (same) { + y.k = x.k; + return; + } + y.k = y.m(); + var subPatches = []; + _VirtualDom_diffHelp(x.k, y.k, subPatches, 0); + subPatches.length > 0 && + _VirtualDom_pushPatch(patches, 1, index, subPatches); + return; + + case 4: + // gather nested taggers + var xTaggers = x.j; + var yTaggers = y.j; + var nesting = false; + + var xSubNode = x.k; + while (xSubNode.$ === 4) { + nesting = true; + + typeof xTaggers !== "object" + ? (xTaggers = [xTaggers, xSubNode.j]) + : xTaggers.push(xSubNode.j); + + xSubNode = xSubNode.k; + } + + var ySubNode = y.k; + while (ySubNode.$ === 4) { + nesting = true; + + typeof yTaggers !== "object" + ? (yTaggers = [yTaggers, ySubNode.j]) + : yTaggers.push(ySubNode.j); + + ySubNode = ySubNode.k; + } + + // Just bail if different numbers of taggers. This implies the + // structure of the virtual DOM has changed. + if (nesting && xTaggers.length !== yTaggers.length) { + _VirtualDom_pushPatch(patches, 0, index, y); + return; + } + + // check if taggers are "the same" + if ( + nesting + ? !_VirtualDom_pairwiseRefEqual(xTaggers, yTaggers) + : xTaggers !== yTaggers + ) { + _VirtualDom_pushPatch(patches, 2, index, yTaggers); + } + + // diff everything below the taggers + _VirtualDom_diffHelp(xSubNode, ySubNode, patches, index + 1); + return; + + case 0: + if (x.a !== y.a) { + _VirtualDom_pushPatch(patches, 3, index, y.a); + } + return; + + case 1: + _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKids); + return; + + case 2: + _VirtualDom_diffNodes(x, y, patches, index, _VirtualDom_diffKeyedKids); + return; + + case 3: + if (x.h !== y.h) { + _VirtualDom_pushPatch(patches, 0, index, y); + return; + } + + var factsDiff = _VirtualDom_diffFacts(x.d, y.d); + factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff); + + var patch = y.i(x.g, y.g); + patch && _VirtualDom_pushPatch(patches, 5, index, patch); + + return; + } + } + + // assumes the incoming arrays are the same length + function _VirtualDom_pairwiseRefEqual(as, bs) { + for (var i = 0; i < as.length; i++) { + if (as[i] !== bs[i]) { + return false; + } + } + + return true; + } + + function _VirtualDom_diffNodes(x, y, patches, index, diffKids) { + // Bail if obvious indicators have changed. Implies more serious + // structural changes such that it's not worth it to diff. + if (x.c !== y.c || x.f !== y.f) { + _VirtualDom_pushPatch(patches, 0, index, y); + return; + } + + var factsDiff = _VirtualDom_diffFacts(x.d, y.d); + factsDiff && _VirtualDom_pushPatch(patches, 4, index, factsDiff); + + diffKids(x, y, patches, index); + } + + // DIFF FACTS + + // TODO Instead of creating a new diff object, it's possible to just test if + // there *is* a diff. During the actual patch, do the diff again and make the + // modifications directly. This way, there's no new allocations. Worth it? + function _VirtualDom_diffFacts(x, y, category) { + var diff; + + // look for changes and removals + for (var xKey in x) { + if (xKey === "a1" || xKey === "a0" || xKey === "a3" || xKey === "a4") { + var subDiff = _VirtualDom_diffFacts(x[xKey], y[xKey] || {}, xKey); + if (subDiff) { + diff = diff || {}; + diff[xKey] = subDiff; + } + continue; + } + + // remove if not in the new facts + if (!(xKey in y)) { + diff = diff || {}; + diff[xKey] = !category + ? typeof x[xKey] === "string" + ? "" + : null + : category === "a1" + ? "" + : category === "a0" || category === "a3" + ? undefined + : { f: x[xKey].f, o: undefined }; + + continue; + } + + var xValue = x[xKey]; + var yValue = y[xKey]; + + // reference equal, so don't worry about it + if ( + (xValue === yValue && xKey !== "value" && xKey !== "checked") || + (category === "a0" && _VirtualDom_equalEvents(xValue, yValue)) + ) { + continue; + } + + diff = diff || {}; + diff[xKey] = yValue; + } + + // add new stuff + for (var yKey in y) { + if (!(yKey in x)) { + diff = diff || {}; + diff[yKey] = y[yKey]; + } + } + + return diff; + } + + // DIFF KIDS + + function _VirtualDom_diffKids(xParent, yParent, patches, index) { + var xKids = xParent.e; + var yKids = yParent.e; + + var xLen = xKids.length; + var yLen = yKids.length; + + // FIGURE OUT IF THERE ARE INSERTS OR REMOVALS + + if (xLen > yLen) { + _VirtualDom_pushPatch(patches, 6, index, { + v: yLen, + i: xLen - yLen + }); + } else if (xLen < yLen) { + _VirtualDom_pushPatch(patches, 7, index, { + v: xLen, + e: yKids + }); + } + + // PAIRWISE DIFF EVERYTHING ELSE + + for (var minLen = xLen < yLen ? xLen : yLen, i = 0; i < minLen; i++) { + var xKid = xKids[i]; + _VirtualDom_diffHelp(xKid, yKids[i], patches, ++index); + index += xKid.b || 0; + } + } + + // KEYED DIFF + + function _VirtualDom_diffKeyedKids(xParent, yParent, patches, rootIndex) { + var localPatches = []; + + var changes = {}; // Dict String Entry + var inserts = []; // Array { index : Int, entry : Entry } + // type Entry = { tag : String, vnode : VNode, index : Int, data : _ } + + var xKids = xParent.e; + var yKids = yParent.e; + var xLen = xKids.length; + var yLen = yKids.length; + var xIndex = 0; + var yIndex = 0; + + var index = rootIndex; + + while (xIndex < xLen && yIndex < yLen) { + var x = xKids[xIndex]; + var y = yKids[yIndex]; + + var xKey = x.a; + var yKey = y.a; + var xNode = x.b; + var yNode = y.b; + + // check if keys match + + if (xKey === yKey) { + index++; + _VirtualDom_diffHelp(xNode, yNode, localPatches, index); + index += xNode.b || 0; + + xIndex++; + yIndex++; + continue; + } + + // look ahead 1 to detect insertions and removals. + + var xNext = xKids[xIndex + 1]; + var yNext = yKids[yIndex + 1]; + + if (xNext) { + var xNextKey = xNext.a; + var xNextNode = xNext.b; + var oldMatch = yKey === xNextKey; + } + + if (yNext) { + var yNextKey = yNext.a; + var yNextNode = yNext.b; + var newMatch = xKey === yNextKey; + } + + // swap x and y + if (newMatch && oldMatch) { + index++; + _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index); + _VirtualDom_insertNode( + changes, + localPatches, + xKey, + yNode, + yIndex, + inserts + ); + index += xNode.b || 0; + + index++; + _VirtualDom_removeNode(changes, localPatches, xKey, xNextNode, index); + index += xNextNode.b || 0; + + xIndex += 2; + yIndex += 2; + continue; + } + + // insert y + if (newMatch) { + index++; + _VirtualDom_insertNode( + changes, + localPatches, + yKey, + yNode, + yIndex, + inserts + ); + _VirtualDom_diffHelp(xNode, yNextNode, localPatches, index); + index += xNode.b || 0; + + xIndex += 1; + yIndex += 2; + continue; + } + + // remove x + if (oldMatch) { + index++; + _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index); + index += xNode.b || 0; + + index++; + _VirtualDom_diffHelp(xNextNode, yNode, localPatches, index); + index += xNextNode.b || 0; + + xIndex += 2; + yIndex += 1; + continue; + } + + // remove x, insert y + if (xNext && xNextKey === yNextKey) { + index++; + _VirtualDom_removeNode(changes, localPatches, xKey, xNode, index); + _VirtualDom_insertNode( + changes, + localPatches, + yKey, + yNode, + yIndex, + inserts + ); + index += xNode.b || 0; + + index++; + _VirtualDom_diffHelp(xNextNode, yNextNode, localPatches, index); + index += xNextNode.b || 0; + + xIndex += 2; + yIndex += 2; + continue; + } + + break; + } + + // eat up any remaining nodes with removeNode and insertNode + + while (xIndex < xLen) { + index++; + var x = xKids[xIndex]; + var xNode = x.b; + _VirtualDom_removeNode(changes, localPatches, x.a, xNode, index); + index += xNode.b || 0; + xIndex++; + } + + while (yIndex < yLen) { + var endInserts = endInserts || []; + var y = yKids[yIndex]; + _VirtualDom_insertNode( + changes, + localPatches, + y.a, + y.b, + undefined, + endInserts + ); + yIndex++; + } + + if (localPatches.length > 0 || inserts.length > 0 || endInserts) { + _VirtualDom_pushPatch(patches, 8, rootIndex, { + w: localPatches, + x: inserts, + y: endInserts + }); + } + } + + // CHANGES FROM KEYED DIFF + + var _VirtualDom_POSTFIX = "_elmW6BL"; + + function _VirtualDom_insertNode( + changes, + localPatches, + key, + vnode, + yIndex, + inserts + ) { + var entry = changes[key]; + + // never seen this key before + if (!entry) { + entry = { + c: 0, + z: vnode, + r: yIndex, + s: undefined + }; + + inserts.push({ r: yIndex, A: entry }); + changes[key] = entry; + + return; + } + + // this key was removed earlier, a match! + if (entry.c === 1) { + inserts.push({ r: yIndex, A: entry }); + + entry.c = 2; + var subPatches = []; + _VirtualDom_diffHelp(entry.z, vnode, subPatches, entry.r); + entry.r = yIndex; + entry.s.s = { + w: subPatches, + A: entry + }; + + return; + } + + // this key has already been inserted or moved, a duplicate! + _VirtualDom_insertNode( + changes, + localPatches, + key + _VirtualDom_POSTFIX, + vnode, + yIndex, + inserts + ); + } + + function _VirtualDom_removeNode(changes, localPatches, key, vnode, index) { + var entry = changes[key]; + + // never seen this key before + if (!entry) { + var patch = _VirtualDom_pushPatch(localPatches, 9, index, undefined); + + changes[key] = { + c: 1, + z: vnode, + r: index, + s: patch + }; + + return; + } + + // this key was inserted earlier, a match! + if (entry.c === 0) { + entry.c = 2; + var subPatches = []; + _VirtualDom_diffHelp(vnode, entry.z, subPatches, index); + + _VirtualDom_pushPatch(localPatches, 9, index, { + w: subPatches, + A: entry + }); + + return; + } + + // this key has already been removed or moved, a duplicate! + _VirtualDom_removeNode( + changes, + localPatches, + key + _VirtualDom_POSTFIX, + vnode, + index + ); + } + + // ADD DOM NODES + // + // Each DOM node has an "index" assigned in order of traversal. It is important + // to minimize our crawl over the actual DOM, so these indexes (along with the + // descendantsCount of virtual nodes) let us skip touching entire subtrees of + // the DOM if we know there are no patches there. + + function _VirtualDom_addDomNodes(domNode, vNode, patches, eventNode) { + _VirtualDom_addDomNodesHelp( + domNode, + vNode, + patches, + 0, + 0, + vNode.b, + eventNode + ); + } + + // assumes `patches` is non-empty and indexes increase monotonically. + function _VirtualDom_addDomNodesHelp( + domNode, + vNode, + patches, + i, + low, + high, + eventNode + ) { + var patch = patches[i]; + var index = patch.r; + + while (index === low) { + var patchType = patch.$; + + if (patchType === 1) { + _VirtualDom_addDomNodes(domNode, vNode.k, patch.s, eventNode); + } else if (patchType === 8) { + patch.t = domNode; + patch.u = eventNode; + + var subPatches = patch.s.w; + if (subPatches.length > 0) { + _VirtualDom_addDomNodesHelp( + domNode, + vNode, + subPatches, + 0, + low, + high, + eventNode + ); + } + } else if (patchType === 9) { + patch.t = domNode; + patch.u = eventNode; + + var data = patch.s; + if (data) { + data.A.s = domNode; + var subPatches = data.w; + if (subPatches.length > 0) { + _VirtualDom_addDomNodesHelp( + domNode, + vNode, + subPatches, + 0, + low, + high, + eventNode + ); + } + } + } else { + patch.t = domNode; + patch.u = eventNode; + } + + i++; + + if (!(patch = patches[i]) || (index = patch.r) > high) { + return i; + } + } + + var tag = vNode.$; + + if (tag === 4) { + var subNode = vNode.k; + + while (subNode.$ === 4) { + subNode = subNode.k; + } + + return _VirtualDom_addDomNodesHelp( + domNode, + subNode, + patches, + i, + low + 1, + high, + domNode.elm_event_node_ref + ); + } + + // tag must be 1 or 2 at this point + + var vKids = vNode.e; + var childNodes = domNode.childNodes; + for (var j = 0; j < vKids.length; j++) { + low++; + var vKid = tag === 1 ? vKids[j] : vKids[j].b; + var nextLow = low + (vKid.b || 0); + if (low <= index && index <= nextLow) { + i = _VirtualDom_addDomNodesHelp( + childNodes[j], + vKid, + patches, + i, + low, + nextLow, + eventNode + ); + if (!(patch = patches[i]) || (index = patch.r) > high) { + return i; + } + } + low = nextLow; + } + return i; + } + + // APPLY PATCHES + + function _VirtualDom_applyPatches( + rootDomNode, + oldVirtualNode, + patches, + eventNode + ) { + if (patches.length === 0) { + return rootDomNode; + } + + _VirtualDom_addDomNodes(rootDomNode, oldVirtualNode, patches, eventNode); + return _VirtualDom_applyPatchesHelp(rootDomNode, patches); + } + + function _VirtualDom_applyPatchesHelp(rootDomNode, patches) { + for (var i = 0; i < patches.length; i++) { + var patch = patches[i]; + var localDomNode = patch.t; + var newNode = _VirtualDom_applyPatch(localDomNode, patch); + if (localDomNode === rootDomNode) { + rootDomNode = newNode; + } + } + return rootDomNode; + } + + function _VirtualDom_applyPatch(domNode, patch) { + switch (patch.$) { + case 0: + return _VirtualDom_applyPatchRedraw(domNode, patch.s, patch.u); + + case 4: + _VirtualDom_applyFacts(domNode, patch.u, patch.s); + return domNode; + + case 3: + domNode.replaceData(0, domNode.length, patch.s); + return domNode; + + case 1: + return _VirtualDom_applyPatchesHelp(domNode, patch.s); + + case 2: + if (domNode.elm_event_node_ref) { + domNode.elm_event_node_ref.j = patch.s; + } else { + domNode.elm_event_node_ref = { j: patch.s, p: patch.u }; + } + return domNode; + + case 6: + var data = patch.s; + for (var i = 0; i < data.i; i++) { + domNode.removeChild(domNode.childNodes[data.v]); + } + return domNode; + + case 7: + var data = patch.s; + var kids = data.e; + var i = data.v; + var theEnd = domNode.childNodes[i]; + for (; i < kids.length; i++) { + domNode.insertBefore(_VirtualDom_render(kids[i], patch.u), theEnd); + } + return domNode; + + case 9: + var data = patch.s; + if (!data) { + domNode.parentNode.removeChild(domNode); + return domNode; + } + var entry = data.A; + if (typeof entry.r !== "undefined") { + domNode.parentNode.removeChild(domNode); + } + entry.s = _VirtualDom_applyPatchesHelp(domNode, data.w); + return domNode; + + case 8: + return _VirtualDom_applyPatchReorder(domNode, patch); + + case 5: + return patch.s(domNode); + + default: + _Debug_crash(10); // 'Ran into an unknown patch!' + } + } + + function _VirtualDom_applyPatchRedraw(domNode, vNode, eventNode) { + var parentNode = domNode.parentNode; + var newNode = _VirtualDom_render(vNode, eventNode); + + if (!newNode.elm_event_node_ref) { + newNode.elm_event_node_ref = domNode.elm_event_node_ref; + } + + if (parentNode && newNode !== domNode) { + parentNode.replaceChild(newNode, domNode); + } + return newNode; + } + + function _VirtualDom_applyPatchReorder(domNode, patch) { + var data = patch.s; + + // remove end inserts + var frag = _VirtualDom_applyPatchReorderEndInsertsHelp(data.y, patch); + + // removals + domNode = _VirtualDom_applyPatchesHelp(domNode, data.w); + + // inserts + var inserts = data.x; + for (var i = 0; i < inserts.length; i++) { + var insert = inserts[i]; + var entry = insert.A; + var node = entry.c === 2 ? entry.s : _VirtualDom_render(entry.z, patch.u); + domNode.insertBefore(node, domNode.childNodes[insert.r]); + } + + // add end inserts + if (frag) { + _VirtualDom_appendChild(domNode, frag); + } + + return domNode; + } + + function _VirtualDom_applyPatchReorderEndInsertsHelp(endInserts, patch) { + if (!endInserts) { + return; + } + + var frag = _VirtualDom_doc.createDocumentFragment(); + for (var i = 0; i < endInserts.length; i++) { + var insert = endInserts[i]; + var entry = insert.A; + _VirtualDom_appendChild( + frag, + entry.c === 2 ? entry.s : _VirtualDom_render(entry.z, patch.u) + ); + } + return frag; + } + + function _VirtualDom_virtualize(node) { + // TEXT NODES + + if (node.nodeType === 3) { + return _VirtualDom_text(node.textContent); + } + + // WEIRD NODES + + if (node.nodeType !== 1) { + return _VirtualDom_text(""); + } + + // ELEMENT NODES + + var attrList = _List_Nil; + var attrs = node.attributes; + for (var i = attrs.length; i--; ) { + var attr = attrs[i]; + var name = attr.name; + var value = attr.value; + attrList = _List_Cons(A2(_VirtualDom_attribute, name, value), attrList); + } + + var tag = node.tagName.toLowerCase(); + var kidList = _List_Nil; + var kids = node.childNodes; + + for (var i = kids.length; i--; ) { + kidList = _List_Cons(_VirtualDom_virtualize(kids[i]), kidList); + } + return A3(_VirtualDom_node, tag, attrList, kidList); + } + + function _VirtualDom_dekey(keyedNode) { + var keyedKids = keyedNode.e; + var len = keyedKids.length; + var kids = new Array(len); + for (var i = 0; i < len; i++) { + kids[i] = keyedKids[i].b; + } + + return { + $: 1, + c: keyedNode.c, + d: keyedNode.d, + e: kids, + f: keyedNode.f, + b: keyedNode.b + }; + } + + var _Bitwise_and = F2(function(a, b) { + return a & b; + }); + + var _Bitwise_or = F2(function(a, b) { + return a | b; + }); + + var _Bitwise_xor = F2(function(a, b) { + return a ^ b; + }); + + function _Bitwise_complement(a) { + return ~a; + } + + var _Bitwise_shiftLeftBy = F2(function(offset, a) { + return a << offset; + }); + + var _Bitwise_shiftRightBy = F2(function(offset, a) { + return a >> offset; + }); + + var _Bitwise_shiftRightZfBy = F2(function(offset, a) { + return a >>> offset; + }); + + // HELPERS + + function _Debugger_unsafeCoerce(value) { + return value; + } + + // PROGRAMS + + var _Debugger_element = F4(function(impl, flagDecoder, debugMetadata, args) { + return _Platform_initialize( + flagDecoder, + args, + A3( + elm$browser$Debugger$Main$wrapInit, + _Json_wrap(debugMetadata), + _Debugger_popout(), + impl.init + ), + elm$browser$Debugger$Main$wrapUpdate(impl.update), + elm$browser$Debugger$Main$wrapSubs(impl.subscriptions), + function(sendToApp, initialModel) { + var view = impl.view; + var title = _VirtualDom_doc.title; + var domNode = args && args["node"] ? args["node"] : _Debug_crash(0); + var currNode = _VirtualDom_virtualize(domNode); + var currBlocker = elm$browser$Debugger$Main$toBlockerType(initialModel); + var currPopout; + + var cornerNode = _VirtualDom_doc.createElement("div"); + domNode.parentNode.insertBefore(cornerNode, domNode.nextSibling); + var cornerCurr = _VirtualDom_virtualize(cornerNode); + + initialModel.popout.a = sendToApp; + + return _Browser_makeAnimator(initialModel, function(model) { + var nextNode = A2( + _VirtualDom_map, + elm$browser$Debugger$Main$UserMsg, + view(elm$browser$Debugger$Main$getUserModel(model)) + ); + var patches = _VirtualDom_diff(currNode, nextNode); + domNode = _VirtualDom_applyPatches( + domNode, + currNode, + patches, + sendToApp + ); + currNode = nextNode; + + // update blocker + + var nextBlocker = elm$browser$Debugger$Main$toBlockerType(model); + _Debugger_updateBlocker(currBlocker, nextBlocker); + currBlocker = nextBlocker; + + // view corner + + if (!model.popout.b) { + var cornerNext = elm$browser$Debugger$Main$cornerView(model); + var cornerPatches = _VirtualDom_diff(cornerCurr, cornerNext); + cornerNode = _VirtualDom_applyPatches( + cornerNode, + cornerCurr, + cornerPatches, + sendToApp + ); + cornerCurr = cornerNext; + currPopout = undefined; + return; + } + + // view popout + + _VirtualDom_doc = model.popout.b; // SWITCH TO POPOUT DOC + currPopout || (currPopout = _VirtualDom_virtualize(model.popout.b)); + var nextPopout = elm$browser$Debugger$Main$popoutView(model); + var popoutPatches = _VirtualDom_diff(currPopout, nextPopout); + _VirtualDom_applyPatches( + model.popout.b.body, + currPopout, + popoutPatches, + sendToApp + ); + currPopout = nextPopout; + _VirtualDom_doc = document; // SWITCH BACK TO NORMAL DOC + }); + } + ); + }); + + var _Debugger_document = F4(function(impl, flagDecoder, debugMetadata, args) { + return _Platform_initialize( + flagDecoder, + args, + A3( + elm$browser$Debugger$Main$wrapInit, + _Json_wrap(debugMetadata), + _Debugger_popout(), + impl.init + ), + elm$browser$Debugger$Main$wrapUpdate(impl.update), + elm$browser$Debugger$Main$wrapSubs(impl.subscriptions), + function(sendToApp, initialModel) { + var divertHrefToApp = + impl.setup && + impl.setup(function(x) { + return sendToApp(elm$browser$Debugger$Main$UserMsg(x)); + }); + var view = impl.view; + var title = _VirtualDom_doc.title; + var bodyNode = _VirtualDom_doc.body; + var currNode = _VirtualDom_virtualize(bodyNode); + var currBlocker = elm$browser$Debugger$Main$toBlockerType(initialModel); + var currPopout; + + initialModel.popout.a = sendToApp; + + return _Browser_makeAnimator(initialModel, function(model) { + _VirtualDom_divertHrefToApp = divertHrefToApp; + var doc = view(elm$browser$Debugger$Main$getUserModel(model)); + var nextNode = _VirtualDom_node("body")(_List_Nil)( + _Utils_ap( + A2( + elm$core$List$map, + _VirtualDom_map(elm$browser$Debugger$Main$UserMsg), + doc.body + ), + _List_Cons(elm$browser$Debugger$Main$cornerView(model), _List_Nil) + ) + ); + var patches = _VirtualDom_diff(currNode, nextNode); + bodyNode = _VirtualDom_applyPatches( + bodyNode, + currNode, + patches, + sendToApp + ); + currNode = nextNode; + _VirtualDom_divertHrefToApp = 0; + title !== doc.title && (_VirtualDom_doc.title = title = doc.title); + + // update blocker + + var nextBlocker = elm$browser$Debugger$Main$toBlockerType(model); + _Debugger_updateBlocker(currBlocker, nextBlocker); + currBlocker = nextBlocker; + + // view popout + + if (!model.popout.b) { + currPopout = undefined; + return; + } + + _VirtualDom_doc = model.popout.b; // SWITCH TO POPOUT DOC + currPopout || (currPopout = _VirtualDom_virtualize(model.popout.b)); + var nextPopout = elm$browser$Debugger$Main$popoutView(model); + var popoutPatches = _VirtualDom_diff(currPopout, nextPopout); + _VirtualDom_applyPatches( + model.popout.b.body, + currPopout, + popoutPatches, + sendToApp + ); + currPopout = nextPopout; + _VirtualDom_doc = document; // SWITCH BACK TO NORMAL DOC + }); + } + ); + }); + + function _Debugger_popout() { + return { + b: undefined, + a: undefined + }; + } + + function _Debugger_isOpen(popout) { + return !!popout.b; + } + + function _Debugger_open(popout) { + return _Scheduler_binding(function(callback) { + _Debugger_openWindow(popout); + callback(_Scheduler_succeed(_Utils_Tuple0)); + }); + } + + function _Debugger_openWindow(popout) { + var w = 900, + h = 360, + x = screen.width - w, + y = screen.height - h; + var debuggerWindow = window.open( + "", + "", + "width=" + w + ",height=" + h + ",left=" + x + ",top=" + y + ); + var doc = debuggerWindow.document; + doc.title = "Elm Debugger"; + + // handle arrow keys + doc.addEventListener("keydown", function(event) { + event.metaKey && event.which === 82 && window.location.reload(); + event.which === 38 && + (popout.a(elm$browser$Debugger$Main$Up), event.preventDefault()); + event.which === 40 && + (popout.a(elm$browser$Debugger$Main$Down), event.preventDefault()); + }); + + // handle window close + window.addEventListener("unload", close); + debuggerWindow.addEventListener("unload", function() { + popout.b = undefined; + popout.a(elm$browser$Debugger$Main$NoOp); + window.removeEventListener("unload", close); + }); + function close() { + popout.b = undefined; + popout.a(elm$browser$Debugger$Main$NoOp); + debuggerWindow.close(); + } + + // register new window + popout.b = doc; + } + + // SCROLL + + function _Debugger_scroll(popout) { + return _Scheduler_binding(function(callback) { + if (popout.b) { + var msgs = popout.b.getElementById("elm-debugger-sidebar"); + if (msgs) { + msgs.scrollTop = msgs.scrollHeight; + } + } + callback(_Scheduler_succeed(_Utils_Tuple0)); + }); + } + + // UPLOAD + + function _Debugger_upload() { + return _Scheduler_binding(function(callback) { + var element = document.createElement("input"); + element.setAttribute("type", "file"); + element.setAttribute("accept", "text/json"); + element.style.display = "none"; + element.addEventListener("change", function(event) { + var fileReader = new FileReader(); + fileReader.onload = function(e) { + callback(_Scheduler_succeed(e.target.result)); + }; + fileReader.readAsText(event.target.files[0]); + document.body.removeChild(element); + }); + document.body.appendChild(element); + element.click(); + }); + } + + // DOWNLOAD + + var _Debugger_download = F2(function(historyLength, json) { + return _Scheduler_binding(function(callback) { + var fileName = "history-" + historyLength + ".txt"; + var jsonString = JSON.stringify(json); + var mime = "text/plain;charset=utf-8"; + var done = _Scheduler_succeed(_Utils_Tuple0); + + // for IE10+ + if (navigator.msSaveBlob) { + navigator.msSaveBlob(new Blob([jsonString], { type: mime }), fileName); + return callback(done); + } + + // for HTML5 + var element = document.createElement("a"); + element.setAttribute( + "href", + "data:" + mime + "," + encodeURIComponent(jsonString) + ); + element.setAttribute("download", fileName); + element.style.display = "none"; + document.body.appendChild(element); + element.click(); + document.body.removeChild(element); + callback(done); + }); + }); + + // POPOUT CONTENT + + function _Debugger_messageToString(value) { + if (typeof value === "boolean") { + return value ? "True" : "False"; + } + + if (typeof value === "number") { + return value + ""; + } + + if (typeof value === "string") { + return '"' + _Debugger_addSlashes(value, false) + '"'; + } + + if (value instanceof String) { + return "'" + _Debugger_addSlashes(value, true) + "'"; + } + + if (typeof value !== "object" || value === null || !("$" in value)) { + return "…"; + } + + if (typeof value.$ === "number") { + return "…"; + } + + var code = value.$.charCodeAt(0); + if ( + code === 0x23 /* # */ || + /* a */ (0x61 <= code && code <= 0x7a) /* z */ + ) { + return "…"; + } + + if ( + [ + "Array_elm_builtin", + "Set_elm_builtin", + "RBNode_elm_builtin", + "RBEmpty_elm_builtin" + ].indexOf(value.$) >= 0 + ) { + return "…"; + } + + var keys = Object.keys(value); + switch (keys.length) { + case 1: + return value.$; + case 2: + return value.$ + " " + _Debugger_messageToString(value.a); + default: + return ( + value.$ + + " … " + + _Debugger_messageToString(value[keys[keys.length - 1]]) + ); + } + } + + function _Debugger_init(value) { + if (typeof value === "boolean") { + return A3( + elm$browser$Debugger$Expando$Constructor, + elm$core$Maybe$Just(value ? "True" : "False"), + true, + _List_Nil + ); + } + + if (typeof value === "number") { + return elm$browser$Debugger$Expando$Primitive(value + ""); + } + + if (typeof value === "string") { + return elm$browser$Debugger$Expando$S( + '"' + _Debugger_addSlashes(value, false) + '"' + ); + } + + if (value instanceof String) { + return elm$browser$Debugger$Expando$S( + "'" + _Debugger_addSlashes(value, true) + "'" + ); + } + + if (typeof value === "object" && "$" in value) { + var tag = value.$; + + if (tag === "::" || tag === "[]") { + return A3( + elm$browser$Debugger$Expando$Sequence, + elm$browser$Debugger$Expando$ListSeq, + true, + A2(elm$core$List$map, _Debugger_init, value) + ); + } + + if (tag === "Set_elm_builtin") { + return A3( + elm$browser$Debugger$Expando$Sequence, + elm$browser$Debugger$Expando$SetSeq, + true, + A3(elm$core$Set$foldr, _Debugger_initCons, _List_Nil, value) + ); + } + + if (tag === "RBNode_elm_builtin" || tag == "RBEmpty_elm_builtin") { + return A2( + elm$browser$Debugger$Expando$Dictionary, + true, + A3(elm$core$Dict$foldr, _Debugger_initKeyValueCons, _List_Nil, value) + ); + } + + if (tag === "Array_elm_builtin") { + return A3( + elm$browser$Debugger$Expando$Sequence, + elm$browser$Debugger$Expando$ArraySeq, + true, + A3(elm$core$Array$foldr, _Debugger_initCons, _List_Nil, value) + ); + } + + if (typeof tag === "number") { + return elm$browser$Debugger$Expando$Primitive(""); + } + + var char = tag.charCodeAt(0); + if (char === 35 || (65 <= char && char <= 90)) { + var list = _List_Nil; + for (var i in value) { + if (i === "$") continue; + list = _List_Cons(_Debugger_init(value[i]), list); + } + return A3( + elm$browser$Debugger$Expando$Constructor, + char === 35 ? elm$core$Maybe$Nothing : elm$core$Maybe$Just(tag), + true, + elm$core$List$reverse(list) + ); + } + + return elm$browser$Debugger$Expando$Primitive(""); + } + + if (typeof value === "object") { + var dict = elm$core$Dict$empty; + for (var i in value) { + dict = A3(elm$core$Dict$insert, i, _Debugger_init(value[i]), dict); + } + return A2(elm$browser$Debugger$Expando$Record, true, dict); + } + + return elm$browser$Debugger$Expando$Primitive(""); + } + + var _Debugger_initCons = F2(function initConsHelp(value, list) { + return _List_Cons(_Debugger_init(value), list); + }); + + var _Debugger_initKeyValueCons = F3(function(key, value, list) { + return _List_Cons( + _Utils_Tuple2(_Debugger_init(key), _Debugger_init(value)), + list + ); + }); + + function _Debugger_addSlashes(str, isChar) { + var s = str + .replace(/\\/g, "\\\\") + .replace(/\n/g, "\\n") + .replace(/\t/g, "\\t") + .replace(/\r/g, "\\r") + .replace(/\v/g, "\\v") + .replace(/\0/g, "\\0"); + if (isChar) { + return s.replace(/\'/g, "\\'"); + } else { + return s.replace(/\"/g, '\\"'); + } + } + + // BLOCK EVENTS + + function _Debugger_updateBlocker(oldBlocker, newBlocker) { + if (oldBlocker === newBlocker) return; + + var oldEvents = _Debugger_blockerToEvents(oldBlocker); + var newEvents = _Debugger_blockerToEvents(newBlocker); + + // remove old blockers + for (var i = 0; i < oldEvents.length; i++) { + document.removeEventListener(oldEvents[i], _Debugger_blocker, true); + } + + // add new blockers + for (var i = 0; i < newEvents.length; i++) { + document.addEventListener(newEvents[i], _Debugger_blocker, true); + } + } + + function _Debugger_blocker(event) { + if (event.type === "keydown" && event.metaKey && event.which === 82) { + return; + } + + var isScroll = event.type === "scroll" || event.type === "wheel"; + for (var node = event.target; node; node = node.parentNode) { + if ( + isScroll + ? node.id === "elm-debugger-details" + : node.id === "elm-debugger-overlay" + ) { + return; + } + } + + event.stopPropagation(); + event.preventDefault(); + } + + function _Debugger_blockerToEvents(blocker) { + return blocker === elm$browser$Debugger$Overlay$BlockNone + ? [] + : blocker === elm$browser$Debugger$Overlay$BlockMost + ? _Debugger_mostEvents + : _Debugger_allEvents; + } + + var _Debugger_mostEvents = [ + "click", + "dblclick", + "mousemove", + "mouseup", + "mousedown", + "mouseenter", + "mouseleave", + "touchstart", + "touchend", + "touchcancel", + "touchmove", + "pointerdown", + "pointerup", + "pointerover", + "pointerout", + "pointerenter", + "pointerleave", + "pointermove", + "pointercancel", + "dragstart", + "drag", + "dragend", + "dragenter", + "dragover", + "dragleave", + "drop", + "keyup", + "keydown", + "keypress", + "input", + "change", + "focus", + "blur" + ]; + + var _Debugger_allEvents = _Debugger_mostEvents.concat("wheel", "scroll"); + + // ELEMENT + + var _Debugger_element; + + var _Browser_element = + _Debugger_element || + F4(function(impl, flagDecoder, debugMetadata, args) { + return _Platform_initialize( + flagDecoder, + args, + impl.init, + impl.update, + impl.subscriptions, + function(sendToApp, initialModel) { + var view = impl.view; + /**_UNUSED/ + var domNode = args['node']; + //*/ + /**/ + var domNode = args && args["node"] ? args["node"] : _Debug_crash(0); + //*/ + var currNode = _VirtualDom_virtualize(domNode); + + return _Browser_makeAnimator(initialModel, function(model) { + var nextNode = view(model); + var patches = _VirtualDom_diff(currNode, nextNode); + domNode = _VirtualDom_applyPatches( + domNode, + currNode, + patches, + sendToApp + ); + currNode = nextNode; + }); + } + ); + }); + + // DOCUMENT + + var _Debugger_document; + + var _Browser_document = + _Debugger_document || + F4(function(impl, flagDecoder, debugMetadata, args) { + return _Platform_initialize( + flagDecoder, + args, + impl.init, + impl.update, + impl.subscriptions, + function(sendToApp, initialModel) { + var divertHrefToApp = impl.setup && impl.setup(sendToApp); + var view = impl.view; + var title = _VirtualDom_doc.title; + var bodyNode = _VirtualDom_doc.body; + var currNode = _VirtualDom_virtualize(bodyNode); + return _Browser_makeAnimator(initialModel, function(model) { + _VirtualDom_divertHrefToApp = divertHrefToApp; + var doc = view(model); + var nextNode = _VirtualDom_node("body")(_List_Nil)(doc.body); + var patches = _VirtualDom_diff(currNode, nextNode); + bodyNode = _VirtualDom_applyPatches( + bodyNode, + currNode, + patches, + sendToApp + ); + currNode = nextNode; + _VirtualDom_divertHrefToApp = 0; + title !== doc.title && (_VirtualDom_doc.title = title = doc.title); + }); + } + ); + }); + + // ANIMATION + + var _Browser_requestAnimationFrame = + typeof requestAnimationFrame !== "undefined" + ? requestAnimationFrame + : function(callback) { + setTimeout(callback, 1000 / 60); + }; + + function _Browser_makeAnimator(model, draw) { + draw(model); + + var state = 0; + + function updateIfNeeded() { + state = + state === 1 + ? 0 + : (_Browser_requestAnimationFrame(updateIfNeeded), draw(model), 1); + } + + return function(nextModel, isSync) { + model = nextModel; + + isSync + ? (draw(model), state === 2 && (state = 1)) + : (state === 0 && _Browser_requestAnimationFrame(updateIfNeeded), + (state = 2)); + }; + } + + // APPLICATION + + function _Browser_application(impl) { + var onUrlChange = impl.onUrlChange; + var onUrlRequest = impl.onUrlRequest; + var key = function() { + key.a(onUrlChange(_Browser_getUrl())); + }; + + return _Browser_document({ + setup: function(sendToApp) { + key.a = sendToApp; + _Browser_window.addEventListener("popstate", key); + _Browser_window.navigator.userAgent.indexOf("Trident") < 0 || + _Browser_window.addEventListener("hashchange", key); + + return F2(function(domNode, event) { + if ( + !event.ctrlKey && + !event.metaKey && + !event.shiftKey && + event.button < 1 && + !domNode.target && + !domNode.download + ) { + event.preventDefault(); + var href = domNode.href; + var curr = _Browser_getUrl(); + var next = elm$url$Url$fromString(href).a; + sendToApp( + onUrlRequest( + next && + curr.protocol === next.protocol && + curr.host === next.host && + curr.port_.a === next.port_.a + ? elm$browser$Browser$Internal(next) + : elm$browser$Browser$External(href) + ) + ); + } + }); + }, + init: function(flags) { + return A3(impl.init, flags, _Browser_getUrl(), key); + }, + view: impl.view, + update: impl.update, + subscriptions: impl.subscriptions + }); + } + + function _Browser_getUrl() { + return ( + elm$url$Url$fromString(_VirtualDom_doc.location.href).a || _Debug_crash(1) + ); + } + + var _Browser_go = F2(function(key, n) { + return A2( + elm$core$Task$perform, + elm$core$Basics$never, + _Scheduler_binding(function() { + n && history.go(n); + key(); + }) + ); + }); + + var _Browser_pushUrl = F2(function(key, url) { + return A2( + elm$core$Task$perform, + elm$core$Basics$never, + _Scheduler_binding(function() { + history.pushState({}, "", url); + key(); + }) + ); + }); + + var _Browser_replaceUrl = F2(function(key, url) { + return A2( + elm$core$Task$perform, + elm$core$Basics$never, + _Scheduler_binding(function() { + history.replaceState({}, "", url); + key(); + }) + ); + }); + + // GLOBAL EVENTS + + var _Browser_fakeNode = { + addEventListener: function() {}, + removeEventListener: function() {} + }; + var _Browser_doc = + typeof document !== "undefined" ? document : _Browser_fakeNode; + var _Browser_window = + typeof window !== "undefined" ? window : _Browser_fakeNode; + + var _Browser_on = F3(function(node, eventName, sendToSelf) { + return _Scheduler_spawn( + _Scheduler_binding(function(callback) { + function handler(event) { + _Scheduler_rawSpawn(sendToSelf(event)); + } + node.addEventListener( + eventName, + handler, + _VirtualDom_passiveSupported && { passive: true } + ); + return function() { + node.removeEventListener(eventName, handler); + }; + }) + ); + }); + + var _Browser_decodeEvent = F2(function(decoder, event) { + var result = _Json_runHelp(decoder, event); + return elm$core$Result$isOk(result) + ? elm$core$Maybe$Just(result.a) + : elm$core$Maybe$Nothing; + }); + + // PAGE VISIBILITY + + function _Browser_visibilityInfo() { + return typeof _VirtualDom_doc.hidden !== "undefined" + ? { hidden: "hidden", change: "visibilitychange" } + : typeof _VirtualDom_doc.mozHidden !== "undefined" + ? { hidden: "mozHidden", change: "mozvisibilitychange" } + : typeof _VirtualDom_doc.msHidden !== "undefined" + ? { hidden: "msHidden", change: "msvisibilitychange" } + : typeof _VirtualDom_doc.webkitHidden !== "undefined" + ? { hidden: "webkitHidden", change: "webkitvisibilitychange" } + : { hidden: "hidden", change: "visibilitychange" }; + } + + // ANIMATION FRAMES + + function _Browser_rAF() { + return _Scheduler_binding(function(callback) { + var id = requestAnimationFrame(function() { + callback(_Scheduler_succeed(Date.now())); + }); + + return function() { + cancelAnimationFrame(id); + }; + }); + } + + function _Browser_now() { + return _Scheduler_binding(function(callback) { + callback(_Scheduler_succeed(Date.now())); + }); + } + + // DOM STUFF + + function _Browser_withNode(id, doStuff) { + return _Scheduler_binding(function(callback) { + _Browser_requestAnimationFrame(function() { + var node = document.getElementById(id); + callback( + node + ? _Scheduler_succeed(doStuff(node)) + : _Scheduler_fail(elm$browser$Browser$Dom$NotFound(id)) + ); + }); + }); + } + + function _Browser_withWindow(doStuff) { + return _Scheduler_binding(function(callback) { + _Browser_requestAnimationFrame(function() { + callback(_Scheduler_succeed(doStuff())); + }); + }); + } + + // FOCUS and BLUR + + var _Browser_call = F2(function(functionName, id) { + return _Browser_withNode(id, function(node) { + node[functionName](); + return _Utils_Tuple0; + }); + }); + + // WINDOW VIEWPORT + + function _Browser_getViewport() { + return { + scene: _Browser_getScene(), + viewport: { + x: _Browser_window.pageXOffset, + y: _Browser_window.pageYOffset, + width: _Browser_doc.documentElement.clientWidth, + height: _Browser_doc.documentElement.clientHeight + } + }; + } + + function _Browser_getScene() { + var body = _Browser_doc.body; + var elem = _Browser_doc.documentElement; + return { + width: Math.max( + body.scrollWidth, + body.offsetWidth, + elem.scrollWidth, + elem.offsetWidth, + elem.clientWidth + ), + height: Math.max( + body.scrollHeight, + body.offsetHeight, + elem.scrollHeight, + elem.offsetHeight, + elem.clientHeight + ) + }; + } + + var _Browser_setViewport = F2(function(x, y) { + return _Browser_withWindow(function() { + _Browser_window.scroll(x, y); + return _Utils_Tuple0; + }); + }); + + // ELEMENT VIEWPORT + + function _Browser_getViewportOf(id) { + return _Browser_withNode(id, function(node) { + return { + scene: { + width: node.scrollWidth, + height: node.scrollHeight + }, + viewport: { + x: node.scrollLeft, + y: node.scrollTop, + width: node.clientWidth, + height: node.clientHeight + } + }; + }); + } + + var _Browser_setViewportOf = F3(function(id, x, y) { + return _Browser_withNode(id, function(node) { + node.scrollLeft = x; + node.scrollTop = y; + return _Utils_Tuple0; + }); + }); + + // ELEMENT + + function _Browser_getElement(id) { + return _Browser_withNode(id, function(node) { + var rect = node.getBoundingClientRect(); + var x = _Browser_window.pageXOffset; + var y = _Browser_window.pageYOffset; + return { + scene: _Browser_getScene(), + viewport: { + x: x, + y: y, + width: _Browser_doc.documentElement.clientWidth, + height: _Browser_doc.documentElement.clientHeight + }, + element: { + x: x + rect.left, + y: y + rect.top, + width: rect.width, + height: rect.height + } + }; + }); + } + + // LOAD and RELOAD + + function _Browser_reload(skipCache) { + return A2( + elm$core$Task$perform, + elm$core$Basics$never, + _Scheduler_binding(function(callback) { + _VirtualDom_doc.location.reload(skipCache); + }) + ); + } + + function _Browser_load(url) { + return A2( + elm$core$Task$perform, + elm$core$Basics$never, + _Scheduler_binding(function(callback) { + try { + _Browser_window.location = url; + } catch (err) { + // Only Firefox can throw a NS_ERROR_MALFORMED_URI exception here. + // Other browsers reload the page, so let's be consistent about that. + _VirtualDom_doc.location.reload(false); + } + }) + ); + } + + // SEND REQUEST + + var _Http_toTask = F2(function(request, maybeProgress) { + return _Scheduler_binding(function(callback) { + var xhr = new XMLHttpRequest(); + + _Http_configureProgress(xhr, maybeProgress); + + xhr.addEventListener("error", function() { + callback(_Scheduler_fail(elm$http$Http$NetworkError)); + }); + xhr.addEventListener("timeout", function() { + callback(_Scheduler_fail(elm$http$Http$Timeout)); + }); + xhr.addEventListener("load", function() { + callback(_Http_handleResponse(xhr, request.expect.a)); + }); + + try { + xhr.open(request.method, request.url, true); + } catch (e) { + return callback(_Scheduler_fail(elm$http$Http$BadUrl(request.url))); + } + + _Http_configureRequest(xhr, request); + + var body = request.body; + xhr.send( + elm$http$Http$Internal$isStringBody(body) + ? (xhr.setRequestHeader("Content-Type", body.a), body.b) + : body.a + ); + + return function() { + xhr.abort(); + }; + }); + }); + + function _Http_configureProgress(xhr, maybeProgress) { + if (!elm$core$Maybe$isJust(maybeProgress)) { + return; + } + + xhr.addEventListener("progress", function(event) { + if (!event.lengthComputable) { + return; + } + _Scheduler_rawSpawn( + maybeProgress.a({ + bytes: event.loaded, + bytesExpected: event.total + }) + ); + }); + } + + function _Http_configureRequest(xhr, request) { + for ( + var headers = request.headers; + headers.b; + headers = headers.b // WHILE_CONS + ) { + xhr.setRequestHeader(headers.a.a, headers.a.b); + } + + xhr.responseType = request.expect.b; + xhr.withCredentials = request.withCredentials; + + elm$core$Maybe$isJust(request.timeout) && (xhr.timeout = request.timeout.a); + } + + // RESPONSES + + function _Http_handleResponse(xhr, responseToResult) { + var response = _Http_toResponse(xhr); + + if (xhr.status < 200 || 300 <= xhr.status) { + response.body = xhr.responseText; + return _Scheduler_fail(elm$http$Http$BadStatus(response)); + } + + var result = responseToResult(response); + + if (elm$core$Result$isOk(result)) { + return _Scheduler_succeed(result.a); + } else { + response.body = xhr.responseText; + return _Scheduler_fail(A2(elm$http$Http$BadPayload, result.a, response)); + } + } + + function _Http_toResponse(xhr) { + return { + url: xhr.responseURL, + status: { code: xhr.status, message: xhr.statusText }, + headers: _Http_parseHeaders(xhr.getAllResponseHeaders()), + body: xhr.response + }; + } + + function _Http_parseHeaders(rawHeaders) { + var headers = elm$core$Dict$empty; + + if (!rawHeaders) { + return headers; + } + + var headerPairs = rawHeaders.split("\u000d\u000a"); + for (var i = headerPairs.length; i--; ) { + var headerPair = headerPairs[i]; + var index = headerPair.indexOf("\u003a\u0020"); + if (index > 0) { + var key = headerPair.substring(0, index); + var value = headerPair.substring(index + 2); + + headers = A3( + elm$core$Dict$update, + key, + function(oldValue) { + return elm$core$Maybe$Just( + elm$core$Maybe$isJust(oldValue) + ? value + ", " + oldValue.a + : value + ); + }, + headers + ); + } + } + + return headers; + } + + // EXPECTORS + + function _Http_expectStringResponse(responseToResult) { + return { + $: 0, + b: "text", + a: responseToResult + }; + } + + var _Http_mapExpect = F2(function(func, expect) { + return { + $: 0, + b: expect.b, + a: function(response) { + var convertedResponse = expect.a(response); + return A2(elm$core$Result$map, func, convertedResponse); + } + }; + }); + + // BODY + + function _Http_multipart(parts) { + for ( + var formData = new FormData(); + parts.b; + parts = parts.b // WHILE_CONS + ) { + var part = parts.a; + formData.append(part.a, part.b); + } + + return elm$http$Http$Internal$FormDataBody(formData); + } + + // STRINGS + + var _Parser_isSubString = F5(function( + smallString, + offset, + row, + col, + bigString + ) { + var smallLength = smallString.length; + var isGood = offset + smallLength <= bigString.length; + + for (var i = 0; isGood && i < smallLength; ) { + var code = bigString.charCodeAt(offset); + isGood = + smallString[i++] === bigString[offset++] && + (code === 0x000a /* \n */ + ? (row++, (col = 1)) + : (col++, + (code & 0xf800) === 0xd800 + ? smallString[i++] === bigString[offset++] + : 1)); + } + + return _Utils_Tuple3(isGood ? offset : -1, row, col); + }); + + // CHARS + + var _Parser_isSubChar = F3(function(predicate, offset, string) { + return string.length <= offset + ? -1 + : (string.charCodeAt(offset) & 0xf800) === 0xd800 + ? predicate(_Utils_chr(string.substr(offset, 2))) + ? offset + 2 + : -1 + : predicate(_Utils_chr(string[offset])) + ? string[offset] === "\n" + ? -2 + : offset + 1 + : -1; + }); + + var _Parser_isAsciiCode = F3(function(code, offset, string) { + return string.charCodeAt(offset) === code; + }); + + // NUMBERS + + var _Parser_chompBase10 = F2(function(offset, string) { + for (; offset < string.length; offset++) { + var code = string.charCodeAt(offset); + if (code < 0x30 || 0x39 < code) { + return offset; + } + } + return offset; + }); + + var _Parser_consumeBase = F3(function(base, offset, string) { + for (var total = 0; offset < string.length; offset++) { + var digit = string.charCodeAt(offset) - 0x30; + if (digit < 0 || base <= digit) break; + total = base * total + digit; + } + return _Utils_Tuple2(offset, total); + }); + + var _Parser_consumeBase16 = F2(function(offset, string) { + for (var total = 0; offset < string.length; offset++) { + var code = string.charCodeAt(offset); + if (0x30 <= code && code <= 0x39) { + total = 16 * total + code - 0x30; + } else if (0x41 <= code && code <= 0x46) { + total = 16 * total + code - 55; + } else if (0x61 <= code && code <= 0x66) { + total = 16 * total + code - 87; + } else { + break; + } + } + return _Utils_Tuple2(offset, total); + }); + + // FIND STRING + + var _Parser_findSubString = F5(function( + smallString, + offset, + row, + col, + bigString + ) { + var newOffset = bigString.indexOf(smallString, offset); + var target = + newOffset < 0 ? bigString.length : newOffset + smallString.length; + + while (offset < target) { + var code = bigString.charCodeAt(offset++); + code === 0x000a /* \n */ + ? ((col = 1), row++) + : (col++, (code & 0xf800) === 0xd800 && offset++); + } + + return _Utils_Tuple3(newOffset, row, col); + }); + + function _Time_now(millisToPosix) { + return _Scheduler_binding(function(callback) { + callback(_Scheduler_succeed(millisToPosix(Date.now()))); + }); + } + + var _Time_setInterval = F2(function(interval, task) { + return _Scheduler_binding(function(callback) { + var id = setInterval(function() { + _Scheduler_rawSpawn(task); + }, interval); + return function() { + clearInterval(id); + }; + }); + }); + + function _Time_here() { + return _Scheduler_binding(function(callback) { + callback( + _Scheduler_succeed( + A2( + elm$time$Time$customZone, + -new Date().getTimezoneOffset(), + _List_Nil + ) + ) + ); + }); + } + + function _Time_getZoneName() { + return _Scheduler_binding(function(callback) { + try { + var name = elm$time$Time$Name( + Intl.DateTimeFormat().resolvedOptions().timeZone + ); + } catch (e) { + var name = elm$time$Time$Offset(new Date().getTimezoneOffset()); + } + callback(_Scheduler_succeed(name)); + }); + } + + function _Url_percentEncode(string) { + return encodeURIComponent(string); + } + + function _Url_percentDecode(string) { + try { + return elm$core$Maybe$Just(decodeURIComponent(string)); + } catch (e) { + return elm$core$Maybe$Nothing; + } + } + + // VIRTUAL-DOM WIDGETS + + var _Markdown_toHtml = F3(function(options, factList, rawMarkdown) { + return _VirtualDom_custom( + factList, + { + a: options, + b: rawMarkdown + }, + _Markdown_render, + _Markdown_diff + ); + }); + + // WIDGET IMPLEMENTATION + + function _Markdown_render(model) { + return A2(_Markdown_replace, model, _VirtualDom_doc.createElement("div")); + } + + function _Markdown_diff(x, y) { + return x.b === y.b && x.a === y.a ? false : _Markdown_replace(y); + } + + var _Markdown_replace = F2(function(model, div) { + div.innerHTML = _Markdown_marked(model.b, _Markdown_formatOptions(model.a)); + return div; + }); + + // ACTUAL MARKDOWN PARSER + + var _Markdown_marked = (function() { + // catch the `marked` object regardless of the outer environment. + // (ex. a CommonJS module compatible environment.) + // note that this depends on marked's implementation of environment detection. + var module = {}; + var exports = (module.exports = {}); + + /** + * marked - a markdown parser + * Copyright (c) 2011-2014, Christopher Jeffrey. (MIT Licensed) + * https://github.com/chjj/marked + * commit cd2f6f5b7091154c5526e79b5f3bfb4d15995a51 + */ + (function() { + var block = { + newline: /^\n+/, + code: /^( {4}[^\n]+\n*)+/, + fences: noop, + hr: /^( *[-*_]){3,} *(?:\n+|$)/, + heading: /^ *(#{1,6}) *([^\n]+?) *#* *(?:\n+|$)/, + nptable: noop, + lheading: /^([^\n]+)\n *(=|-){2,} *(?:\n+|$)/, + blockquote: /^( *>[^\n]+(\n(?!def)[^\n]+)*\n*)+/, + list: /^( *)(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?!\1bull )\n*|\s*$)/, + html: /^ *(?:comment *(?:\n|\s*$)|closed *(?:\n{2,}|\s*$)|closing *(?:\n{2,}|\s*$))/, + def: /^ *\[([^\]]+)\]: *]+)>?(?: +["(]([^\n]+)[")])? *(?:\n+|$)/, + table: noop, + paragraph: /^((?:[^\n]+\n?(?!hr|heading|lheading|blockquote|tag|def))+)\n*/, + text: /^[^\n]+/ + }; + block.bullet = /(?:[*+-]|\d+\.)/; + block.item = /^( *)(bull) [^\n]*(?:\n(?!\1bull )[^\n]*)*/; + block.item = replace(block.item, "gm")(/bull/g, block.bullet)(); + block.list = replace(block.list)(/bull/g, block.bullet)( + "hr", + "\\n+(?=\\1?(?:[-*_] *){3,}(?:\\n+|$))" + )("def", "\\n+(?=" + block.def.source + ")")(); + block.blockquote = replace(block.blockquote)("def", block.def)(); + block._tag = + "(?!(?:" + + "a|em|strong|small|s|cite|q|dfn|abbr|data|time|code" + + "|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo" + + "|span|br|wbr|ins|del|img)\\b)\\w+(?!:/|[^\\w\\s@]*@)\\b"; + block.html = replace(block.html)("comment", //)( + "closed", + /<(tag)[\s\S]+?<\/\1>/ + )("closing", /])*?>/)(/tag/g, block._tag)(); + block.paragraph = replace(block.paragraph)("hr", block.hr)( + "heading", + block.heading + )("lheading", block.lheading)("blockquote", block.blockquote)( + "tag", + "<" + block._tag + )("def", block.def)(); + block.normal = merge({}, block); + block.gfm = merge({}, block.normal, { + fences: /^ *(`{3,}|~{3,})[ \.]*(\S+)? *\n([\s\S]*?)\s*\1 *(?:\n+|$)/, + paragraph: /^/, + heading: /^ *(#{1,6}) +([^\n]+?) *#* *(?:\n+|$)/ + }); + block.gfm.paragraph = replace(block.paragraph)( + "(?!", + "(?!" + + block.gfm.fences.source.replace("\\1", "\\2") + + "|" + + block.list.source.replace("\\1", "\\3") + + "|" + )(); + block.tables = merge({}, block.gfm, { + nptable: /^ *(\S.*\|.*)\n *([-:]+ *\|[-| :]*)\n((?:.*\|.*(?:\n|$))*)\n*/, + table: /^ *\|(.+)\n *\|( *[-:]+[-| :]*)\n((?: *\|.*(?:\n|$))*)\n*/ + }); + function Lexer(options) { + this.tokens = []; + this.tokens.links = {}; + this.options = options || marked.defaults; + this.rules = block.normal; + if (this.options.gfm) { + if (this.options.tables) { + this.rules = block.tables; + } else { + this.rules = block.gfm; + } + } + } + Lexer.rules = block; + Lexer.lex = function(src, options) { + var lexer = new Lexer(options); + return lexer.lex(src); + }; + Lexer.prototype.lex = function(src) { + src = src + .replace(/\r\n|\r/g, "\n") + .replace(/\t/g, " ") + .replace(/\u00a0/g, " ") + .replace(/\u2424/g, "\n"); + return this.token(src, true); + }; + Lexer.prototype.token = function(src, top, bq) { + var src = src.replace(/^ +$/gm, ""), + next, + loose, + cap, + bull, + b, + item, + space, + i, + l; + while (src) { + if ((cap = this.rules.newline.exec(src))) { + src = src.substring(cap[0].length); + if (cap[0].length > 1) { + this.tokens.push({ type: "space" }); + } + } + if ((cap = this.rules.code.exec(src))) { + src = src.substring(cap[0].length); + cap = cap[0].replace(/^ {4}/gm, ""); + this.tokens.push({ + type: "code", + text: !this.options.pedantic ? cap.replace(/\n+$/, "") : cap + }); + continue; + } + if ((cap = this.rules.fences.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: "code", + lang: cap[2], + text: cap[3] || "" + }); + continue; + } + if ((cap = this.rules.heading.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: "heading", + depth: cap[1].length, + text: cap[2] + }); + continue; + } + if (top && (cap = this.rules.nptable.exec(src))) { + src = src.substring(cap[0].length); + item = { + type: "table", + header: cap[1].replace(/^ *| *\| *$/g, "").split(/ *\| */), + align: cap[2].replace(/^ *|\| *$/g, "").split(/ *\| */), + cells: cap[3].replace(/\n$/, "").split("\n") + }; + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = "right"; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = "center"; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = "left"; + } else { + item.align[i] = null; + } + } + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = item.cells[i].split(/ *\| */); + } + this.tokens.push(item); + continue; + } + if ((cap = this.rules.lheading.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: "heading", + depth: cap[2] === "=" ? 1 : 2, + text: cap[1] + }); + continue; + } + if ((cap = this.rules.hr.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ type: "hr" }); + continue; + } + if ((cap = this.rules.blockquote.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ type: "blockquote_start" }); + cap = cap[0].replace(/^ *> ?/gm, ""); + this.token(cap, top, true); + this.tokens.push({ type: "blockquote_end" }); + continue; + } + if ((cap = this.rules.list.exec(src))) { + src = src.substring(cap[0].length); + bull = cap[2]; + this.tokens.push({ type: "list_start", ordered: bull.length > 1 }); + cap = cap[0].match(this.rules.item); + next = false; + l = cap.length; + i = 0; + for (; i < l; i++) { + item = cap[i]; + space = item.length; + item = item.replace(/^ *([*+-]|\d+\.) +/, ""); + if (~item.indexOf("\n ")) { + space -= item.length; + item = !this.options.pedantic + ? item.replace(new RegExp("^ {1," + space + "}", "gm"), "") + : item.replace(/^ {1,4}/gm, ""); + } + if (this.options.smartLists && i !== l - 1) { + b = block.bullet.exec(cap[i + 1])[0]; + if (bull !== b && !(bull.length > 1 && b.length > 1)) { + src = cap.slice(i + 1).join("\n") + src; + i = l - 1; + } + } + loose = next || /\n\n(?!\s*$)/.test(item); + if (i !== l - 1) { + next = item.charAt(item.length - 1) === "\n"; + if (!loose) loose = next; + } + this.tokens.push({ + type: loose ? "loose_item_start" : "list_item_start" + }); + this.token(item, false, bq); + this.tokens.push({ type: "list_item_end" }); + } + this.tokens.push({ type: "list_end" }); + continue; + } + if ((cap = this.rules.html.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: this.options.sanitize ? "paragraph" : "html", + pre: + !this.options.sanitizer && + (cap[1] === "pre" || cap[1] === "script" || cap[1] === "style"), + text: cap[0] + }); + continue; + } + if (!bq && top && (cap = this.rules.def.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.links[cap[1].toLowerCase()] = { + href: cap[2], + title: cap[3] + }; + continue; + } + if (top && (cap = this.rules.table.exec(src))) { + src = src.substring(cap[0].length); + item = { + type: "table", + header: cap[1].replace(/^ *| *\| *$/g, "").split(/ *\| */), + align: cap[2].replace(/^ *|\| *$/g, "").split(/ *\| */), + cells: cap[3].replace(/(?: *\| *)?\n$/, "").split("\n") + }; + for (i = 0; i < item.align.length; i++) { + if (/^ *-+: *$/.test(item.align[i])) { + item.align[i] = "right"; + } else if (/^ *:-+: *$/.test(item.align[i])) { + item.align[i] = "center"; + } else if (/^ *:-+ *$/.test(item.align[i])) { + item.align[i] = "left"; + } else { + item.align[i] = null; + } + } + for (i = 0; i < item.cells.length; i++) { + item.cells[i] = item.cells[i] + .replace(/^ *\| *| *\| *$/g, "") + .split(/ *\| */); + } + this.tokens.push(item); + continue; + } + if (top && (cap = this.rules.paragraph.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ + type: "paragraph", + text: + cap[1].charAt(cap[1].length - 1) === "\n" + ? cap[1].slice(0, -1) + : cap[1] + }); + continue; + } + if ((cap = this.rules.text.exec(src))) { + src = src.substring(cap[0].length); + this.tokens.push({ type: "text", text: cap[0] }); + continue; + } + if (src) { + throw new Error("Infinite loop on byte: " + src.charCodeAt(0)); + } + } + return this.tokens; + }; + var inline = { + escape: /^\\([\\`*{}\[\]()#+\-.!_>])/, + autolink: /^<([^ >]+(@|:\/)[^ >]+)>/, + url: noop, + tag: /^|^<\/?\w+(?:"[^"]*"|'[^']*'|[^'">])*?>/, + link: /^!?\[(inside)\]\(href\)/, + reflink: /^!?\[(inside)\]\s*\[([^\]]*)\]/, + nolink: /^!?\[((?:\[[^\]]*\]|[^\[\]])*)\]/, + strong: /^_\_([\s\S]+?)_\_(?!_)|^\*\*([\s\S]+?)\*\*(?!\*)/, + em: /^\b_((?:[^_]|_\_)+?)_\b|^\*((?:\*\*|[\s\S])+?)\*(?!\*)/, + code: /^(`+)\s*([\s\S]*?[^`])\s*\1(?!`)/, + br: /^ {2,}\n(?!\s*$)/, + del: noop, + text: /^[\s\S]+?(?=[\\?(?:\s+['"]([\s\S]*?)['"])?\s*/; + inline.link = replace(inline.link)("inside", inline._inside)( + "href", + inline._href + )(); + inline.reflink = replace(inline.reflink)("inside", inline._inside)(); + inline.normal = merge({}, inline); + inline.pedantic = merge({}, inline.normal, { + strong: /^_\_(?=\S)([\s\S]*?\S)_\_(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/, + em: /^_(?=\S)([\s\S]*?\S)_(?!_)|^\*(?=\S)([\s\S]*?\S)\*(?!\*)/ + }); + inline.gfm = merge({}, inline.normal, { + escape: replace(inline.escape)("])", "~|])")(), + url: /^(https?:\/\/[^\s<]+[^<.,:;"')\]\s])/, + del: /^~~(?=\S)([\s\S]*?\S)~~/, + text: replace(inline.text)("]|", "~]|")("|", "|https?://|")() + }); + inline.breaks = merge({}, inline.gfm, { + br: replace(inline.br)("{2,}", "*")(), + text: replace(inline.gfm.text)("{2,}", "*")() + }); + function InlineLexer(links, options) { + this.options = options || marked.defaults; + this.links = links; + this.rules = inline.normal; + this.renderer = this.options.renderer || new Renderer(); + this.renderer.options = this.options; + if (!this.links) { + throw new Error("Tokens array requires a `links` property."); + } + if (this.options.gfm) { + if (this.options.breaks) { + this.rules = inline.breaks; + } else { + this.rules = inline.gfm; + } + } else if (this.options.pedantic) { + this.rules = inline.pedantic; + } + } + InlineLexer.rules = inline; + InlineLexer.output = function(src, links, options) { + var inline = new InlineLexer(links, options); + return inline.output(src); + }; + InlineLexer.prototype.output = function(src) { + var out = "", + link, + text, + href, + cap; + while (src) { + if ((cap = this.rules.escape.exec(src))) { + src = src.substring(cap[0].length); + out += cap[1]; + continue; + } + if ((cap = this.rules.autolink.exec(src))) { + src = src.substring(cap[0].length); + if (cap[2] === "@") { + text = + cap[1].charAt(6) === ":" + ? this.mangle(cap[1].substring(7)) + : this.mangle(cap[1]); + href = this.mangle("mailto:") + text; + } else { + text = escape(cap[1]); + href = text; + } + out += this.renderer.link(href, null, text); + continue; + } + if (!this.inLink && (cap = this.rules.url.exec(src))) { + src = src.substring(cap[0].length); + text = escape(cap[1]); + href = text; + out += this.renderer.link(href, null, text); + continue; + } + if ((cap = this.rules.tag.exec(src))) { + if (!this.inLink && /^/i.test(cap[0])) { + this.inLink = false; + } + src = src.substring(cap[0].length); + out += this.options.sanitize + ? this.options.sanitizer + ? this.options.sanitizer(cap[0]) + : escape(cap[0]) + : cap[0]; + continue; + } + if ((cap = this.rules.link.exec(src))) { + src = src.substring(cap[0].length); + this.inLink = true; + out += this.outputLink(cap, { href: cap[2], title: cap[3] }); + this.inLink = false; + continue; + } + if ( + (cap = this.rules.reflink.exec(src)) || + (cap = this.rules.nolink.exec(src)) + ) { + src = src.substring(cap[0].length); + link = (cap[2] || cap[1]).replace(/\s+/g, " "); + link = this.links[link.toLowerCase()]; + if (!link || !link.href) { + out += cap[0].charAt(0); + src = cap[0].substring(1) + src; + continue; + } + this.inLink = true; + out += this.outputLink(cap, link); + this.inLink = false; + continue; + } + if ((cap = this.rules.strong.exec(src))) { + src = src.substring(cap[0].length); + out += this.renderer.strong(this.output(cap[2] || cap[1])); + continue; + } + if ((cap = this.rules.em.exec(src))) { + src = src.substring(cap[0].length); + out += this.renderer.em(this.output(cap[2] || cap[1])); + continue; + } + if ((cap = this.rules.code.exec(src))) { + src = src.substring(cap[0].length); + out += this.renderer.codespan(escape(cap[2], true)); + continue; + } + if ((cap = this.rules.br.exec(src))) { + src = src.substring(cap[0].length); + out += this.renderer.br(); + continue; + } + if ((cap = this.rules.del.exec(src))) { + src = src.substring(cap[0].length); + out += this.renderer.del(this.output(cap[1])); + continue; + } + if ((cap = this.rules.text.exec(src))) { + src = src.substring(cap[0].length); + out += this.renderer.text(escape(this.smartypants(cap[0]))); + continue; + } + if (src) { + throw new Error("Infinite loop on byte: " + src.charCodeAt(0)); + } + } + return out; + }; + InlineLexer.prototype.outputLink = function(cap, link) { + var href = escape(link.href), + title = link.title ? escape(link.title) : null; + return cap[0].charAt(0) !== "!" + ? this.renderer.link(href, title, this.output(cap[1])) + : this.renderer.image(href, title, escape(cap[1])); + }; + InlineLexer.prototype.smartypants = function(text) { + if (!this.options.smartypants) return text; + return text + .replace(/---/g, "—") + .replace(/--/g, "–") + .replace(/(^|[-\u2014\/(\[{"\s])'/g, "$1‘") + .replace(/'/g, "’") + .replace(/(^|[-\u2014\/(\[{\u2018\s])"/g, "$1“") + .replace(/"/g, "”") + .replace(/\.{3}/g, "…"); + }; + InlineLexer.prototype.mangle = function(text) { + if (!this.options.mangle) return text; + var out = "", + l = text.length, + i = 0, + ch; + for (; i < l; i++) { + ch = text.charCodeAt(i); + if (Math.random() > 0.5) { + ch = "x" + ch.toString(16); + } + out += "&#" + ch + ";"; + } + return out; + }; + function Renderer(options) { + this.options = options || {}; + } + Renderer.prototype.code = function(code, lang, escaped) { + if (this.options.highlight) { + var out = this.options.highlight(code, lang); + if (out != null && out !== code) { + escaped = true; + code = out; + } + } + if (!lang) { + return ( + "
" +
+            (escaped ? code : escape(code, true)) +
+            "\n
" + ); + } + return ( + '
' +
+          (escaped ? code : escape(code, true)) +
+          "\n
\n" + ); + }; + Renderer.prototype.blockquote = function(quote) { + return "
\n" + quote + "
\n"; + }; + Renderer.prototype.html = function(html) { + return html; + }; + Renderer.prototype.heading = function(text, level, raw) { + return ( + "' + + text + + "\n" + ); + }; + Renderer.prototype.hr = function() { + return this.options.xhtml ? "
\n" : "
\n"; + }; + Renderer.prototype.list = function(body, ordered) { + var type = ordered ? "ol" : "ul"; + return "<" + type + ">\n" + body + "\n"; + }; + Renderer.prototype.listitem = function(text) { + return "
  • " + text + "
  • \n"; + }; + Renderer.prototype.paragraph = function(text) { + return "

    " + text + "

    \n"; + }; + Renderer.prototype.table = function(header, body) { + return ( + "\n" + + "\n" + + header + + "\n" + + "\n" + + body + + "\n" + + "
    \n" + ); + }; + Renderer.prototype.tablerow = function(content) { + return "\n" + content + "\n"; + }; + Renderer.prototype.tablecell = function(content, flags) { + var type = flags.header ? "th" : "td"; + var tag = flags.align + ? "<" + type + ' style="text-align:' + flags.align + '">' + : "<" + type + ">"; + return tag + content + "\n"; + }; + Renderer.prototype.strong = function(text) { + return "" + text + ""; + }; + Renderer.prototype.em = function(text) { + return "" + text + ""; + }; + Renderer.prototype.codespan = function(text) { + return "" + text + ""; + }; + Renderer.prototype.br = function() { + return this.options.xhtml ? "
    " : "
    "; + }; + Renderer.prototype.del = function(text) { + return "" + text + ""; + }; + Renderer.prototype.link = function(href, title, text) { + if (this.options.sanitize) { + try { + var prot = decodeURIComponent(unescape(href)) + .replace(/[^\w:]/g, "") + .toLowerCase(); + } catch (e) { + return ""; + } + if ( + prot.indexOf("javascript:") === 0 || + prot.indexOf("vbscript:") === 0 || + prot.indexOf("data:") === 0 + ) { + return ""; + } + } + var out = '
    "; + return out; + }; + Renderer.prototype.image = function(href, title, text) { + var out = '' + text + '" : ">"; + return out; + }; + Renderer.prototype.text = function(text) { + return text; + }; + function Parser(options) { + this.tokens = []; + this.token = null; + this.options = options || marked.defaults; + this.options.renderer = this.options.renderer || new Renderer(); + this.renderer = this.options.renderer; + this.renderer.options = this.options; + } + Parser.parse = function(src, options, renderer) { + var parser = new Parser(options, renderer); + return parser.parse(src); + }; + Parser.prototype.parse = function(src) { + this.inline = new InlineLexer(src.links, this.options, this.renderer); + this.tokens = src.reverse(); + var out = ""; + while (this.next()) { + out += this.tok(); + } + return out; + }; + Parser.prototype.next = function() { + return (this.token = this.tokens.pop()); + }; + Parser.prototype.peek = function() { + return this.tokens[this.tokens.length - 1] || 0; + }; + Parser.prototype.parseText = function() { + var body = this.token.text; + while (this.peek().type === "text") { + body += "\n" + this.next().text; + } + return this.inline.output(body); + }; + Parser.prototype.tok = function() { + switch (this.token.type) { + case "space": { + return ""; + } + case "hr": { + return this.renderer.hr(); + } + case "heading": { + return this.renderer.heading( + this.inline.output(this.token.text), + this.token.depth, + this.token.text + ); + } + case "code": { + return this.renderer.code( + this.token.text, + this.token.lang, + this.token.escaped + ); + } + case "table": { + var header = "", + body = "", + i, + row, + cell, + flags, + j; + cell = ""; + for (i = 0; i < this.token.header.length; i++) { + flags = { header: true, align: this.token.align[i] }; + cell += this.renderer.tablecell( + this.inline.output(this.token.header[i]), + { header: true, align: this.token.align[i] } + ); + } + header += this.renderer.tablerow(cell); + for (i = 0; i < this.token.cells.length; i++) { + row = this.token.cells[i]; + cell = ""; + for (j = 0; j < row.length; j++) { + cell += this.renderer.tablecell(this.inline.output(row[j]), { + header: false, + align: this.token.align[j] + }); + } + body += this.renderer.tablerow(cell); + } + return this.renderer.table(header, body); + } + case "blockquote_start": { + var body = ""; + while (this.next().type !== "blockquote_end") { + body += this.tok(); + } + return this.renderer.blockquote(body); + } + case "list_start": { + var body = "", + ordered = this.token.ordered; + while (this.next().type !== "list_end") { + body += this.tok(); + } + return this.renderer.list(body, ordered); + } + case "list_item_start": { + var body = ""; + while (this.next().type !== "list_item_end") { + body += + this.token.type === "text" ? this.parseText() : this.tok(); + } + return this.renderer.listitem(body); + } + case "loose_item_start": { + var body = ""; + while (this.next().type !== "list_item_end") { + body += this.tok(); + } + return this.renderer.listitem(body); + } + case "html": { + var html = + !this.token.pre && !this.options.pedantic + ? this.inline.output(this.token.text) + : this.token.text; + return this.renderer.html(html); + } + case "paragraph": { + return this.renderer.paragraph(this.inline.output(this.token.text)); + } + case "text": { + return this.renderer.paragraph(this.parseText()); + } + } + }; + function escape(html, encode) { + return html + .replace(!encode ? /&(?!#?\w+;)/g : /&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); + } + function unescape(html) { + return html.replace( + /&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/g, + function(_, n) { + n = n.toLowerCase(); + if (n === "colon") return ":"; + if (n.charAt(0) === "#") { + return n.charAt(1) === "x" + ? String.fromCharCode(parseInt(n.substring(2), 16)) + : String.fromCharCode(+n.substring(1)); + } + return ""; + } + ); + } + function replace(regex, opt) { + regex = regex.source; + opt = opt || ""; + return function self(name, val) { + if (!name) return new RegExp(regex, opt); + val = val.source || val; + val = val.replace(/(^|[^\[])\^/g, "$1"); + regex = regex.replace(name, val); + return self; + }; + } + function noop() {} + noop.exec = noop; + function merge(obj) { + var i = 1, + target, + key; + for (; i < arguments.length; i++) { + target = arguments[i]; + for (key in target) { + if (Object.prototype.hasOwnProperty.call(target, key)) { + obj[key] = target[key]; + } + } + } + return obj; + } + function marked(src, opt, callback) { + if (callback || typeof opt === "function") { + if (!callback) { + callback = opt; + opt = null; + } + opt = merge({}, marked.defaults, opt || {}); + var highlight = opt.highlight, + tokens, + pending, + i = 0; + try { + tokens = Lexer.lex(src, opt); + } catch (e) { + return callback(e); + } + pending = tokens.length; + var done = function(err) { + if (err) { + opt.highlight = highlight; + return callback(err); + } + var out; + try { + out = Parser.parse(tokens, opt); + } catch (e) { + err = e; + } + opt.highlight = highlight; + return err ? callback(err) : callback(null, out); + }; + if (!highlight || highlight.length < 3) { + return done(); + } + delete opt.highlight; + if (!pending) return done(); + for (; i < tokens.length; i++) { + (function(token) { + if (token.type !== "code") { + return --pending || done(); + } + return highlight(token.text, token.lang, function(err, code) { + if (err) return done(err); + if (code == null || code === token.text) { + return --pending || done(); + } + token.text = code; + token.escaped = true; + --pending || done(); + }); + })(tokens[i]); + } + return; + } + try { + if (opt) opt = merge({}, marked.defaults, opt); + return Parser.parse(Lexer.lex(src, opt), opt); + } catch (e) { + e.message += + "\nPlease report this to https://github.com/chjj/marked."; + if ((opt || marked.defaults).silent) { + return ( + "

    An error occured:

    " +
    +              escape(e.message + "", true) +
    +              "
    " + ); + } + throw e; + } + } + marked.options = marked.setOptions = function(opt) { + merge(marked.defaults, opt); + return marked; + }; + marked.defaults = { + gfm: true, + tables: true, + breaks: false, + pedantic: false, + sanitize: false, + sanitizer: null, + mangle: true, + smartLists: false, + silent: false, + highlight: null, + langPrefix: "lang-", + smartypants: false, + headerPrefix: "", + renderer: new Renderer(), + xhtml: false + }; + marked.Parser = Parser; + marked.parser = Parser.parse; + marked.Renderer = Renderer; + marked.Lexer = Lexer; + marked.lexer = Lexer.lex; + marked.InlineLexer = InlineLexer; + marked.inlineLexer = InlineLexer.output; + marked.parse = marked; + if (typeof module !== "undefined" && typeof exports === "object") { + module.exports = marked; + } else if (typeof define === "function" && define.amd) { + define(function() { + return marked; + }); + } else { + this.marked = marked; + } + }.call( + (function() { + return this || (typeof window !== "undefined" ? window : global); + })() + )); + + return module.exports; + })(); + + // FORMAT OPTIONS FOR MARKED IMPLEMENTATION + + function _Markdown_formatOptions(options) { + function toHighlight(code, lang) { + if (!lang && elm$core$Maybe$isJust(options.defaultHighlighting)) { + lang = options.defaultHighlighting.a; + } + + if ( + typeof hljs !== "undefined" && + lang && + hljs.listLanguages().indexOf(lang) >= 0 + ) { + return hljs.highlight(lang, code, true).value; + } + + return code; + } + + var gfm = options.githubFlavored.a; + + return { + highlight: toHighlight, + gfm: gfm, + tables: gfm && gfm.tables, + breaks: gfm && gfm.breaks, + sanitize: options.sanitize, + smartypants: options.smartypants + }; + } + var elm$core$Basics$apR = F2(function(x, f) { + return f(x); + }); + var elm$core$Array$branchFactor = 32; + var elm$core$Array$Array_elm_builtin = F4(function(a, b, c, d) { + return { $: "Array_elm_builtin", a: a, b: b, c: c, d: d }; + }); + var elm$core$Basics$EQ = { $: "EQ" }; + var elm$core$Basics$GT = { $: "GT" }; + var elm$core$Basics$LT = { $: "LT" }; + var elm$core$Dict$foldr = F3(function(func, acc, t) { + foldr: while (true) { + if (t.$ === "RBEmpty_elm_builtin") { + return acc; + } else { + var key = t.b; + var value = t.c; + var left = t.d; + var right = t.e; + var $temp$func = func, + $temp$acc = A3( + func, + key, + value, + A3(elm$core$Dict$foldr, func, acc, right) + ), + $temp$t = left; + func = $temp$func; + acc = $temp$acc; + t = $temp$t; + continue foldr; + } + } + }); + var elm$core$List$cons = _List_cons; + var elm$core$Dict$toList = function(dict) { + return A3( + elm$core$Dict$foldr, + F3(function(key, value, list) { + return A2(elm$core$List$cons, _Utils_Tuple2(key, value), list); + }), + _List_Nil, + dict + ); + }; + var elm$core$Dict$keys = function(dict) { + return A3( + elm$core$Dict$foldr, + F3(function(key, value, keyList) { + return A2(elm$core$List$cons, key, keyList); + }), + _List_Nil, + dict + ); + }; + var elm$core$Set$toList = function(_n0) { + var dict = _n0.a; + return elm$core$Dict$keys(dict); + }; + var elm$core$Elm$JsArray$foldr = _JsArray_foldr; + var elm$core$Array$foldr = F3(function(func, baseCase, _n0) { + var tree = _n0.c; + var tail = _n0.d; + var helper = F2(function(node, acc) { + if (node.$ === "SubTree") { + var subTree = node.a; + return A3(elm$core$Elm$JsArray$foldr, helper, acc, subTree); + } else { + var values = node.a; + return A3(elm$core$Elm$JsArray$foldr, func, acc, values); + } + }); + return A3( + elm$core$Elm$JsArray$foldr, + helper, + A3(elm$core$Elm$JsArray$foldr, func, baseCase, tail), + tree + ); + }); + var elm$core$Array$toList = function(array) { + return A3(elm$core$Array$foldr, elm$core$List$cons, _List_Nil, array); + }; + var elm$core$Basics$ceiling = _Basics_ceiling; + var elm$core$Basics$fdiv = _Basics_fdiv; + var elm$core$Basics$logBase = F2(function(base, number) { + return _Basics_log(number) / _Basics_log(base); + }); + var elm$core$Basics$toFloat = _Basics_toFloat; + var elm$core$Array$shiftStep = elm$core$Basics$ceiling( + A2(elm$core$Basics$logBase, 2, elm$core$Array$branchFactor) + ); + var elm$core$Elm$JsArray$empty = _JsArray_empty; + var elm$core$Array$empty = A4( + elm$core$Array$Array_elm_builtin, + 0, + elm$core$Array$shiftStep, + elm$core$Elm$JsArray$empty, + elm$core$Elm$JsArray$empty + ); + var elm$core$Array$Leaf = function(a) { + return { $: "Leaf", a: a }; + }; + var elm$core$Array$SubTree = function(a) { + return { $: "SubTree", a: a }; + }; + var elm$core$Elm$JsArray$initializeFromList = _JsArray_initializeFromList; + var elm$core$List$foldl = F3(function(func, acc, list) { + foldl: while (true) { + if (!list.b) { + return acc; + } else { + var x = list.a; + var xs = list.b; + var $temp$func = func, + $temp$acc = A2(func, x, acc), + $temp$list = xs; + func = $temp$func; + acc = $temp$acc; + list = $temp$list; + continue foldl; + } + } + }); + var elm$core$List$reverse = function(list) { + return A3(elm$core$List$foldl, elm$core$List$cons, _List_Nil, list); + }; + var elm$core$Array$compressNodes = F2(function(nodes, acc) { + compressNodes: while (true) { + var _n0 = A2( + elm$core$Elm$JsArray$initializeFromList, + elm$core$Array$branchFactor, + nodes + ); + var node = _n0.a; + var remainingNodes = _n0.b; + var newAcc = A2(elm$core$List$cons, elm$core$Array$SubTree(node), acc); + if (!remainingNodes.b) { + return elm$core$List$reverse(newAcc); + } else { + var $temp$nodes = remainingNodes, + $temp$acc = newAcc; + nodes = $temp$nodes; + acc = $temp$acc; + continue compressNodes; + } + } + }); + var elm$core$Basics$eq = _Utils_equal; + var elm$core$Tuple$first = function(_n0) { + var x = _n0.a; + return x; + }; + var elm$core$Array$treeFromBuilder = F2(function(nodeList, nodeListSize) { + treeFromBuilder: while (true) { + var newNodeSize = elm$core$Basics$ceiling( + nodeListSize / elm$core$Array$branchFactor + ); + if (newNodeSize === 1) { + return A2( + elm$core$Elm$JsArray$initializeFromList, + elm$core$Array$branchFactor, + nodeList + ).a; + } else { + var $temp$nodeList = A2( + elm$core$Array$compressNodes, + nodeList, + _List_Nil + ), + $temp$nodeListSize = newNodeSize; + nodeList = $temp$nodeList; + nodeListSize = $temp$nodeListSize; + continue treeFromBuilder; + } + } + }); + var elm$core$Basics$add = _Basics_add; + var elm$core$Basics$apL = F2(function(f, x) { + return f(x); + }); + var elm$core$Basics$floor = _Basics_floor; + var elm$core$Basics$gt = _Utils_gt; + var elm$core$Basics$max = F2(function(x, y) { + return _Utils_cmp(x, y) > 0 ? x : y; + }); + var elm$core$Basics$mul = _Basics_mul; + var elm$core$Basics$sub = _Basics_sub; + var elm$core$Elm$JsArray$length = _JsArray_length; + var elm$core$Array$builderToArray = F2(function(reverseNodeList, builder) { + if (!builder.nodeListSize) { + return A4( + elm$core$Array$Array_elm_builtin, + elm$core$Elm$JsArray$length(builder.tail), + elm$core$Array$shiftStep, + elm$core$Elm$JsArray$empty, + builder.tail + ); + } else { + var treeLen = builder.nodeListSize * elm$core$Array$branchFactor; + var depth = elm$core$Basics$floor( + A2(elm$core$Basics$logBase, elm$core$Array$branchFactor, treeLen - 1) + ); + var correctNodeList = reverseNodeList + ? elm$core$List$reverse(builder.nodeList) + : builder.nodeList; + var tree = A2( + elm$core$Array$treeFromBuilder, + correctNodeList, + builder.nodeListSize + ); + return A4( + elm$core$Array$Array_elm_builtin, + elm$core$Elm$JsArray$length(builder.tail) + treeLen, + A2(elm$core$Basics$max, 5, depth * elm$core$Array$shiftStep), + tree, + builder.tail + ); + } + }); + var elm$core$Basics$False = { $: "False" }; + var elm$core$Basics$idiv = _Basics_idiv; + var elm$core$Basics$lt = _Utils_lt; + var elm$core$Elm$JsArray$initialize = _JsArray_initialize; + var elm$core$Array$initializeHelp = F5(function( + fn, + fromIndex, + len, + nodeList, + tail + ) { + initializeHelp: while (true) { + if (fromIndex < 0) { + return A2(elm$core$Array$builderToArray, false, { + nodeList: nodeList, + nodeListSize: (len / elm$core$Array$branchFactor) | 0, + tail: tail + }); + } else { + var leaf = elm$core$Array$Leaf( + A3( + elm$core$Elm$JsArray$initialize, + elm$core$Array$branchFactor, + fromIndex, + fn + ) + ); + var $temp$fn = fn, + $temp$fromIndex = fromIndex - elm$core$Array$branchFactor, + $temp$len = len, + $temp$nodeList = A2(elm$core$List$cons, leaf, nodeList), + $temp$tail = tail; + fn = $temp$fn; + fromIndex = $temp$fromIndex; + len = $temp$len; + nodeList = $temp$nodeList; + tail = $temp$tail; + continue initializeHelp; + } + } + }); + var elm$core$Basics$le = _Utils_le; + var elm$core$Basics$remainderBy = _Basics_remainderBy; + var elm$core$Array$initialize = F2(function(len, fn) { + if (len <= 0) { + return elm$core$Array$empty; + } else { + var tailLen = len % elm$core$Array$branchFactor; + var tail = A3( + elm$core$Elm$JsArray$initialize, + tailLen, + len - tailLen, + fn + ); + var initialFromIndex = len - tailLen - elm$core$Array$branchFactor; + return A5( + elm$core$Array$initializeHelp, + fn, + initialFromIndex, + len, + _List_Nil, + tail + ); + } + }); + var elm$core$Maybe$Just = function(a) { + return { $: "Just", a: a }; + }; + var elm$core$Maybe$Nothing = { $: "Nothing" }; + var elm$core$Result$Err = function(a) { + return { $: "Err", a: a }; + }; + var elm$core$Result$Ok = function(a) { + return { $: "Ok", a: a }; + }; + var elm$core$Basics$True = { $: "True" }; + var elm$core$Result$isOk = function(result) { + if (result.$ === "Ok") { + return true; + } else { + return false; + } + }; + var elm$json$Json$Decode$Failure = F2(function(a, b) { + return { $: "Failure", a: a, b: b }; + }); + var elm$json$Json$Decode$Field = F2(function(a, b) { + return { $: "Field", a: a, b: b }; + }); + var elm$json$Json$Decode$Index = F2(function(a, b) { + return { $: "Index", a: a, b: b }; + }); + var elm$json$Json$Decode$OneOf = function(a) { + return { $: "OneOf", a: a }; + }; + var elm$core$Basics$and = _Basics_and; + var elm$core$Basics$append = _Utils_append; + var elm$core$Basics$or = _Basics_or; + var elm$core$Char$toCode = _Char_toCode; + var elm$core$Char$isLower = function(_char) { + var code = elm$core$Char$toCode(_char); + return 97 <= code && code <= 122; + }; + var elm$core$Char$isUpper = function(_char) { + var code = elm$core$Char$toCode(_char); + return code <= 90 && 65 <= code; + }; + var elm$core$Char$isAlpha = function(_char) { + return elm$core$Char$isLower(_char) || elm$core$Char$isUpper(_char); + }; + var elm$core$Char$isDigit = function(_char) { + var code = elm$core$Char$toCode(_char); + return code <= 57 && 48 <= code; + }; + var elm$core$Char$isAlphaNum = function(_char) { + return ( + elm$core$Char$isLower(_char) || + (elm$core$Char$isUpper(_char) || elm$core$Char$isDigit(_char)) + ); + }; + var elm$core$List$length = function(xs) { + return A3( + elm$core$List$foldl, + F2(function(_n0, i) { + return i + 1; + }), + 0, + xs + ); + }; + var elm$core$List$map2 = _List_map2; + var elm$core$List$rangeHelp = F3(function(lo, hi, list) { + rangeHelp: while (true) { + if (_Utils_cmp(lo, hi) < 1) { + var $temp$lo = lo, + $temp$hi = hi - 1, + $temp$list = A2(elm$core$List$cons, hi, list); + lo = $temp$lo; + hi = $temp$hi; + list = $temp$list; + continue rangeHelp; + } else { + return list; + } + } + }); + var elm$core$List$range = F2(function(lo, hi) { + return A3(elm$core$List$rangeHelp, lo, hi, _List_Nil); + }); + var elm$core$List$indexedMap = F2(function(f, xs) { + return A3( + elm$core$List$map2, + f, + A2(elm$core$List$range, 0, elm$core$List$length(xs) - 1), + xs + ); + }); + var elm$core$String$all = _String_all; + var elm$core$String$fromInt = _String_fromNumber; + var elm$core$String$join = F2(function(sep, chunks) { + return A2(_String_join, sep, _List_toArray(chunks)); + }); + var elm$core$String$uncons = _String_uncons; + var elm$core$String$split = F2(function(sep, string) { + return _List_fromArray(A2(_String_split, sep, string)); + }); + var elm$json$Json$Decode$indent = function(str) { + return A2( + elm$core$String$join, + "\n ", + A2(elm$core$String$split, "\n", str) + ); + }; + var elm$json$Json$Encode$encode = _Json_encode; + var elm$json$Json$Decode$errorOneOf = F2(function(i, error) { + return ( + "\n\n(" + + (elm$core$String$fromInt(i + 1) + + (") " + + elm$json$Json$Decode$indent( + elm$json$Json$Decode$errorToString(error) + ))) + ); + }); + var elm$json$Json$Decode$errorToString = function(error) { + return A2(elm$json$Json$Decode$errorToStringHelp, error, _List_Nil); + }; + var elm$json$Json$Decode$errorToStringHelp = F2(function(error, context) { + errorToStringHelp: while (true) { + switch (error.$) { + case "Field": + var f = error.a; + var err = error.b; + var isSimple = (function() { + var _n1 = elm$core$String$uncons(f); + if (_n1.$ === "Nothing") { + return false; + } else { + var _n2 = _n1.a; + var _char = _n2.a; + var rest = _n2.b; + return ( + elm$core$Char$isAlpha(_char) && + A2(elm$core$String$all, elm$core$Char$isAlphaNum, rest) + ); + } + })(); + var fieldName = isSimple ? "." + f : "['" + (f + "']"); + var $temp$error = err, + $temp$context = A2(elm$core$List$cons, fieldName, context); + error = $temp$error; + context = $temp$context; + continue errorToStringHelp; + case "Index": + var i = error.a; + var err = error.b; + var indexName = "[" + (elm$core$String$fromInt(i) + "]"); + var $temp$error = err, + $temp$context = A2(elm$core$List$cons, indexName, context); + error = $temp$error; + context = $temp$context; + continue errorToStringHelp; + case "OneOf": + var errors = error.a; + if (!errors.b) { + return ( + "Ran into a Json.Decode.oneOf with no possibilities" + + (function() { + if (!context.b) { + return "!"; + } else { + return ( + " at json" + + A2(elm$core$String$join, "", elm$core$List$reverse(context)) + ); + } + })() + ); + } else { + if (!errors.b.b) { + var err = errors.a; + var $temp$error = err, + $temp$context = context; + error = $temp$error; + context = $temp$context; + continue errorToStringHelp; + } else { + var starter = (function() { + if (!context.b) { + return "Json.Decode.oneOf"; + } else { + return ( + "The Json.Decode.oneOf at json" + + A2(elm$core$String$join, "", elm$core$List$reverse(context)) + ); + } + })(); + var introduction = + starter + + (" failed in the following " + + (elm$core$String$fromInt(elm$core$List$length(errors)) + + " ways:")); + return A2( + elm$core$String$join, + "\n\n", + A2( + elm$core$List$cons, + introduction, + A2( + elm$core$List$indexedMap, + elm$json$Json$Decode$errorOneOf, + errors + ) + ) + ); + } + } + default: + var msg = error.a; + var json = error.b; + var introduction = (function() { + if (!context.b) { + return "Problem with the given value:\n\n"; + } else { + return ( + "Problem with the value at json" + + (A2(elm$core$String$join, "", elm$core$List$reverse(context)) + + ":\n\n ") + ); + } + })(); + return ( + introduction + + (elm$json$Json$Decode$indent( + A2(elm$json$Json$Encode$encode, 4, json) + ) + + ("\n\n" + msg)) + ); + } + } + }); + var elm$json$Json$Decode$map2 = _Json_map2; + var NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$custom = elm$json$Json$Decode$map2( + elm$core$Basics$apR + ); + var elm$json$Json$Decode$field = _Json_decodeField; + var NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required = F3( + function(key, valDecoder, decoder) { + return A2( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$custom, + A2(elm$json$Json$Decode$field, key, valDecoder), + decoder + ); + } + ); + var author$project$Api$Cred = F2(function(a, b) { + return { $: "Cred", a: a, b: b }; + }); + var author$project$Username$Username = function(a) { + return { $: "Username", a: a }; + }; + var elm$core$Basics$identity = function(x) { + return x; + }; + var elm$json$Json$Decode$map = _Json_map1; + var elm$json$Json$Decode$string = _Json_decodeString; + var author$project$Username$decoder = A2( + elm$json$Json$Decode$map, + author$project$Username$Username, + elm$json$Json$Decode$string + ); + var elm$json$Json$Decode$succeed = _Json_succeed; + var author$project$Api$credDecoder = A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "token", + elm$json$Json$Decode$string, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "username", + author$project$Username$decoder, + elm$json$Json$Decode$succeed(author$project$Api$Cred) + ) + ); + var author$project$Api$decoderFromCred = function(decoder) { + return A3( + elm$json$Json$Decode$map2, + F2(function(fromCred, cred) { + return fromCred(cred); + }), + decoder, + author$project$Api$credDecoder + ); + }; + var author$project$Api$storageDecoder = function(viewerDecoder) { + return A2( + elm$json$Json$Decode$field, + "user", + author$project$Api$decoderFromCred(viewerDecoder) + ); + }; + var elm$browser$Browser$External = function(a) { + return { $: "External", a: a }; + }; + var elm$browser$Browser$Internal = function(a) { + return { $: "Internal", a: a }; + }; + var elm$browser$Browser$Dom$NotFound = function(a) { + return { $: "NotFound", a: a }; + }; + var elm$core$Basics$never = function(_n0) { + never: while (true) { + var nvr = _n0.a; + var $temp$_n0 = nvr; + _n0 = $temp$_n0; + continue never; + } + }; + var elm$core$Task$Perform = function(a) { + return { $: "Perform", a: a }; + }; + var elm$core$Task$succeed = _Scheduler_succeed; + var elm$core$Task$init = elm$core$Task$succeed(_Utils_Tuple0); + var elm$core$List$foldrHelper = F4(function(fn, acc, ctr, ls) { + if (!ls.b) { + return acc; + } else { + var a = ls.a; + var r1 = ls.b; + if (!r1.b) { + return A2(fn, a, acc); + } else { + var b = r1.a; + var r2 = r1.b; + if (!r2.b) { + return A2(fn, a, A2(fn, b, acc)); + } else { + var c = r2.a; + var r3 = r2.b; + if (!r3.b) { + return A2(fn, a, A2(fn, b, A2(fn, c, acc))); + } else { + var d = r3.a; + var r4 = r3.b; + var res = + ctr > 500 + ? A3(elm$core$List$foldl, fn, acc, elm$core$List$reverse(r4)) + : A4(elm$core$List$foldrHelper, fn, acc, ctr + 1, r4); + return A2(fn, a, A2(fn, b, A2(fn, c, A2(fn, d, res)))); + } + } + } + } + }); + var elm$core$List$foldr = F3(function(fn, acc, ls) { + return A4(elm$core$List$foldrHelper, fn, acc, 0, ls); + }); + var elm$core$List$map = F2(function(f, xs) { + return A3( + elm$core$List$foldr, + F2(function(x, acc) { + return A2(elm$core$List$cons, f(x), acc); + }), + _List_Nil, + xs + ); + }); + var elm$core$Task$andThen = _Scheduler_andThen; + var elm$core$Task$map = F2(function(func, taskA) { + return A2( + elm$core$Task$andThen, + function(a) { + return elm$core$Task$succeed(func(a)); + }, + taskA + ); + }); + var elm$core$Task$map2 = F3(function(func, taskA, taskB) { + return A2( + elm$core$Task$andThen, + function(a) { + return A2( + elm$core$Task$andThen, + function(b) { + return elm$core$Task$succeed(A2(func, a, b)); + }, + taskB + ); + }, + taskA + ); + }); + var elm$core$Task$sequence = function(tasks) { + return A3( + elm$core$List$foldr, + elm$core$Task$map2(elm$core$List$cons), + elm$core$Task$succeed(_List_Nil), + tasks + ); + }; + var elm$core$Platform$sendToApp = _Platform_sendToApp; + var elm$core$Task$spawnCmd = F2(function(router, _n0) { + var task = _n0.a; + return _Scheduler_spawn( + A2(elm$core$Task$andThen, elm$core$Platform$sendToApp(router), task) + ); + }); + var elm$core$Task$onEffects = F3(function(router, commands, state) { + return A2( + elm$core$Task$map, + function(_n0) { + return _Utils_Tuple0; + }, + elm$core$Task$sequence( + A2(elm$core$List$map, elm$core$Task$spawnCmd(router), commands) + ) + ); + }); + var elm$core$Task$onSelfMsg = F3(function(_n0, _n1, _n2) { + return elm$core$Task$succeed(_Utils_Tuple0); + }); + var elm$core$Task$cmdMap = F2(function(tagger, _n0) { + var task = _n0.a; + return elm$core$Task$Perform(A2(elm$core$Task$map, tagger, task)); + }); + _Platform_effectManagers["Task"] = _Platform_createManager( + elm$core$Task$init, + elm$core$Task$onEffects, + elm$core$Task$onSelfMsg, + elm$core$Task$cmdMap + ); + var elm$core$Task$command = _Platform_leaf("Task"); + var elm$core$Task$perform = F2(function(toMessage, task) { + return elm$core$Task$command( + elm$core$Task$Perform(A2(elm$core$Task$map, toMessage, task)) + ); + }); + var elm$browser$Debugger$Expando$ArraySeq = { $: "ArraySeq" }; + var elm$browser$Debugger$Expando$Constructor = F3(function(a, b, c) { + return { $: "Constructor", a: a, b: b, c: c }; + }); + var elm$browser$Debugger$Expando$Dictionary = F2(function(a, b) { + return { $: "Dictionary", a: a, b: b }; + }); + var elm$browser$Debugger$Expando$ListSeq = { $: "ListSeq" }; + var elm$browser$Debugger$Expando$Primitive = function(a) { + return { $: "Primitive", a: a }; + }; + var elm$browser$Debugger$Expando$Record = F2(function(a, b) { + return { $: "Record", a: a, b: b }; + }); + var elm$browser$Debugger$Expando$S = function(a) { + return { $: "S", a: a }; + }; + var elm$browser$Debugger$Expando$Sequence = F3(function(a, b, c) { + return { $: "Sequence", a: a, b: b, c: c }; + }); + var elm$browser$Debugger$Expando$SetSeq = { $: "SetSeq" }; + var elm$browser$Debugger$Main$Down = { $: "Down" }; + var elm$browser$Debugger$Main$NoOp = { $: "NoOp" }; + var elm$browser$Debugger$Main$Up = { $: "Up" }; + var elm$browser$Debugger$Main$UserMsg = function(a) { + return { $: "UserMsg", a: a }; + }; + var elm$browser$Debugger$History$size = function(history) { + return history.numMessages; + }; + var elm$browser$Debugger$Main$Export = { $: "Export" }; + var elm$browser$Debugger$Main$Import = { $: "Import" }; + var elm$browser$Debugger$Main$Open = { $: "Open" }; + var elm$browser$Debugger$Main$OverlayMsg = function(a) { + return { $: "OverlayMsg", a: a }; + }; + var elm$browser$Debugger$Main$Resume = { $: "Resume" }; + var elm$browser$Debugger$Main$isPaused = function(state) { + if (state.$ === "Running") { + return false; + } else { + return true; + } + }; + var elm$browser$Debugger$Overlay$Accept = function(a) { + return { $: "Accept", a: a }; + }; + var elm$browser$Debugger$Overlay$Choose = F2(function(a, b) { + return { $: "Choose", a: a, b: b }; + }); + var elm$browser$Debugger$Overlay$goodNews1 = + "\nThe good news is that having values like this in your message type is not\nso great in the long run. You are better off using simpler data, like\n"; + var elm$browser$Debugger$Overlay$goodNews2 = + "\nfunction can pattern match on that data and call whatever functions, JSON\ndecoders, etc. you need. This makes the code much more explicit and easy to\nfollow for other readers (or you in a few months!)\n"; + var elm$virtual_dom$VirtualDom$toHandlerInt = function(handler) { + switch (handler.$) { + case "Normal": + return 0; + case "MayStopPropagation": + return 1; + case "MayPreventDefault": + return 2; + default: + return 3; + } + }; + var elm$html$Html$code = _VirtualDom_node("code"); + var elm$virtual_dom$VirtualDom$text = _VirtualDom_text; + var elm$html$Html$text = elm$virtual_dom$VirtualDom$text; + var elm$browser$Debugger$Overlay$viewCode = function(name) { + return A2( + elm$html$Html$code, + _List_Nil, + _List_fromArray([elm$html$Html$text(name)]) + ); + }; + var elm$browser$Debugger$Overlay$addCommas = function(items) { + if (!items.b) { + return ""; + } else { + if (!items.b.b) { + var item = items.a; + return item; + } else { + if (!items.b.b.b) { + var item1 = items.a; + var _n1 = items.b; + var item2 = _n1.a; + return item1 + (" and " + item2); + } else { + var lastItem = items.a; + var otherItems = items.b; + return A2( + elm$core$String$join, + ", ", + _Utils_ap(otherItems, _List_fromArray([" and " + lastItem])) + ); + } + } + } + }; + var elm$browser$Debugger$Overlay$problemToString = function(problem) { + switch (problem.$) { + case "Function": + return "functions"; + case "Decoder": + return "JSON decoders"; + case "Task": + return "tasks"; + case "Process": + return "processes"; + case "Socket": + return "web sockets"; + case "Request": + return "HTTP requests"; + case "Program": + return "programs"; + default: + return "virtual DOM values"; + } + }; + var elm$html$Html$li = _VirtualDom_node("li"); + var elm$browser$Debugger$Overlay$viewProblemType = function(_n0) { + var name = _n0.name; + var problems = _n0.problems; + return A2( + elm$html$Html$li, + _List_Nil, + _List_fromArray([ + elm$browser$Debugger$Overlay$viewCode(name), + elm$html$Html$text( + " can contain " + + (elm$browser$Debugger$Overlay$addCommas( + A2( + elm$core$List$map, + elm$browser$Debugger$Overlay$problemToString, + problems + ) + ) + + ".") + ) + ]) + ); + }; + var elm$html$Html$a = _VirtualDom_node("a"); + var elm$html$Html$p = _VirtualDom_node("p"); + var elm$html$Html$ul = _VirtualDom_node("ul"); + var elm$json$Json$Encode$string = _Json_wrap; + var elm$html$Html$Attributes$stringProperty = F2(function(key, string) { + return A2(_VirtualDom_property, key, elm$json$Json$Encode$string(string)); + }); + var elm$html$Html$Attributes$href = function(url) { + return A2( + elm$html$Html$Attributes$stringProperty, + "href", + _VirtualDom_noJavaScriptUri(url) + ); + }; + var elm$browser$Debugger$Overlay$viewBadMetadata = function(_n0) { + var message = _n0.message; + var problems = _n0.problems; + return _List_fromArray([ + A2( + elm$html$Html$p, + _List_Nil, + _List_fromArray([ + elm$html$Html$text("The "), + elm$browser$Debugger$Overlay$viewCode(message), + elm$html$Html$text( + " type of your program cannot be reliably serialized for history files." + ) + ]) + ), + A2( + elm$html$Html$p, + _List_Nil, + _List_fromArray([ + elm$html$Html$text( + "Functions cannot be serialized, nor can values that contain functions. This is a problem in these places:" + ) + ]) + ), + A2( + elm$html$Html$ul, + _List_Nil, + A2( + elm$core$List$map, + elm$browser$Debugger$Overlay$viewProblemType, + problems + ) + ), + A2( + elm$html$Html$p, + _List_Nil, + _List_fromArray([ + elm$html$Html$text(elm$browser$Debugger$Overlay$goodNews1), + A2( + elm$html$Html$a, + _List_fromArray([ + elm$html$Html$Attributes$href( + "https://guide.elm-lang.org/types/union_types.html" + ) + ]), + _List_fromArray([elm$html$Html$text("union types")]) + ), + elm$html$Html$text(", in your messages. From there, your "), + elm$browser$Debugger$Overlay$viewCode("update"), + elm$html$Html$text(elm$browser$Debugger$Overlay$goodNews2) + ]) + ) + ]); + }; + var elm$browser$Debugger$Overlay$Cancel = { $: "Cancel" }; + var elm$browser$Debugger$Overlay$Proceed = { $: "Proceed" }; + var elm$html$Html$button = _VirtualDom_node("button"); + var elm$html$Html$div = _VirtualDom_node("div"); + var elm$virtual_dom$VirtualDom$style = _VirtualDom_style; + var elm$html$Html$Attributes$style = elm$virtual_dom$VirtualDom$style; + var elm$virtual_dom$VirtualDom$Normal = function(a) { + return { $: "Normal", a: a }; + }; + var elm$virtual_dom$VirtualDom$on = _VirtualDom_on; + var elm$html$Html$Events$on = F2(function(event, decoder) { + return A2( + elm$virtual_dom$VirtualDom$on, + event, + elm$virtual_dom$VirtualDom$Normal(decoder) + ); + }); + var elm$html$Html$Events$onClick = function(msg) { + return A2( + elm$html$Html$Events$on, + "click", + elm$json$Json$Decode$succeed(msg) + ); + }; + var elm$browser$Debugger$Overlay$viewButtons = function(buttons) { + var btn = F2(function(msg, string) { + return A2( + elm$html$Html$button, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "margin-right", "20px"), + elm$html$Html$Events$onClick(msg) + ]), + _List_fromArray([elm$html$Html$text(string)]) + ); + }); + var buttonNodes = (function() { + if (buttons.$ === "Accept") { + var proceed = buttons.a; + return _List_fromArray([ + A2(btn, elm$browser$Debugger$Overlay$Proceed, proceed) + ]); + } else { + var cancel = buttons.a; + var proceed = buttons.b; + return _List_fromArray([ + A2(btn, elm$browser$Debugger$Overlay$Cancel, cancel), + A2(btn, elm$browser$Debugger$Overlay$Proceed, proceed) + ]); + } + })(); + return A2( + elm$html$Html$div, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "height", "60px"), + A2(elm$html$Html$Attributes$style, "line-height", "60px"), + A2(elm$html$Html$Attributes$style, "text-align", "right"), + A2( + elm$html$Html$Attributes$style, + "background-color", + "rgb(50, 50, 50)" + ) + ]), + buttonNodes + ); + }; + var elm$virtual_dom$VirtualDom$map = _VirtualDom_map; + var elm$html$Html$map = elm$virtual_dom$VirtualDom$map; + var elm$html$Html$Attributes$id = elm$html$Html$Attributes$stringProperty( + "id" + ); + var elm$browser$Debugger$Overlay$viewMessage = F4(function( + config, + title, + details, + buttons + ) { + return A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$id("elm-debugger-overlay"), + A2(elm$html$Html$Attributes$style, "position", "fixed"), + A2(elm$html$Html$Attributes$style, "top", "0"), + A2(elm$html$Html$Attributes$style, "left", "0"), + A2(elm$html$Html$Attributes$style, "width", "100%"), + A2(elm$html$Html$Attributes$style, "height", "100%"), + A2(elm$html$Html$Attributes$style, "color", "white"), + A2(elm$html$Html$Attributes$style, "pointer-events", "none"), + A2( + elm$html$Html$Attributes$style, + "font-family", + "'Trebuchet MS', 'Lucida Grande', 'Bitstream Vera Sans', 'Helvetica Neue', sans-serif" + ), + A2(elm$html$Html$Attributes$style, "z-index", "2147483647") + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "position", "absolute"), + A2(elm$html$Html$Attributes$style, "width", "600px"), + A2(elm$html$Html$Attributes$style, "height", "100%"), + A2( + elm$html$Html$Attributes$style, + "padding-left", + "calc(50% - 300px)" + ), + A2( + elm$html$Html$Attributes$style, + "padding-right", + "calc(50% - 300px)" + ), + A2( + elm$html$Html$Attributes$style, + "background-color", + "rgba(200, 200, 200, 0.7)" + ), + A2(elm$html$Html$Attributes$style, "pointer-events", "auto") + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "font-size", "36px"), + A2(elm$html$Html$Attributes$style, "height", "80px"), + A2( + elm$html$Html$Attributes$style, + "background-color", + "rgb(50, 50, 50)" + ), + A2(elm$html$Html$Attributes$style, "padding-left", "22px"), + A2(elm$html$Html$Attributes$style, "vertical-align", "middle"), + A2(elm$html$Html$Attributes$style, "line-height", "80px") + ]), + _List_fromArray([elm$html$Html$text(title)]) + ), + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$id("elm-debugger-details"), + A2(elm$html$Html$Attributes$style, "padding", " 8px 20px"), + A2(elm$html$Html$Attributes$style, "overflow-y", "auto"), + A2( + elm$html$Html$Attributes$style, + "max-height", + "calc(100% - 156px)" + ), + A2( + elm$html$Html$Attributes$style, + "background-color", + "rgb(61, 61, 61)" + ) + ]), + details + ), + A2( + elm$html$Html$map, + config.wrap, + elm$browser$Debugger$Overlay$viewButtons(buttons) + ) + ]) + ) + ]) + ); + }); + var elm$html$Html$span = _VirtualDom_node("span"); + var elm$browser$Debugger$Overlay$button = F2(function(msg, label) { + return A2( + elm$html$Html$span, + _List_fromArray([ + elm$html$Html$Events$onClick(msg), + A2(elm$html$Html$Attributes$style, "cursor", "pointer") + ]), + _List_fromArray([elm$html$Html$text(label)]) + ); + }); + var elm$browser$Debugger$Overlay$viewImportExport = F3(function( + props, + importMsg, + exportMsg + ) { + return A2( + elm$html$Html$div, + props, + _List_fromArray([ + A2(elm$browser$Debugger$Overlay$button, importMsg, "Import"), + elm$html$Html$text(" / "), + A2(elm$browser$Debugger$Overlay$button, exportMsg, "Export") + ]) + ); + }); + var elm$browser$Debugger$Overlay$viewMiniControls = F2(function( + config, + numMsgs + ) { + return A2( + elm$html$Html$div, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "position", "fixed"), + A2(elm$html$Html$Attributes$style, "bottom", "0"), + A2(elm$html$Html$Attributes$style, "right", "6px"), + A2(elm$html$Html$Attributes$style, "border-radius", "4px"), + A2( + elm$html$Html$Attributes$style, + "background-color", + "rgb(61, 61, 61)" + ), + A2(elm$html$Html$Attributes$style, "color", "white"), + A2(elm$html$Html$Attributes$style, "font-family", "monospace"), + A2(elm$html$Html$Attributes$style, "pointer-events", "auto"), + A2(elm$html$Html$Attributes$style, "z-index", "2147483647") + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "padding", "6px"), + A2(elm$html$Html$Attributes$style, "cursor", "pointer"), + A2(elm$html$Html$Attributes$style, "text-align", "center"), + A2(elm$html$Html$Attributes$style, "min-width", "24ch"), + elm$html$Html$Events$onClick(config.open) + ]), + _List_fromArray([ + elm$html$Html$text( + "Explore History (" + (elm$core$String$fromInt(numMsgs) + ")") + ) + ]) + ), + A3( + elm$browser$Debugger$Overlay$viewImportExport, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "padding", "4px 0"), + A2(elm$html$Html$Attributes$style, "font-size", "0.8em"), + A2(elm$html$Html$Attributes$style, "text-align", "center"), + A2( + elm$html$Html$Attributes$style, + "background-color", + "rgb(50, 50, 50)" + ) + ]), + config.importHistory, + config.exportHistory + ) + ]) + ); + }); + var elm$browser$Debugger$Overlay$explanationBad = + "\nThe messages in this history do not match the messages handled by your\nprogram. I noticed changes in the following types:\n"; + var elm$browser$Debugger$Overlay$explanationRisky = + "\nThis history seems old. It will work with this program, but some\nmessages have been added since the history was created:\n"; + var elm$core$List$intersperse = F2(function(sep, xs) { + if (!xs.b) { + return _List_Nil; + } else { + var hd = xs.a; + var tl = xs.b; + var step = F2(function(x, rest) { + return A2(elm$core$List$cons, sep, A2(elm$core$List$cons, x, rest)); + }); + var spersed = A3(elm$core$List$foldr, step, _List_Nil, tl); + return A2(elm$core$List$cons, hd, spersed); + } + }); + var elm$browser$Debugger$Overlay$viewMention = F2(function(tags, verbed) { + var _n0 = A2( + elm$core$List$map, + elm$browser$Debugger$Overlay$viewCode, + elm$core$List$reverse(tags) + ); + if (!_n0.b) { + return elm$html$Html$text(""); + } else { + if (!_n0.b.b) { + var tag = _n0.a; + return A2( + elm$html$Html$li, + _List_Nil, + _List_fromArray([ + elm$html$Html$text(verbed), + tag, + elm$html$Html$text(".") + ]) + ); + } else { + if (!_n0.b.b.b) { + var tag2 = _n0.a; + var _n1 = _n0.b; + var tag1 = _n1.a; + return A2( + elm$html$Html$li, + _List_Nil, + _List_fromArray([ + elm$html$Html$text(verbed), + tag1, + elm$html$Html$text(" and "), + tag2, + elm$html$Html$text(".") + ]) + ); + } else { + var lastTag = _n0.a; + var otherTags = _n0.b; + return A2( + elm$html$Html$li, + _List_Nil, + A2( + elm$core$List$cons, + elm$html$Html$text(verbed), + _Utils_ap( + A2( + elm$core$List$intersperse, + elm$html$Html$text(", "), + elm$core$List$reverse(otherTags) + ), + _List_fromArray([ + elm$html$Html$text(", and "), + lastTag, + elm$html$Html$text(".") + ]) + ) + ) + ); + } + } + } + }); + var elm$browser$Debugger$Overlay$viewChange = function(change) { + return A2( + elm$html$Html$li, + _List_fromArray([A2(elm$html$Html$Attributes$style, "margin", "8px 0")]), + (function() { + if (change.$ === "AliasChange") { + var name = change.a; + return _List_fromArray([ + A2( + elm$html$Html$span, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "font-size", "1.5em") + ]), + _List_fromArray([elm$browser$Debugger$Overlay$viewCode(name)]) + ) + ]); + } else { + var name = change.a; + var removed = change.b.removed; + var changed = change.b.changed; + var added = change.b.added; + var argsMatch = change.b.argsMatch; + return _List_fromArray([ + A2( + elm$html$Html$span, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "font-size", "1.5em") + ]), + _List_fromArray([elm$browser$Debugger$Overlay$viewCode(name)]) + ), + A2( + elm$html$Html$ul, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "list-style-type", "disc"), + A2(elm$html$Html$Attributes$style, "padding-left", "2em") + ]), + _List_fromArray([ + A2( + elm$browser$Debugger$Overlay$viewMention, + removed, + "Removed " + ), + A2( + elm$browser$Debugger$Overlay$viewMention, + changed, + "Changed " + ), + A2(elm$browser$Debugger$Overlay$viewMention, added, "Added ") + ]) + ), + argsMatch + ? elm$html$Html$text("") + : elm$html$Html$text( + "This may be due to the fact that the type variable names changed." + ) + ]); + } + })() + ); + }; + var elm$browser$Debugger$Overlay$viewReport = F2(function(isBad, report) { + switch (report.$) { + case "CorruptHistory": + return _List_fromArray([ + elm$html$Html$text( + "Looks like this history file is corrupt. I cannot understand it." + ) + ]); + case "VersionChanged": + var old = report.a; + var _new = report.b; + return _List_fromArray([ + elm$html$Html$text( + "This history was created with Elm " + + (old + (", but you are using Elm " + (_new + " right now."))) + ) + ]); + case "MessageChanged": + var old = report.a; + var _new = report.b; + return _List_fromArray([ + elm$html$Html$text( + "To import some other history, the overall message type must" + + " be the same. The old history has " + ), + elm$browser$Debugger$Overlay$viewCode(old), + elm$html$Html$text(" messages, but the new program works with "), + elm$browser$Debugger$Overlay$viewCode(_new), + elm$html$Html$text(" messages.") + ]); + default: + var changes = report.a; + return _List_fromArray([ + A2( + elm$html$Html$p, + _List_Nil, + _List_fromArray([ + elm$html$Html$text( + isBad + ? elm$browser$Debugger$Overlay$explanationBad + : elm$browser$Debugger$Overlay$explanationRisky + ) + ]) + ), + A2( + elm$html$Html$ul, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "list-style-type", "none"), + A2(elm$html$Html$Attributes$style, "padding-left", "20px") + ]), + A2( + elm$core$List$map, + elm$browser$Debugger$Overlay$viewChange, + changes + ) + ) + ]); + } + }); + var elm$browser$Debugger$Overlay$view = F5(function( + config, + isPaused, + isOpen, + numMsgs, + state + ) { + switch (state.$) { + case "None": + return isOpen + ? elm$html$Html$text("") + : isPaused + ? A2( + elm$html$Html$div, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "width", "100%"), + A2(elm$html$Html$Attributes$style, "height", "100%"), + A2(elm$html$Html$Attributes$style, "cursor", "pointer"), + A2(elm$html$Html$Attributes$style, "text-align", "center"), + A2(elm$html$Html$Attributes$style, "pointer-events", "auto"), + A2( + elm$html$Html$Attributes$style, + "background-color", + "rgba(200, 200, 200, 0.7)" + ), + A2(elm$html$Html$Attributes$style, "color", "white"), + A2( + elm$html$Html$Attributes$style, + "font-family", + "'Trebuchet MS', 'Lucida Grande', 'Bitstream Vera Sans', 'Helvetica Neue', sans-serif" + ), + A2(elm$html$Html$Attributes$style, "z-index", "2147483646"), + elm$html$Html$Events$onClick(config.resume) + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + A2( + elm$html$Html$Attributes$style, + "position", + "absolute" + ), + A2( + elm$html$Html$Attributes$style, + "top", + "calc(50% - 40px)" + ), + A2(elm$html$Html$Attributes$style, "font-size", "80px"), + A2(elm$html$Html$Attributes$style, "line-height", "80px"), + A2(elm$html$Html$Attributes$style, "height", "80px"), + A2(elm$html$Html$Attributes$style, "width", "100%") + ]), + _List_fromArray([elm$html$Html$text("Click to Resume")]) + ), + A2( + elm$browser$Debugger$Overlay$viewMiniControls, + config, + numMsgs + ) + ]) + ) + : A2( + elm$browser$Debugger$Overlay$viewMiniControls, + config, + numMsgs + ); + case "BadMetadata": + var badMetadata_ = state.a; + return A4( + elm$browser$Debugger$Overlay$viewMessage, + config, + "Cannot use Import or Export", + elm$browser$Debugger$Overlay$viewBadMetadata(badMetadata_), + elm$browser$Debugger$Overlay$Accept("Ok") + ); + case "BadImport": + var report = state.a; + return A4( + elm$browser$Debugger$Overlay$viewMessage, + config, + "Cannot Import History", + A2(elm$browser$Debugger$Overlay$viewReport, true, report), + elm$browser$Debugger$Overlay$Accept("Ok") + ); + default: + var report = state.a; + return A4( + elm$browser$Debugger$Overlay$viewMessage, + config, + "Warning", + A2(elm$browser$Debugger$Overlay$viewReport, false, report), + A2(elm$browser$Debugger$Overlay$Choose, "Cancel", "Import Anyway") + ); + } + }); + var elm$browser$Debugger$Main$cornerView = function(model) { + return A5( + elm$browser$Debugger$Overlay$view, + { + exportHistory: elm$browser$Debugger$Main$Export, + importHistory: elm$browser$Debugger$Main$Import, + open: elm$browser$Debugger$Main$Open, + resume: elm$browser$Debugger$Main$Resume, + wrap: elm$browser$Debugger$Main$OverlayMsg + }, + elm$browser$Debugger$Main$isPaused(model.state), + _Debugger_isOpen(model.popout), + elm$browser$Debugger$History$size(model.history), + model.overlay + ); + }; + var elm$browser$Debugger$Main$getCurrentModel = function(state) { + if (state.$ === "Running") { + var model = state.a; + return model; + } else { + var model = state.b; + return model; + } + }; + var elm$browser$Debugger$Main$getUserModel = function(model) { + return elm$browser$Debugger$Main$getCurrentModel(model.state); + }; + var elm$browser$Debugger$Expando$Field = F2(function(a, b) { + return { $: "Field", a: a, b: b }; + }); + var elm$browser$Debugger$Expando$Index = F3(function(a, b, c) { + return { $: "Index", a: a, b: b, c: c }; + }); + var elm$browser$Debugger$Expando$Key = { $: "Key" }; + var elm$browser$Debugger$Expando$None = { $: "None" }; + var elm$browser$Debugger$Expando$Toggle = { $: "Toggle" }; + var elm$browser$Debugger$Expando$Value = { $: "Value" }; + var elm$browser$Debugger$Expando$blue = A2( + elm$html$Html$Attributes$style, + "color", + "rgb(28, 0, 207)" + ); + var elm$browser$Debugger$Expando$leftPad = function(maybeKey) { + if (maybeKey.$ === "Nothing") { + return _List_Nil; + } else { + return _List_fromArray([ + A2(elm$html$Html$Attributes$style, "padding-left", "4ch") + ]); + } + }; + var elm$browser$Debugger$Expando$makeArrow = function(arrow) { + return A2( + elm$html$Html$span, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "color", "#777"), + A2(elm$html$Html$Attributes$style, "padding-left", "2ch"), + A2(elm$html$Html$Attributes$style, "width", "2ch"), + A2(elm$html$Html$Attributes$style, "display", "inline-block") + ]), + _List_fromArray([elm$html$Html$text(arrow)]) + ); + }; + var elm$browser$Debugger$Expando$purple = A2( + elm$html$Html$Attributes$style, + "color", + "rgb(136, 19, 145)" + ); + var elm$browser$Debugger$Expando$lineStarter = F3(function( + maybeKey, + maybeIsClosed, + description + ) { + var arrow = (function() { + if (maybeIsClosed.$ === "Nothing") { + return elm$browser$Debugger$Expando$makeArrow(""); + } else { + if (maybeIsClosed.a) { + return elm$browser$Debugger$Expando$makeArrow("▸"); + } else { + return elm$browser$Debugger$Expando$makeArrow("▾"); + } + } + })(); + if (maybeKey.$ === "Nothing") { + return A2(elm$core$List$cons, arrow, description); + } else { + var key = maybeKey.a; + return A2( + elm$core$List$cons, + arrow, + A2( + elm$core$List$cons, + A2( + elm$html$Html$span, + _List_fromArray([elm$browser$Debugger$Expando$purple]), + _List_fromArray([elm$html$Html$text(key)]) + ), + A2(elm$core$List$cons, elm$html$Html$text(" = "), description) + ) + ); + } + }); + var elm$browser$Debugger$Expando$red = A2( + elm$html$Html$Attributes$style, + "color", + "rgb(196, 26, 22)" + ); + var elm$browser$Debugger$Expando$seqTypeToString = F2(function(n, seqType) { + switch (seqType.$) { + case "ListSeq": + return "List(" + (elm$core$String$fromInt(n) + ")"); + case "SetSeq": + return "Set(" + (elm$core$String$fromInt(n) + ")"); + default: + return "Array(" + (elm$core$String$fromInt(n) + ")"); + } + }); + var elm$core$String$slice = _String_slice; + var elm$core$String$left = F2(function(n, string) { + return n < 1 ? "" : A3(elm$core$String$slice, 0, n, string); + }); + var elm$core$String$length = _String_length; + var elm$core$Basics$negate = function(n) { + return -n; + }; + var elm$core$String$right = F2(function(n, string) { + return n < 1 + ? "" + : A3(elm$core$String$slice, -n, elm$core$String$length(string), string); + }); + var elm$browser$Debugger$Expando$elideMiddle = function(str) { + return elm$core$String$length(str) <= 18 + ? str + : A2(elm$core$String$left, 8, str) + + ("..." + A2(elm$core$String$right, 8, str)); + }; + var elm$browser$Debugger$Expando$viewExtraTinyRecord = F3(function( + length, + starter, + entries + ) { + if (!entries.b) { + return _Utils_Tuple2( + length + 1, + _List_fromArray([elm$html$Html$text("}")]) + ); + } else { + var field = entries.a; + var rest = entries.b; + var nextLength = length + elm$core$String$length(field) + 1; + if (nextLength > 18) { + return _Utils_Tuple2( + length + 2, + _List_fromArray([elm$html$Html$text("…}")]) + ); + } else { + var _n1 = A3( + elm$browser$Debugger$Expando$viewExtraTinyRecord, + nextLength, + ",", + rest + ); + var finalLength = _n1.a; + var otherHtmls = _n1.b; + return _Utils_Tuple2( + finalLength, + A2( + elm$core$List$cons, + elm$html$Html$text(starter), + A2( + elm$core$List$cons, + A2( + elm$html$Html$span, + _List_fromArray([elm$browser$Debugger$Expando$purple]), + _List_fromArray([elm$html$Html$text(field)]) + ), + otherHtmls + ) + ) + ); + } + } + }); + var elm$browser$Debugger$Expando$viewTinyHelp = function(str) { + return _Utils_Tuple2( + elm$core$String$length(str), + _List_fromArray([elm$html$Html$text(str)]) + ); + }; + var elm$core$Dict$isEmpty = function(dict) { + if (dict.$ === "RBEmpty_elm_builtin") { + return true; + } else { + return false; + } + }; + var elm$core$Maybe$withDefault = F2(function(_default, maybe) { + if (maybe.$ === "Just") { + var value = maybe.a; + return value; + } else { + return _default; + } + }); + var elm$browser$Debugger$Expando$viewExtraTiny = function(value) { + if (value.$ === "Record") { + var record = value.b; + return A3( + elm$browser$Debugger$Expando$viewExtraTinyRecord, + 0, + "{", + elm$core$Dict$keys(record) + ); + } else { + return elm$browser$Debugger$Expando$viewTiny(value); + } + }; + var elm$browser$Debugger$Expando$viewTiny = function(value) { + switch (value.$) { + case "S": + var stringRep = value.a; + var str = elm$browser$Debugger$Expando$elideMiddle(stringRep); + return _Utils_Tuple2( + elm$core$String$length(str), + _List_fromArray([ + A2( + elm$html$Html$span, + _List_fromArray([elm$browser$Debugger$Expando$red]), + _List_fromArray([elm$html$Html$text(str)]) + ) + ]) + ); + case "Primitive": + var stringRep = value.a; + return _Utils_Tuple2( + elm$core$String$length(stringRep), + _List_fromArray([ + A2( + elm$html$Html$span, + _List_fromArray([elm$browser$Debugger$Expando$blue]), + _List_fromArray([elm$html$Html$text(stringRep)]) + ) + ]) + ); + case "Sequence": + var seqType = value.a; + var valueList = value.c; + return elm$browser$Debugger$Expando$viewTinyHelp( + A2( + elm$browser$Debugger$Expando$seqTypeToString, + elm$core$List$length(valueList), + seqType + ) + ); + case "Dictionary": + var keyValuePairs = value.b; + return elm$browser$Debugger$Expando$viewTinyHelp( + "Dict(" + + (elm$core$String$fromInt(elm$core$List$length(keyValuePairs)) + ")") + ); + case "Record": + var record = value.b; + return elm$browser$Debugger$Expando$viewTinyRecord(record); + default: + if (!value.c.b) { + var maybeName = value.a; + return elm$browser$Debugger$Expando$viewTinyHelp( + A2(elm$core$Maybe$withDefault, "Unit", maybeName) + ); + } else { + var maybeName = value.a; + var valueList = value.c; + return elm$browser$Debugger$Expando$viewTinyHelp( + (function() { + if (maybeName.$ === "Nothing") { + return ( + "Tuple(" + + (elm$core$String$fromInt(elm$core$List$length(valueList)) + + ")") + ); + } else { + var name = maybeName.a; + return name + " …"; + } + })() + ); + } + } + }; + var elm$browser$Debugger$Expando$viewTinyRecord = function(record) { + return elm$core$Dict$isEmpty(record) + ? _Utils_Tuple2(2, _List_fromArray([elm$html$Html$text("{}")])) + : A3( + elm$browser$Debugger$Expando$viewTinyRecordHelp, + 0, + "{ ", + elm$core$Dict$toList(record) + ); + }; + var elm$browser$Debugger$Expando$viewTinyRecordHelp = F3(function( + length, + starter, + entries + ) { + if (!entries.b) { + return _Utils_Tuple2( + length + 2, + _List_fromArray([elm$html$Html$text(" }")]) + ); + } else { + var _n1 = entries.a; + var field = _n1.a; + var value = _n1.b; + var rest = entries.b; + var fieldLen = elm$core$String$length(field); + var _n2 = elm$browser$Debugger$Expando$viewExtraTiny(value); + var valueLen = _n2.a; + var valueHtmls = _n2.b; + var newLength = length + fieldLen + valueLen + 5; + if (newLength > 60) { + return _Utils_Tuple2( + length + 4, + _List_fromArray([elm$html$Html$text(", … }")]) + ); + } else { + var _n3 = A3( + elm$browser$Debugger$Expando$viewTinyRecordHelp, + newLength, + ", ", + rest + ); + var finalLength = _n3.a; + var otherHtmls = _n3.b; + return _Utils_Tuple2( + finalLength, + A2( + elm$core$List$cons, + elm$html$Html$text(starter), + A2( + elm$core$List$cons, + A2( + elm$html$Html$span, + _List_fromArray([elm$browser$Debugger$Expando$purple]), + _List_fromArray([elm$html$Html$text(field)]) + ), + A2( + elm$core$List$cons, + elm$html$Html$text(" = "), + A2( + elm$core$List$cons, + A2(elm$html$Html$span, _List_Nil, valueHtmls), + otherHtmls + ) + ) + ) + ) + ); + } + } + }); + var elm$core$Basics$composeL = F3(function(g, f, x) { + return g(f(x)); + }); + var elm$core$Tuple$second = function(_n0) { + var y = _n0.b; + return y; + }; + var elm$browser$Debugger$Expando$view = F2(function(maybeKey, expando) { + switch (expando.$) { + case "S": + var stringRep = expando.a; + return A2( + elm$html$Html$div, + elm$browser$Debugger$Expando$leftPad(maybeKey), + A3( + elm$browser$Debugger$Expando$lineStarter, + maybeKey, + elm$core$Maybe$Nothing, + _List_fromArray([ + A2( + elm$html$Html$span, + _List_fromArray([elm$browser$Debugger$Expando$red]), + _List_fromArray([elm$html$Html$text(stringRep)]) + ) + ]) + ) + ); + case "Primitive": + var stringRep = expando.a; + return A2( + elm$html$Html$div, + elm$browser$Debugger$Expando$leftPad(maybeKey), + A3( + elm$browser$Debugger$Expando$lineStarter, + maybeKey, + elm$core$Maybe$Nothing, + _List_fromArray([ + A2( + elm$html$Html$span, + _List_fromArray([elm$browser$Debugger$Expando$blue]), + _List_fromArray([elm$html$Html$text(stringRep)]) + ) + ]) + ) + ); + case "Sequence": + var seqType = expando.a; + var isClosed = expando.b; + var valueList = expando.c; + return A4( + elm$browser$Debugger$Expando$viewSequence, + maybeKey, + seqType, + isClosed, + valueList + ); + case "Dictionary": + var isClosed = expando.a; + var keyValuePairs = expando.b; + return A3( + elm$browser$Debugger$Expando$viewDictionary, + maybeKey, + isClosed, + keyValuePairs + ); + case "Record": + var isClosed = expando.a; + var valueDict = expando.b; + return A3( + elm$browser$Debugger$Expando$viewRecord, + maybeKey, + isClosed, + valueDict + ); + default: + var maybeName = expando.a; + var isClosed = expando.b; + var valueList = expando.c; + return A4( + elm$browser$Debugger$Expando$viewConstructor, + maybeKey, + maybeName, + isClosed, + valueList + ); + } + }); + var elm$browser$Debugger$Expando$viewConstructor = F4(function( + maybeKey, + maybeName, + isClosed, + valueList + ) { + var tinyArgs = A2( + elm$core$List$map, + A2( + elm$core$Basics$composeL, + elm$core$Tuple$second, + elm$browser$Debugger$Expando$viewExtraTiny + ), + valueList + ); + var description = (function() { + var _n7 = _Utils_Tuple2(maybeName, tinyArgs); + if (_n7.a.$ === "Nothing") { + if (!_n7.b.b) { + var _n8 = _n7.a; + return _List_fromArray([elm$html$Html$text("()")]); + } else { + var _n9 = _n7.a; + var _n10 = _n7.b; + var x = _n10.a; + var xs = _n10.b; + return A2( + elm$core$List$cons, + elm$html$Html$text("( "), + A2( + elm$core$List$cons, + A2(elm$html$Html$span, _List_Nil, x), + A3( + elm$core$List$foldr, + F2(function(args, rest) { + return A2( + elm$core$List$cons, + elm$html$Html$text(", "), + A2( + elm$core$List$cons, + A2(elm$html$Html$span, _List_Nil, args), + rest + ) + ); + }), + _List_fromArray([elm$html$Html$text(" )")]), + xs + ) + ) + ); + } + } else { + if (!_n7.b.b) { + var name = _n7.a.a; + return _List_fromArray([elm$html$Html$text(name)]); + } else { + var name = _n7.a.a; + var _n11 = _n7.b; + var x = _n11.a; + var xs = _n11.b; + return A2( + elm$core$List$cons, + elm$html$Html$text(name + " "), + A2( + elm$core$List$cons, + A2(elm$html$Html$span, _List_Nil, x), + A3( + elm$core$List$foldr, + F2(function(args, rest) { + return A2( + elm$core$List$cons, + elm$html$Html$text(" "), + A2( + elm$core$List$cons, + A2(elm$html$Html$span, _List_Nil, args), + rest + ) + ); + }), + _List_Nil, + xs + ) + ) + ); + } + } + })(); + var _n4 = (function() { + if (!valueList.b) { + return _Utils_Tuple2( + elm$core$Maybe$Nothing, + A2(elm$html$Html$div, _List_Nil, _List_Nil) + ); + } else { + if (!valueList.b.b) { + var entry = valueList.a; + switch (entry.$) { + case "S": + return _Utils_Tuple2( + elm$core$Maybe$Nothing, + A2(elm$html$Html$div, _List_Nil, _List_Nil) + ); + case "Primitive": + return _Utils_Tuple2( + elm$core$Maybe$Nothing, + A2(elm$html$Html$div, _List_Nil, _List_Nil) + ); + case "Sequence": + var subValueList = entry.c; + return _Utils_Tuple2( + elm$core$Maybe$Just(isClosed), + isClosed + ? A2(elm$html$Html$div, _List_Nil, _List_Nil) + : A2( + elm$html$Html$map, + A2( + elm$browser$Debugger$Expando$Index, + elm$browser$Debugger$Expando$None, + 0 + ), + elm$browser$Debugger$Expando$viewSequenceOpen( + subValueList + ) + ) + ); + case "Dictionary": + var keyValuePairs = entry.b; + return _Utils_Tuple2( + elm$core$Maybe$Just(isClosed), + isClosed + ? A2(elm$html$Html$div, _List_Nil, _List_Nil) + : A2( + elm$html$Html$map, + A2( + elm$browser$Debugger$Expando$Index, + elm$browser$Debugger$Expando$None, + 0 + ), + elm$browser$Debugger$Expando$viewDictionaryOpen( + keyValuePairs + ) + ) + ); + case "Record": + var record = entry.b; + return _Utils_Tuple2( + elm$core$Maybe$Just(isClosed), + isClosed + ? A2(elm$html$Html$div, _List_Nil, _List_Nil) + : A2( + elm$html$Html$map, + A2( + elm$browser$Debugger$Expando$Index, + elm$browser$Debugger$Expando$None, + 0 + ), + elm$browser$Debugger$Expando$viewRecordOpen(record) + ) + ); + default: + var subValueList = entry.c; + return _Utils_Tuple2( + elm$core$Maybe$Just(isClosed), + isClosed + ? A2(elm$html$Html$div, _List_Nil, _List_Nil) + : A2( + elm$html$Html$map, + A2( + elm$browser$Debugger$Expando$Index, + elm$browser$Debugger$Expando$None, + 0 + ), + elm$browser$Debugger$Expando$viewConstructorOpen( + subValueList + ) + ) + ); + } + } else { + return _Utils_Tuple2( + elm$core$Maybe$Just(isClosed), + isClosed + ? A2(elm$html$Html$div, _List_Nil, _List_Nil) + : elm$browser$Debugger$Expando$viewConstructorOpen(valueList) + ); + } + } + })(); + var maybeIsClosed = _n4.a; + var openHtml = _n4.b; + return A2( + elm$html$Html$div, + elm$browser$Debugger$Expando$leftPad(maybeKey), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Events$onClick(elm$browser$Debugger$Expando$Toggle) + ]), + A3( + elm$browser$Debugger$Expando$lineStarter, + maybeKey, + maybeIsClosed, + description + ) + ), + openHtml + ]) + ); + }); + var elm$browser$Debugger$Expando$viewConstructorEntry = F2(function( + index, + value + ) { + return A2( + elm$html$Html$map, + A2( + elm$browser$Debugger$Expando$Index, + elm$browser$Debugger$Expando$None, + index + ), + A2( + elm$browser$Debugger$Expando$view, + elm$core$Maybe$Just(elm$core$String$fromInt(index)), + value + ) + ); + }); + var elm$browser$Debugger$Expando$viewConstructorOpen = function(valueList) { + return A2( + elm$html$Html$div, + _List_Nil, + A2( + elm$core$List$indexedMap, + elm$browser$Debugger$Expando$viewConstructorEntry, + valueList + ) + ); + }; + var elm$browser$Debugger$Expando$viewDictionary = F3(function( + maybeKey, + isClosed, + keyValuePairs + ) { + var starter = + "Dict(" + + (elm$core$String$fromInt(elm$core$List$length(keyValuePairs)) + ")"); + return A2( + elm$html$Html$div, + elm$browser$Debugger$Expando$leftPad(maybeKey), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Events$onClick(elm$browser$Debugger$Expando$Toggle) + ]), + A3( + elm$browser$Debugger$Expando$lineStarter, + maybeKey, + elm$core$Maybe$Just(isClosed), + _List_fromArray([elm$html$Html$text(starter)]) + ) + ), + isClosed + ? elm$html$Html$text("") + : elm$browser$Debugger$Expando$viewDictionaryOpen(keyValuePairs) + ]) + ); + }); + var elm$browser$Debugger$Expando$viewDictionaryEntry = F2(function( + index, + _n2 + ) { + var key = _n2.a; + var value = _n2.b; + switch (key.$) { + case "S": + var stringRep = key.a; + return A2( + elm$html$Html$map, + A2( + elm$browser$Debugger$Expando$Index, + elm$browser$Debugger$Expando$Value, + index + ), + A2( + elm$browser$Debugger$Expando$view, + elm$core$Maybe$Just(stringRep), + value + ) + ); + case "Primitive": + var stringRep = key.a; + return A2( + elm$html$Html$map, + A2( + elm$browser$Debugger$Expando$Index, + elm$browser$Debugger$Expando$Value, + index + ), + A2( + elm$browser$Debugger$Expando$view, + elm$core$Maybe$Just(stringRep), + value + ) + ); + default: + return A2( + elm$html$Html$div, + _List_Nil, + _List_fromArray([ + A2( + elm$html$Html$map, + A2( + elm$browser$Debugger$Expando$Index, + elm$browser$Debugger$Expando$Key, + index + ), + A2( + elm$browser$Debugger$Expando$view, + elm$core$Maybe$Just("key"), + key + ) + ), + A2( + elm$html$Html$map, + A2( + elm$browser$Debugger$Expando$Index, + elm$browser$Debugger$Expando$Value, + index + ), + A2( + elm$browser$Debugger$Expando$view, + elm$core$Maybe$Just("value"), + value + ) + ) + ]) + ); + } + }); + var elm$browser$Debugger$Expando$viewDictionaryOpen = function( + keyValuePairs + ) { + return A2( + elm$html$Html$div, + _List_Nil, + A2( + elm$core$List$indexedMap, + elm$browser$Debugger$Expando$viewDictionaryEntry, + keyValuePairs + ) + ); + }; + var elm$browser$Debugger$Expando$viewRecord = F3(function( + maybeKey, + isClosed, + record + ) { + var _n1 = isClosed + ? _Utils_Tuple3( + elm$browser$Debugger$Expando$viewTinyRecord(record).b, + elm$html$Html$text(""), + elm$html$Html$text("") + ) + : _Utils_Tuple3( + _List_fromArray([elm$html$Html$text("{")]), + elm$browser$Debugger$Expando$viewRecordOpen(record), + A2( + elm$html$Html$div, + elm$browser$Debugger$Expando$leftPad( + elm$core$Maybe$Just(_Utils_Tuple0) + ), + _List_fromArray([elm$html$Html$text("}")]) + ) + ); + var start = _n1.a; + var middle = _n1.b; + var end = _n1.c; + return A2( + elm$html$Html$div, + elm$browser$Debugger$Expando$leftPad(maybeKey), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Events$onClick(elm$browser$Debugger$Expando$Toggle) + ]), + A3( + elm$browser$Debugger$Expando$lineStarter, + maybeKey, + elm$core$Maybe$Just(isClosed), + start + ) + ), + middle, + end + ]) + ); + }); + var elm$browser$Debugger$Expando$viewRecordEntry = function(_n0) { + var field = _n0.a; + var value = _n0.b; + return A2( + elm$html$Html$map, + elm$browser$Debugger$Expando$Field(field), + A2(elm$browser$Debugger$Expando$view, elm$core$Maybe$Just(field), value) + ); + }; + var elm$browser$Debugger$Expando$viewRecordOpen = function(record) { + return A2( + elm$html$Html$div, + _List_Nil, + A2( + elm$core$List$map, + elm$browser$Debugger$Expando$viewRecordEntry, + elm$core$Dict$toList(record) + ) + ); + }; + var elm$browser$Debugger$Expando$viewSequence = F4(function( + maybeKey, + seqType, + isClosed, + valueList + ) { + var starter = A2( + elm$browser$Debugger$Expando$seqTypeToString, + elm$core$List$length(valueList), + seqType + ); + return A2( + elm$html$Html$div, + elm$browser$Debugger$Expando$leftPad(maybeKey), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Events$onClick(elm$browser$Debugger$Expando$Toggle) + ]), + A3( + elm$browser$Debugger$Expando$lineStarter, + maybeKey, + elm$core$Maybe$Just(isClosed), + _List_fromArray([elm$html$Html$text(starter)]) + ) + ), + isClosed + ? elm$html$Html$text("") + : elm$browser$Debugger$Expando$viewSequenceOpen(valueList) + ]) + ); + }); + var elm$browser$Debugger$Expando$viewSequenceOpen = function(values) { + return A2( + elm$html$Html$div, + _List_Nil, + A2( + elm$core$List$indexedMap, + elm$browser$Debugger$Expando$viewConstructorEntry, + values + ) + ); + }; + var elm$browser$Debugger$Main$ExpandoMsg = function(a) { + return { $: "ExpandoMsg", a: a }; + }; + var elm$html$Html$Attributes$class = elm$html$Html$Attributes$stringProperty( + "className" + ); + var elm$html$Html$Attributes$title = elm$html$Html$Attributes$stringProperty( + "title" + ); + var elm$browser$Debugger$History$viewMessage = F3(function( + currentIndex, + index, + msg + ) { + var messageName = _Debugger_messageToString(msg); + var className = _Utils_eq(currentIndex, index) + ? "elm-debugger-entry elm-debugger-entry-selected" + : "elm-debugger-entry"; + return A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class(className), + elm$html$Html$Events$onClick(index) + ]), + _List_fromArray([ + A2( + elm$html$Html$span, + _List_fromArray([ + elm$html$Html$Attributes$title(messageName), + elm$html$Html$Attributes$class("elm-debugger-entry-content") + ]), + _List_fromArray([elm$html$Html$text(messageName)]) + ), + A2( + elm$html$Html$span, + _List_fromArray([ + elm$html$Html$Attributes$class("elm-debugger-entry-index") + ]), + _List_fromArray([elm$html$Html$text(elm$core$String$fromInt(index))]) + ) + ]) + ); + }); + var elm$virtual_dom$VirtualDom$lazy3 = _VirtualDom_lazy3; + var elm$html$Html$Lazy$lazy3 = elm$virtual_dom$VirtualDom$lazy3; + var elm$browser$Debugger$History$consMsg = F3(function( + currentIndex, + msg, + _n0 + ) { + var index = _n0.a; + var rest = _n0.b; + return _Utils_Tuple2( + index - 1, + A2( + elm$core$List$cons, + A4( + elm$html$Html$Lazy$lazy3, + elm$browser$Debugger$History$viewMessage, + currentIndex, + index, + msg + ), + rest + ) + ); + }); + var elm$virtual_dom$VirtualDom$node = function(tag) { + return _VirtualDom_node(_VirtualDom_noScript(tag)); + }; + var elm$html$Html$node = elm$virtual_dom$VirtualDom$node; + var elm$browser$Debugger$History$styles = A3( + elm$html$Html$node, + "style", + _List_Nil, + _List_fromArray([ + elm$html$Html$text( + "\n\n.elm-debugger-entry {\n cursor: pointer;\n width: 100%;\n}\n\n.elm-debugger-entry:hover {\n background-color: rgb(41, 41, 41);\n}\n\n.elm-debugger-entry-selected, .elm-debugger-entry-selected:hover {\n background-color: rgb(10, 10, 10);\n}\n\n.elm-debugger-entry-content {\n width: calc(100% - 7ch);\n padding-top: 4px;\n padding-bottom: 4px;\n padding-left: 1ch;\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n display: inline-block;\n}\n\n.elm-debugger-entry-index {\n color: #666;\n width: 5ch;\n padding-top: 4px;\n padding-bottom: 4px;\n padding-right: 1ch;\n text-align: right;\n display: block;\n float: right;\n}\n\n" + ) + ]) + ); + var elm$browser$Debugger$History$maxSnapshotSize = 64; + var elm$core$Elm$JsArray$foldl = _JsArray_foldl; + var elm$core$Array$foldl = F3(function(func, baseCase, _n0) { + var tree = _n0.c; + var tail = _n0.d; + var helper = F2(function(node, acc) { + if (node.$ === "SubTree") { + var subTree = node.a; + return A3(elm$core$Elm$JsArray$foldl, helper, acc, subTree); + } else { + var values = node.a; + return A3(elm$core$Elm$JsArray$foldl, func, acc, values); + } + }); + return A3( + elm$core$Elm$JsArray$foldl, + func, + A3(elm$core$Elm$JsArray$foldl, helper, baseCase, tree), + tail + ); + }); + var elm$browser$Debugger$History$viewSnapshot = F3(function( + currentIndex, + index, + _n0 + ) { + var messages = _n0.messages; + return A2( + elm$html$Html$div, + _List_Nil, + A3( + elm$core$Array$foldl, + elm$browser$Debugger$History$consMsg(currentIndex), + _Utils_Tuple2(index - 1, _List_Nil), + messages + ).b + ); + }); + var elm$browser$Debugger$History$consSnapshot = F3(function( + currentIndex, + snapshot, + _n0 + ) { + var index = _n0.a; + var rest = _n0.b; + var nextIndex = index - elm$browser$Debugger$History$maxSnapshotSize; + var currentIndexHelp = + _Utils_cmp(nextIndex, currentIndex) < 1 && + _Utils_cmp(currentIndex, index) < 0 + ? currentIndex + : -1; + return _Utils_Tuple2( + index - elm$browser$Debugger$History$maxSnapshotSize, + A2( + elm$core$List$cons, + A4( + elm$html$Html$Lazy$lazy3, + elm$browser$Debugger$History$viewSnapshot, + currentIndexHelp, + index, + snapshot + ), + rest + ) + ); + }); + var elm$core$Array$length = function(_n0) { + var len = _n0.a; + return len; + }; + var elm$browser$Debugger$History$viewSnapshots = F2(function( + currentIndex, + snapshots + ) { + var highIndex = + elm$browser$Debugger$History$maxSnapshotSize * + elm$core$Array$length(snapshots); + return A2( + elm$html$Html$div, + _List_Nil, + A3( + elm$core$Array$foldr, + elm$browser$Debugger$History$consSnapshot(currentIndex), + _Utils_Tuple2(highIndex, _List_Nil), + snapshots + ).b + ); + }); + var elm$virtual_dom$VirtualDom$lazy2 = _VirtualDom_lazy2; + var elm$html$Html$Lazy$lazy2 = elm$virtual_dom$VirtualDom$lazy2; + var elm$browser$Debugger$History$view = F2(function(maybeIndex, _n0) { + var snapshots = _n0.snapshots; + var recent = _n0.recent; + var numMessages = _n0.numMessages; + var _n1 = (function() { + if (maybeIndex.$ === "Nothing") { + return _Utils_Tuple2(-1, "calc(100% - 24px)"); + } else { + var i = maybeIndex.a; + return _Utils_Tuple2(i, "calc(100% - 54px)"); + } + })(); + var index = _n1.a; + var height = _n1.b; + var newStuff = A3( + elm$core$List$foldl, + elm$browser$Debugger$History$consMsg(index), + _Utils_Tuple2(numMessages - 1, _List_Nil), + recent.messages + ).b; + var oldStuff = A3( + elm$html$Html$Lazy$lazy2, + elm$browser$Debugger$History$viewSnapshots, + index, + snapshots + ); + return A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$id("elm-debugger-sidebar"), + A2(elm$html$Html$Attributes$style, "width", "100%"), + A2(elm$html$Html$Attributes$style, "overflow-y", "auto"), + A2(elm$html$Html$Attributes$style, "height", height) + ]), + A2( + elm$core$List$cons, + elm$browser$Debugger$History$styles, + A2(elm$core$List$cons, oldStuff, newStuff) + ) + ); + }); + var elm$browser$Debugger$Main$Jump = function(a) { + return { $: "Jump", a: a }; + }; + var elm$browser$Debugger$Main$resumeStyle = + "\n\n.elm-debugger-resume {\n width: 100%;\n height: 30px;\n line-height: 30px;\n cursor: pointer;\n}\n\n.elm-debugger-resume:hover {\n background-color: rgb(41, 41, 41);\n}\n\n"; + var elm$browser$Debugger$Main$viewResumeButton = function(maybeIndex) { + if (maybeIndex.$ === "Nothing") { + return elm$html$Html$text(""); + } else { + return A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Events$onClick(elm$browser$Debugger$Main$Resume), + elm$html$Html$Attributes$class("elm-debugger-resume") + ]), + _List_fromArray([ + elm$html$Html$text("Resume"), + A3( + elm$html$Html$node, + "style", + _List_Nil, + _List_fromArray([ + elm$html$Html$text(elm$browser$Debugger$Main$resumeStyle) + ]) + ) + ]) + ); + } + }; + var elm$browser$Debugger$Main$viewTextButton = F2(function(msg, label) { + return A2( + elm$html$Html$span, + _List_fromArray([ + elm$html$Html$Events$onClick(msg), + A2(elm$html$Html$Attributes$style, "cursor", "pointer") + ]), + _List_fromArray([elm$html$Html$text(label)]) + ); + }); + var elm$browser$Debugger$Main$playButton = function(maybeIndex) { + return A2( + elm$html$Html$div, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "width", "100%"), + A2(elm$html$Html$Attributes$style, "text-align", "center"), + A2( + elm$html$Html$Attributes$style, + "background-color", + "rgb(50, 50, 50)" + ) + ]), + _List_fromArray([ + elm$browser$Debugger$Main$viewResumeButton(maybeIndex), + A2( + elm$html$Html$div, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "width", "100%"), + A2(elm$html$Html$Attributes$style, "height", "24px"), + A2(elm$html$Html$Attributes$style, "line-height", "24px"), + A2(elm$html$Html$Attributes$style, "font-size", "12px") + ]), + _List_fromArray([ + A2( + elm$browser$Debugger$Main$viewTextButton, + elm$browser$Debugger$Main$Import, + "Import" + ), + elm$html$Html$text(" / "), + A2( + elm$browser$Debugger$Main$viewTextButton, + elm$browser$Debugger$Main$Export, + "Export" + ) + ]) + ) + ]) + ); + }; + var elm$browser$Debugger$Main$viewSidebar = F2(function(state, history) { + var maybeIndex = (function() { + if (state.$ === "Running") { + return elm$core$Maybe$Nothing; + } else { + var index = state.a; + return elm$core$Maybe$Just(index); + } + })(); + return A2( + elm$html$Html$div, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "display", "block"), + A2(elm$html$Html$Attributes$style, "float", "left"), + A2(elm$html$Html$Attributes$style, "width", "30ch"), + A2(elm$html$Html$Attributes$style, "height", "100%"), + A2(elm$html$Html$Attributes$style, "color", "white"), + A2( + elm$html$Html$Attributes$style, + "background-color", + "rgb(61, 61, 61)" + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$map, + elm$browser$Debugger$Main$Jump, + A2(elm$browser$Debugger$History$view, maybeIndex, history) + ), + elm$browser$Debugger$Main$playButton(maybeIndex) + ]) + ); + }); + var elm$browser$Debugger$Main$popoutView = function(_n0) { + var history = _n0.history; + var state = _n0.state; + var expando = _n0.expando; + return A3( + elm$html$Html$node, + "body", + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "margin", "0"), + A2(elm$html$Html$Attributes$style, "padding", "0"), + A2(elm$html$Html$Attributes$style, "width", "100%"), + A2(elm$html$Html$Attributes$style, "height", "100%"), + A2(elm$html$Html$Attributes$style, "font-family", "monospace"), + A2(elm$html$Html$Attributes$style, "overflow", "auto") + ]), + _List_fromArray([ + A2(elm$browser$Debugger$Main$viewSidebar, state, history), + A2( + elm$html$Html$map, + elm$browser$Debugger$Main$ExpandoMsg, + A2( + elm$html$Html$div, + _List_fromArray([ + A2(elm$html$Html$Attributes$style, "display", "block"), + A2(elm$html$Html$Attributes$style, "float", "left"), + A2(elm$html$Html$Attributes$style, "height", "100%"), + A2(elm$html$Html$Attributes$style, "width", "calc(100% - 30ch)"), + A2(elm$html$Html$Attributes$style, "margin", "0"), + A2(elm$html$Html$Attributes$style, "overflow", "auto"), + A2(elm$html$Html$Attributes$style, "cursor", "default") + ]), + _List_fromArray([ + A2( + elm$browser$Debugger$Expando$view, + elm$core$Maybe$Nothing, + expando + ) + ]) + ) + ) + ]) + ); + }; + var elm$browser$Debugger$Overlay$BlockAll = { $: "BlockAll" }; + var elm$browser$Debugger$Overlay$BlockMost = { $: "BlockMost" }; + var elm$browser$Debugger$Overlay$BlockNone = { $: "BlockNone" }; + var elm$browser$Debugger$Overlay$toBlockerType = F2(function( + isPaused, + state + ) { + switch (state.$) { + case "None": + return isPaused + ? elm$browser$Debugger$Overlay$BlockAll + : elm$browser$Debugger$Overlay$BlockNone; + case "BadMetadata": + return elm$browser$Debugger$Overlay$BlockMost; + case "BadImport": + return elm$browser$Debugger$Overlay$BlockMost; + default: + return elm$browser$Debugger$Overlay$BlockMost; + } + }); + var elm$browser$Debugger$Main$toBlockerType = function(model) { + return A2( + elm$browser$Debugger$Overlay$toBlockerType, + elm$browser$Debugger$Main$isPaused(model.state), + model.overlay + ); + }; + var elm$core$Dict$RBEmpty_elm_builtin = { $: "RBEmpty_elm_builtin" }; + var elm$core$Dict$RBNode_elm_builtin = F5(function(a, b, c, d, e) { + return { $: "RBNode_elm_builtin", a: a, b: b, c: c, d: d, e: e }; + }); + var elm$core$Dict$map = F2(function(func, dict) { + if (dict.$ === "RBEmpty_elm_builtin") { + return elm$core$Dict$RBEmpty_elm_builtin; + } else { + var color = dict.a; + var key = dict.b; + var value = dict.c; + var left = dict.d; + var right = dict.e; + return A5( + elm$core$Dict$RBNode_elm_builtin, + color, + key, + A2(func, key, value), + A2(elm$core$Dict$map, func, left), + A2(elm$core$Dict$map, func, right) + ); + } + }); + var elm$core$Dict$sizeHelp = F2(function(n, dict) { + sizeHelp: while (true) { + if (dict.$ === "RBEmpty_elm_builtin") { + return n; + } else { + var left = dict.d; + var right = dict.e; + var $temp$n = A2(elm$core$Dict$sizeHelp, n + 1, right), + $temp$dict = left; + n = $temp$n; + dict = $temp$dict; + continue sizeHelp; + } + } + }); + var elm$core$Dict$size = function(dict) { + return A2(elm$core$Dict$sizeHelp, 0, dict); + }; + var elm$browser$Debugger$Expando$initHelp = F2(function(isOuter, expando) { + switch (expando.$) { + case "S": + return expando; + case "Primitive": + return expando; + case "Sequence": + var seqType = expando.a; + var isClosed = expando.b; + var items = expando.c; + return isOuter + ? A3( + elm$browser$Debugger$Expando$Sequence, + seqType, + false, + A2( + elm$core$List$map, + elm$browser$Debugger$Expando$initHelp(false), + items + ) + ) + : elm$core$List$length(items) <= 8 + ? A3(elm$browser$Debugger$Expando$Sequence, seqType, false, items) + : expando; + case "Dictionary": + var isClosed = expando.a; + var keyValuePairs = expando.b; + return isOuter + ? A2( + elm$browser$Debugger$Expando$Dictionary, + false, + A2( + elm$core$List$map, + function(_n1) { + var k = _n1.a; + var v = _n1.b; + return _Utils_Tuple2( + k, + A2(elm$browser$Debugger$Expando$initHelp, false, v) + ); + }, + keyValuePairs + ) + ) + : elm$core$List$length(keyValuePairs) <= 8 + ? A2(elm$browser$Debugger$Expando$Dictionary, false, keyValuePairs) + : expando; + case "Record": + var isClosed = expando.a; + var entries = expando.b; + return isOuter + ? A2( + elm$browser$Debugger$Expando$Record, + false, + A2( + elm$core$Dict$map, + F2(function(_n2, v) { + return A2(elm$browser$Debugger$Expando$initHelp, false, v); + }), + entries + ) + ) + : elm$core$Dict$size(entries) <= 4 + ? A2(elm$browser$Debugger$Expando$Record, false, entries) + : expando; + default: + var maybeName = expando.a; + var isClosed = expando.b; + var args = expando.c; + return isOuter + ? A3( + elm$browser$Debugger$Expando$Constructor, + maybeName, + false, + A2( + elm$core$List$map, + elm$browser$Debugger$Expando$initHelp(false), + args + ) + ) + : elm$core$List$length(args) <= 4 + ? A3( + elm$browser$Debugger$Expando$Constructor, + maybeName, + false, + args + ) + : expando; + } + }); + var elm$browser$Debugger$Expando$init = function(value) { + return A2( + elm$browser$Debugger$Expando$initHelp, + true, + _Debugger_init(value) + ); + }; + var elm$browser$Debugger$History$History = F3(function( + snapshots, + recent, + numMessages + ) { + return { numMessages: numMessages, recent: recent, snapshots: snapshots }; + }); + var elm$browser$Debugger$History$RecentHistory = F3(function( + model, + messages, + numMessages + ) { + return { messages: messages, model: model, numMessages: numMessages }; + }); + var elm$browser$Debugger$History$empty = function(model) { + return A3( + elm$browser$Debugger$History$History, + elm$core$Array$empty, + A3(elm$browser$Debugger$History$RecentHistory, model, _List_Nil, 0), + 0 + ); + }; + var elm$browser$Debugger$Main$Running = function(a) { + return { $: "Running", a: a }; + }; + var elm$browser$Debugger$Metadata$Error = F2(function(message, problems) { + return { message: message, problems: problems }; + }); + var elm$browser$Debugger$Metadata$Metadata = F2(function(versions, types) { + return { types: types, versions: versions }; + }); + var elm$browser$Debugger$Metadata$Types = F3(function( + message, + aliases, + unions + ) { + return { aliases: aliases, message: message, unions: unions }; + }); + var elm$browser$Debugger$Metadata$Alias = F2(function(args, tipe) { + return { args: args, tipe: tipe }; + }); + var elm$json$Json$Decode$list = _Json_decodeList; + var elm$browser$Debugger$Metadata$decodeAlias = A3( + elm$json$Json$Decode$map2, + elm$browser$Debugger$Metadata$Alias, + A2( + elm$json$Json$Decode$field, + "args", + elm$json$Json$Decode$list(elm$json$Json$Decode$string) + ), + A2(elm$json$Json$Decode$field, "type", elm$json$Json$Decode$string) + ); + var elm$browser$Debugger$Metadata$Union = F2(function(args, tags) { + return { args: args, tags: tags }; + }); + var elm$core$Dict$empty = elm$core$Dict$RBEmpty_elm_builtin; + var elm$core$Dict$Black = { $: "Black" }; + var elm$core$Basics$compare = _Utils_compare; + var elm$core$Dict$Red = { $: "Red" }; + var elm$core$Dict$balance = F5(function(color, key, value, left, right) { + if (right.$ === "RBNode_elm_builtin" && right.a.$ === "Red") { + var _n1 = right.a; + var rK = right.b; + var rV = right.c; + var rLeft = right.d; + var rRight = right.e; + if (left.$ === "RBNode_elm_builtin" && left.a.$ === "Red") { + var _n3 = left.a; + var lK = left.b; + var lV = left.c; + var lLeft = left.d; + var lRight = left.e; + return A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + key, + value, + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + lK, + lV, + lLeft, + lRight + ), + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + rK, + rV, + rLeft, + rRight + ) + ); + } else { + return A5( + elm$core$Dict$RBNode_elm_builtin, + color, + rK, + rV, + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + key, + value, + left, + rLeft + ), + rRight + ); + } + } else { + if ( + left.$ === "RBNode_elm_builtin" && + left.a.$ === "Red" && + left.d.$ === "RBNode_elm_builtin" && + left.d.a.$ === "Red" + ) { + var _n5 = left.a; + var lK = left.b; + var lV = left.c; + var _n6 = left.d; + var _n7 = _n6.a; + var llK = _n6.b; + var llV = _n6.c; + var llLeft = _n6.d; + var llRight = _n6.e; + var lRight = left.e; + return A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + lK, + lV, + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + llK, + llV, + llLeft, + llRight + ), + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + key, + value, + lRight, + right + ) + ); + } else { + return A5( + elm$core$Dict$RBNode_elm_builtin, + color, + key, + value, + left, + right + ); + } + } + }); + var elm$core$Dict$insertHelp = F3(function(key, value, dict) { + if (dict.$ === "RBEmpty_elm_builtin") { + return A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + key, + value, + elm$core$Dict$RBEmpty_elm_builtin, + elm$core$Dict$RBEmpty_elm_builtin + ); + } else { + var nColor = dict.a; + var nKey = dict.b; + var nValue = dict.c; + var nLeft = dict.d; + var nRight = dict.e; + var _n1 = A2(elm$core$Basics$compare, key, nKey); + switch (_n1.$) { + case "LT": + return A5( + elm$core$Dict$balance, + nColor, + nKey, + nValue, + A3(elm$core$Dict$insertHelp, key, value, nLeft), + nRight + ); + case "EQ": + return A5( + elm$core$Dict$RBNode_elm_builtin, + nColor, + nKey, + value, + nLeft, + nRight + ); + default: + return A5( + elm$core$Dict$balance, + nColor, + nKey, + nValue, + nLeft, + A3(elm$core$Dict$insertHelp, key, value, nRight) + ); + } + } + }); + var elm$core$Dict$insert = F3(function(key, value, dict) { + var _n0 = A3(elm$core$Dict$insertHelp, key, value, dict); + if (_n0.$ === "RBNode_elm_builtin" && _n0.a.$ === "Red") { + var _n1 = _n0.a; + var k = _n0.b; + var v = _n0.c; + var l = _n0.d; + var r = _n0.e; + return A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + k, + v, + l, + r + ); + } else { + var x = _n0; + return x; + } + }); + var elm$core$Dict$fromList = function(assocs) { + return A3( + elm$core$List$foldl, + F2(function(_n0, dict) { + var key = _n0.a; + var value = _n0.b; + return A3(elm$core$Dict$insert, key, value, dict); + }), + elm$core$Dict$empty, + assocs + ); + }; + var elm$json$Json$Decode$keyValuePairs = _Json_decodeKeyValuePairs; + var elm$json$Json$Decode$dict = function(decoder) { + return A2( + elm$json$Json$Decode$map, + elm$core$Dict$fromList, + elm$json$Json$Decode$keyValuePairs(decoder) + ); + }; + var elm$browser$Debugger$Metadata$decodeUnion = A3( + elm$json$Json$Decode$map2, + elm$browser$Debugger$Metadata$Union, + A2( + elm$json$Json$Decode$field, + "args", + elm$json$Json$Decode$list(elm$json$Json$Decode$string) + ), + A2( + elm$json$Json$Decode$field, + "tags", + elm$json$Json$Decode$dict( + elm$json$Json$Decode$list(elm$json$Json$Decode$string) + ) + ) + ); + var elm$json$Json$Decode$map3 = _Json_map3; + var elm$browser$Debugger$Metadata$decodeTypes = A4( + elm$json$Json$Decode$map3, + elm$browser$Debugger$Metadata$Types, + A2(elm$json$Json$Decode$field, "message", elm$json$Json$Decode$string), + A2( + elm$json$Json$Decode$field, + "aliases", + elm$json$Json$Decode$dict(elm$browser$Debugger$Metadata$decodeAlias) + ), + A2( + elm$json$Json$Decode$field, + "unions", + elm$json$Json$Decode$dict(elm$browser$Debugger$Metadata$decodeUnion) + ) + ); + var elm$browser$Debugger$Metadata$Versions = function(elm) { + return { elm: elm }; + }; + var elm$browser$Debugger$Metadata$decodeVersions = A2( + elm$json$Json$Decode$map, + elm$browser$Debugger$Metadata$Versions, + A2(elm$json$Json$Decode$field, "elm", elm$json$Json$Decode$string) + ); + var elm$browser$Debugger$Metadata$decoder = A3( + elm$json$Json$Decode$map2, + elm$browser$Debugger$Metadata$Metadata, + A2( + elm$json$Json$Decode$field, + "versions", + elm$browser$Debugger$Metadata$decodeVersions + ), + A2( + elm$json$Json$Decode$field, + "types", + elm$browser$Debugger$Metadata$decodeTypes + ) + ); + var elm$browser$Debugger$Metadata$ProblemType = F2(function(name, problems) { + return { name: name, problems: problems }; + }); + var elm$core$String$contains = _String_contains; + var elm$browser$Debugger$Metadata$hasProblem = F2(function(tipe, _n0) { + var problem = _n0.a; + var token = _n0.b; + return A2(elm$core$String$contains, token, tipe) + ? elm$core$Maybe$Just(problem) + : elm$core$Maybe$Nothing; + }); + var elm$browser$Debugger$Metadata$Decoder = { $: "Decoder" }; + var elm$browser$Debugger$Metadata$Function = { $: "Function" }; + var elm$browser$Debugger$Metadata$Process = { $: "Process" }; + var elm$browser$Debugger$Metadata$Program = { $: "Program" }; + var elm$browser$Debugger$Metadata$Request = { $: "Request" }; + var elm$browser$Debugger$Metadata$Socket = { $: "Socket" }; + var elm$browser$Debugger$Metadata$Task = { $: "Task" }; + var elm$browser$Debugger$Metadata$VirtualDom = { $: "VirtualDom" }; + var elm$browser$Debugger$Metadata$problemTable = _List_fromArray([ + _Utils_Tuple2(elm$browser$Debugger$Metadata$Function, "->"), + _Utils_Tuple2(elm$browser$Debugger$Metadata$Decoder, "Json.Decode.Decoder"), + _Utils_Tuple2(elm$browser$Debugger$Metadata$Task, "Task.Task"), + _Utils_Tuple2(elm$browser$Debugger$Metadata$Process, "Process.Id"), + _Utils_Tuple2( + elm$browser$Debugger$Metadata$Socket, + "WebSocket.LowLevel.WebSocket" + ), + _Utils_Tuple2(elm$browser$Debugger$Metadata$Request, "Http.Request"), + _Utils_Tuple2(elm$browser$Debugger$Metadata$Program, "Platform.Program"), + _Utils_Tuple2(elm$browser$Debugger$Metadata$VirtualDom, "VirtualDom.Node"), + _Utils_Tuple2( + elm$browser$Debugger$Metadata$VirtualDom, + "VirtualDom.Attribute" + ) + ]); + var elm$core$List$maybeCons = F3(function(f, mx, xs) { + var _n0 = f(mx); + if (_n0.$ === "Just") { + var x = _n0.a; + return A2(elm$core$List$cons, x, xs); + } else { + return xs; + } + }); + var elm$core$List$filterMap = F2(function(f, xs) { + return A3(elm$core$List$foldr, elm$core$List$maybeCons(f), _List_Nil, xs); + }); + var elm$browser$Debugger$Metadata$findProblems = function(tipe) { + return A2( + elm$core$List$filterMap, + elm$browser$Debugger$Metadata$hasProblem(tipe), + elm$browser$Debugger$Metadata$problemTable + ); + }; + var elm$browser$Debugger$Metadata$collectBadAliases = F3(function( + name, + _n0, + list + ) { + var tipe = _n0.tipe; + var _n1 = elm$browser$Debugger$Metadata$findProblems(tipe); + if (!_n1.b) { + return list; + } else { + var problems = _n1; + return A2( + elm$core$List$cons, + A2(elm$browser$Debugger$Metadata$ProblemType, name, problems), + list + ); + } + }); + var elm$core$Dict$values = function(dict) { + return A3( + elm$core$Dict$foldr, + F3(function(key, value, valueList) { + return A2(elm$core$List$cons, value, valueList); + }), + _List_Nil, + dict + ); + }; + var elm$core$List$append = F2(function(xs, ys) { + if (!ys.b) { + return xs; + } else { + return A3(elm$core$List$foldr, elm$core$List$cons, ys, xs); + } + }); + var elm$core$List$concat = function(lists) { + return A3(elm$core$List$foldr, elm$core$List$append, _List_Nil, lists); + }; + var elm$core$List$concatMap = F2(function(f, list) { + return elm$core$List$concat(A2(elm$core$List$map, f, list)); + }); + var elm$browser$Debugger$Metadata$collectBadUnions = F3(function( + name, + _n0, + list + ) { + var tags = _n0.tags; + var _n1 = A2( + elm$core$List$concatMap, + elm$browser$Debugger$Metadata$findProblems, + elm$core$List$concat(elm$core$Dict$values(tags)) + ); + if (!_n1.b) { + return list; + } else { + var problems = _n1; + return A2( + elm$core$List$cons, + A2(elm$browser$Debugger$Metadata$ProblemType, name, problems), + list + ); + } + }); + var elm$core$Dict$foldl = F3(function(func, acc, dict) { + foldl: while (true) { + if (dict.$ === "RBEmpty_elm_builtin") { + return acc; + } else { + var key = dict.b; + var value = dict.c; + var left = dict.d; + var right = dict.e; + var $temp$func = func, + $temp$acc = A3( + func, + key, + value, + A3(elm$core$Dict$foldl, func, acc, left) + ), + $temp$dict = right; + func = $temp$func; + acc = $temp$acc; + dict = $temp$dict; + continue foldl; + } + } + }); + var elm$browser$Debugger$Metadata$isPortable = function(_n0) { + var types = _n0.types; + var badAliases = A3( + elm$core$Dict$foldl, + elm$browser$Debugger$Metadata$collectBadAliases, + _List_Nil, + types.aliases + ); + var _n1 = A3( + elm$core$Dict$foldl, + elm$browser$Debugger$Metadata$collectBadUnions, + badAliases, + types.unions + ); + if (!_n1.b) { + return elm$core$Maybe$Nothing; + } else { + var problems = _n1; + return elm$core$Maybe$Just( + A2(elm$browser$Debugger$Metadata$Error, types.message, problems) + ); + } + }; + var elm$json$Json$Decode$decodeValue = _Json_run; + var elm$browser$Debugger$Metadata$decode = function(value) { + var _n0 = A2( + elm$json$Json$Decode$decodeValue, + elm$browser$Debugger$Metadata$decoder, + value + ); + if (_n0.$ === "Err") { + return elm$core$Result$Err( + A2( + elm$browser$Debugger$Metadata$Error, + "The compiler is generating bad metadata. This is a compiler bug!", + _List_Nil + ) + ); + } else { + var metadata = _n0.a; + var _n1 = elm$browser$Debugger$Metadata$isPortable(metadata); + if (_n1.$ === "Nothing") { + return elm$core$Result$Ok(metadata); + } else { + var error = _n1.a; + return elm$core$Result$Err(error); + } + } + }; + var elm$browser$Debugger$Overlay$None = { $: "None" }; + var elm$browser$Debugger$Overlay$none = elm$browser$Debugger$Overlay$None; + var elm$core$Platform$Cmd$map = _Platform_map; + var elm$browser$Debugger$Main$wrapInit = F4(function( + metadata, + popout, + init, + flags + ) { + var _n0 = init(flags); + var userModel = _n0.a; + var userCommands = _n0.b; + return _Utils_Tuple2( + { + expando: elm$browser$Debugger$Expando$init(userModel), + history: elm$browser$Debugger$History$empty(userModel), + metadata: elm$browser$Debugger$Metadata$decode(metadata), + overlay: elm$browser$Debugger$Overlay$none, + popout: popout, + state: elm$browser$Debugger$Main$Running(userModel) + }, + A2( + elm$core$Platform$Cmd$map, + elm$browser$Debugger$Main$UserMsg, + userCommands + ) + ); + }); + var elm$browser$Debugger$Main$getLatestModel = function(state) { + if (state.$ === "Running") { + var model = state.a; + return model; + } else { + var model = state.c; + return model; + } + }; + var elm$core$Platform$Sub$map = _Platform_map; + var elm$browser$Debugger$Main$wrapSubs = F2(function(subscriptions, model) { + return A2( + elm$core$Platform$Sub$map, + elm$browser$Debugger$Main$UserMsg, + subscriptions(elm$browser$Debugger$Main$getLatestModel(model.state)) + ); + }); + var elm$core$Dict$get = F2(function(targetKey, dict) { + get: while (true) { + if (dict.$ === "RBEmpty_elm_builtin") { + return elm$core$Maybe$Nothing; + } else { + var key = dict.b; + var value = dict.c; + var left = dict.d; + var right = dict.e; + var _n1 = A2(elm$core$Basics$compare, targetKey, key); + switch (_n1.$) { + case "LT": + var $temp$targetKey = targetKey, + $temp$dict = left; + targetKey = $temp$targetKey; + dict = $temp$dict; + continue get; + case "EQ": + return elm$core$Maybe$Just(value); + default: + var $temp$targetKey = targetKey, + $temp$dict = right; + targetKey = $temp$targetKey; + dict = $temp$dict; + continue get; + } + } + } + }); + var elm$browser$Debugger$Expando$mergeDictHelp = F3(function( + oldDict, + key, + value + ) { + var _n12 = A2(elm$core$Dict$get, key, oldDict); + if (_n12.$ === "Nothing") { + return value; + } else { + var oldValue = _n12.a; + return A2(elm$browser$Debugger$Expando$mergeHelp, oldValue, value); + } + }); + var elm$browser$Debugger$Expando$mergeHelp = F2(function(old, _new) { + var _n3 = _Utils_Tuple2(old, _new); + _n3$6: while (true) { + switch (_n3.b.$) { + case "S": + return _new; + case "Primitive": + return _new; + case "Sequence": + if (_n3.a.$ === "Sequence") { + var _n4 = _n3.a; + var isClosed = _n4.b; + var oldValues = _n4.c; + var _n5 = _n3.b; + var seqType = _n5.a; + var newValues = _n5.c; + return A3( + elm$browser$Debugger$Expando$Sequence, + seqType, + isClosed, + A2( + elm$browser$Debugger$Expando$mergeListHelp, + oldValues, + newValues + ) + ); + } else { + break _n3$6; + } + case "Dictionary": + if (_n3.a.$ === "Dictionary") { + var _n6 = _n3.a; + var isClosed = _n6.a; + var _n7 = _n3.b; + var keyValuePairs = _n7.b; + return A2( + elm$browser$Debugger$Expando$Dictionary, + isClosed, + keyValuePairs + ); + } else { + break _n3$6; + } + case "Record": + if (_n3.a.$ === "Record") { + var _n8 = _n3.a; + var isClosed = _n8.a; + var oldDict = _n8.b; + var _n9 = _n3.b; + var newDict = _n9.b; + return A2( + elm$browser$Debugger$Expando$Record, + isClosed, + A2( + elm$core$Dict$map, + elm$browser$Debugger$Expando$mergeDictHelp(oldDict), + newDict + ) + ); + } else { + break _n3$6; + } + default: + if (_n3.a.$ === "Constructor") { + var _n10 = _n3.a; + var isClosed = _n10.b; + var oldValues = _n10.c; + var _n11 = _n3.b; + var maybeName = _n11.a; + var newValues = _n11.c; + return A3( + elm$browser$Debugger$Expando$Constructor, + maybeName, + isClosed, + A2( + elm$browser$Debugger$Expando$mergeListHelp, + oldValues, + newValues + ) + ); + } else { + break _n3$6; + } + } + } + return _new; + }); + var elm$browser$Debugger$Expando$mergeListHelp = F2(function(olds, news) { + var _n0 = _Utils_Tuple2(olds, news); + if (!_n0.a.b) { + return news; + } else { + if (!_n0.b.b) { + return news; + } else { + var _n1 = _n0.a; + var x = _n1.a; + var xs = _n1.b; + var _n2 = _n0.b; + var y = _n2.a; + var ys = _n2.b; + return A2( + elm$core$List$cons, + A2(elm$browser$Debugger$Expando$mergeHelp, x, y), + A2(elm$browser$Debugger$Expando$mergeListHelp, xs, ys) + ); + } + } + }); + var elm$browser$Debugger$Expando$merge = F2(function(value, expando) { + return A2( + elm$browser$Debugger$Expando$mergeHelp, + expando, + _Debugger_init(value) + ); + }); + var elm$browser$Debugger$Expando$updateIndex = F3(function(n, func, list) { + if (!list.b) { + return _List_Nil; + } else { + var x = list.a; + var xs = list.b; + return n <= 0 + ? A2(elm$core$List$cons, func(x), xs) + : A2( + elm$core$List$cons, + x, + A3(elm$browser$Debugger$Expando$updateIndex, n - 1, func, xs) + ); + } + }); + var elm$core$Basics$not = _Basics_not; + var elm$core$Dict$getMin = function(dict) { + getMin: while (true) { + if ( + dict.$ === "RBNode_elm_builtin" && + dict.d.$ === "RBNode_elm_builtin" + ) { + var left = dict.d; + var $temp$dict = left; + dict = $temp$dict; + continue getMin; + } else { + return dict; + } + } + }; + var elm$core$Dict$moveRedLeft = function(dict) { + if ( + dict.$ === "RBNode_elm_builtin" && + dict.d.$ === "RBNode_elm_builtin" && + dict.e.$ === "RBNode_elm_builtin" + ) { + if (dict.e.d.$ === "RBNode_elm_builtin" && dict.e.d.a.$ === "Red") { + var clr = dict.a; + var k = dict.b; + var v = dict.c; + var _n1 = dict.d; + var lClr = _n1.a; + var lK = _n1.b; + var lV = _n1.c; + var lLeft = _n1.d; + var lRight = _n1.e; + var _n2 = dict.e; + var rClr = _n2.a; + var rK = _n2.b; + var rV = _n2.c; + var rLeft = _n2.d; + var _n3 = rLeft.a; + var rlK = rLeft.b; + var rlV = rLeft.c; + var rlL = rLeft.d; + var rlR = rLeft.e; + var rRight = _n2.e; + return A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + rlK, + rlV, + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + k, + v, + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + lK, + lV, + lLeft, + lRight + ), + rlL + ), + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + rK, + rV, + rlR, + rRight + ) + ); + } else { + var clr = dict.a; + var k = dict.b; + var v = dict.c; + var _n4 = dict.d; + var lClr = _n4.a; + var lK = _n4.b; + var lV = _n4.c; + var lLeft = _n4.d; + var lRight = _n4.e; + var _n5 = dict.e; + var rClr = _n5.a; + var rK = _n5.b; + var rV = _n5.c; + var rLeft = _n5.d; + var rRight = _n5.e; + if (clr.$ === "Black") { + return A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + k, + v, + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + lK, + lV, + lLeft, + lRight + ), + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + rK, + rV, + rLeft, + rRight + ) + ); + } else { + return A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + k, + v, + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + lK, + lV, + lLeft, + lRight + ), + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + rK, + rV, + rLeft, + rRight + ) + ); + } + } + } else { + return dict; + } + }; + var elm$core$Dict$moveRedRight = function(dict) { + if ( + dict.$ === "RBNode_elm_builtin" && + dict.d.$ === "RBNode_elm_builtin" && + dict.e.$ === "RBNode_elm_builtin" + ) { + if (dict.d.d.$ === "RBNode_elm_builtin" && dict.d.d.a.$ === "Red") { + var clr = dict.a; + var k = dict.b; + var v = dict.c; + var _n1 = dict.d; + var lClr = _n1.a; + var lK = _n1.b; + var lV = _n1.c; + var _n2 = _n1.d; + var _n3 = _n2.a; + var llK = _n2.b; + var llV = _n2.c; + var llLeft = _n2.d; + var llRight = _n2.e; + var lRight = _n1.e; + var _n4 = dict.e; + var rClr = _n4.a; + var rK = _n4.b; + var rV = _n4.c; + var rLeft = _n4.d; + var rRight = _n4.e; + return A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + lK, + lV, + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + llK, + llV, + llLeft, + llRight + ), + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + k, + v, + lRight, + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + rK, + rV, + rLeft, + rRight + ) + ) + ); + } else { + var clr = dict.a; + var k = dict.b; + var v = dict.c; + var _n5 = dict.d; + var lClr = _n5.a; + var lK = _n5.b; + var lV = _n5.c; + var lLeft = _n5.d; + var lRight = _n5.e; + var _n6 = dict.e; + var rClr = _n6.a; + var rK = _n6.b; + var rV = _n6.c; + var rLeft = _n6.d; + var rRight = _n6.e; + if (clr.$ === "Black") { + return A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + k, + v, + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + lK, + lV, + lLeft, + lRight + ), + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + rK, + rV, + rLeft, + rRight + ) + ); + } else { + return A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + k, + v, + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + lK, + lV, + lLeft, + lRight + ), + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + rK, + rV, + rLeft, + rRight + ) + ); + } + } + } else { + return dict; + } + }; + var elm$core$Dict$removeHelpPrepEQGT = F7(function( + targetKey, + dict, + color, + key, + value, + left, + right + ) { + if (left.$ === "RBNode_elm_builtin" && left.a.$ === "Red") { + var _n1 = left.a; + var lK = left.b; + var lV = left.c; + var lLeft = left.d; + var lRight = left.e; + return A5( + elm$core$Dict$RBNode_elm_builtin, + color, + lK, + lV, + lLeft, + A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Red, + key, + value, + lRight, + right + ) + ); + } else { + _n2$2: while (true) { + if (right.$ === "RBNode_elm_builtin" && right.a.$ === "Black") { + if (right.d.$ === "RBNode_elm_builtin") { + if (right.d.a.$ === "Black") { + var _n3 = right.a; + var _n4 = right.d; + var _n5 = _n4.a; + return elm$core$Dict$moveRedRight(dict); + } else { + break _n2$2; + } + } else { + var _n6 = right.a; + var _n7 = right.d; + return elm$core$Dict$moveRedRight(dict); + } + } else { + break _n2$2; + } + } + return dict; + } + }); + var elm$core$Dict$removeMin = function(dict) { + if (dict.$ === "RBNode_elm_builtin" && dict.d.$ === "RBNode_elm_builtin") { + var color = dict.a; + var key = dict.b; + var value = dict.c; + var left = dict.d; + var lColor = left.a; + var lLeft = left.d; + var right = dict.e; + if (lColor.$ === "Black") { + if (lLeft.$ === "RBNode_elm_builtin" && lLeft.a.$ === "Red") { + var _n3 = lLeft.a; + return A5( + elm$core$Dict$RBNode_elm_builtin, + color, + key, + value, + elm$core$Dict$removeMin(left), + right + ); + } else { + var _n4 = elm$core$Dict$moveRedLeft(dict); + if (_n4.$ === "RBNode_elm_builtin") { + var nColor = _n4.a; + var nKey = _n4.b; + var nValue = _n4.c; + var nLeft = _n4.d; + var nRight = _n4.e; + return A5( + elm$core$Dict$balance, + nColor, + nKey, + nValue, + elm$core$Dict$removeMin(nLeft), + nRight + ); + } else { + return elm$core$Dict$RBEmpty_elm_builtin; + } + } + } else { + return A5( + elm$core$Dict$RBNode_elm_builtin, + color, + key, + value, + elm$core$Dict$removeMin(left), + right + ); + } + } else { + return elm$core$Dict$RBEmpty_elm_builtin; + } + }; + var elm$core$Dict$removeHelp = F2(function(targetKey, dict) { + if (dict.$ === "RBEmpty_elm_builtin") { + return elm$core$Dict$RBEmpty_elm_builtin; + } else { + var color = dict.a; + var key = dict.b; + var value = dict.c; + var left = dict.d; + var right = dict.e; + if (_Utils_cmp(targetKey, key) < 0) { + if (left.$ === "RBNode_elm_builtin" && left.a.$ === "Black") { + var _n4 = left.a; + var lLeft = left.d; + if (lLeft.$ === "RBNode_elm_builtin" && lLeft.a.$ === "Red") { + var _n6 = lLeft.a; + return A5( + elm$core$Dict$RBNode_elm_builtin, + color, + key, + value, + A2(elm$core$Dict$removeHelp, targetKey, left), + right + ); + } else { + var _n7 = elm$core$Dict$moveRedLeft(dict); + if (_n7.$ === "RBNode_elm_builtin") { + var nColor = _n7.a; + var nKey = _n7.b; + var nValue = _n7.c; + var nLeft = _n7.d; + var nRight = _n7.e; + return A5( + elm$core$Dict$balance, + nColor, + nKey, + nValue, + A2(elm$core$Dict$removeHelp, targetKey, nLeft), + nRight + ); + } else { + return elm$core$Dict$RBEmpty_elm_builtin; + } + } + } else { + return A5( + elm$core$Dict$RBNode_elm_builtin, + color, + key, + value, + A2(elm$core$Dict$removeHelp, targetKey, left), + right + ); + } + } else { + return A2( + elm$core$Dict$removeHelpEQGT, + targetKey, + A7( + elm$core$Dict$removeHelpPrepEQGT, + targetKey, + dict, + color, + key, + value, + left, + right + ) + ); + } + } + }); + var elm$core$Dict$removeHelpEQGT = F2(function(targetKey, dict) { + if (dict.$ === "RBNode_elm_builtin") { + var color = dict.a; + var key = dict.b; + var value = dict.c; + var left = dict.d; + var right = dict.e; + if (_Utils_eq(targetKey, key)) { + var _n1 = elm$core$Dict$getMin(right); + if (_n1.$ === "RBNode_elm_builtin") { + var minKey = _n1.b; + var minValue = _n1.c; + return A5( + elm$core$Dict$balance, + color, + minKey, + minValue, + left, + elm$core$Dict$removeMin(right) + ); + } else { + return elm$core$Dict$RBEmpty_elm_builtin; + } + } else { + return A5( + elm$core$Dict$balance, + color, + key, + value, + left, + A2(elm$core$Dict$removeHelp, targetKey, right) + ); + } + } else { + return elm$core$Dict$RBEmpty_elm_builtin; + } + }); + var elm$core$Dict$remove = F2(function(key, dict) { + var _n0 = A2(elm$core$Dict$removeHelp, key, dict); + if (_n0.$ === "RBNode_elm_builtin" && _n0.a.$ === "Red") { + var _n1 = _n0.a; + var k = _n0.b; + var v = _n0.c; + var l = _n0.d; + var r = _n0.e; + return A5( + elm$core$Dict$RBNode_elm_builtin, + elm$core$Dict$Black, + k, + v, + l, + r + ); + } else { + var x = _n0; + return x; + } + }); + var elm$core$Dict$update = F3(function(targetKey, alter, dictionary) { + var _n0 = alter(A2(elm$core$Dict$get, targetKey, dictionary)); + if (_n0.$ === "Just") { + var value = _n0.a; + return A3(elm$core$Dict$insert, targetKey, value, dictionary); + } else { + return A2(elm$core$Dict$remove, targetKey, dictionary); + } + }); + var elm$browser$Debugger$Expando$update = F2(function(msg, value) { + switch (value.$) { + case "S": + return value; + case "Primitive": + return value; + case "Sequence": + var seqType = value.a; + var isClosed = value.b; + var valueList = value.c; + switch (msg.$) { + case "Toggle": + return A3( + elm$browser$Debugger$Expando$Sequence, + seqType, + !isClosed, + valueList + ); + case "Index": + if (msg.a.$ === "None") { + var _n3 = msg.a; + var index = msg.b; + var subMsg = msg.c; + return A3( + elm$browser$Debugger$Expando$Sequence, + seqType, + isClosed, + A3( + elm$browser$Debugger$Expando$updateIndex, + index, + elm$browser$Debugger$Expando$update(subMsg), + valueList + ) + ); + } else { + return value; + } + default: + return value; + } + case "Dictionary": + var isClosed = value.a; + var keyValuePairs = value.b; + switch (msg.$) { + case "Toggle": + return A2( + elm$browser$Debugger$Expando$Dictionary, + !isClosed, + keyValuePairs + ); + case "Index": + var redirect = msg.a; + var index = msg.b; + var subMsg = msg.c; + switch (redirect.$) { + case "None": + return value; + case "Key": + return A2( + elm$browser$Debugger$Expando$Dictionary, + isClosed, + A3( + elm$browser$Debugger$Expando$updateIndex, + index, + function(_n6) { + var k = _n6.a; + var v = _n6.b; + return _Utils_Tuple2( + A2(elm$browser$Debugger$Expando$update, subMsg, k), + v + ); + }, + keyValuePairs + ) + ); + default: + return A2( + elm$browser$Debugger$Expando$Dictionary, + isClosed, + A3( + elm$browser$Debugger$Expando$updateIndex, + index, + function(_n7) { + var k = _n7.a; + var v = _n7.b; + return _Utils_Tuple2( + k, + A2(elm$browser$Debugger$Expando$update, subMsg, v) + ); + }, + keyValuePairs + ) + ); + } + default: + return value; + } + case "Record": + var isClosed = value.a; + var valueDict = value.b; + switch (msg.$) { + case "Toggle": + return A2( + elm$browser$Debugger$Expando$Record, + !isClosed, + valueDict + ); + case "Index": + return value; + default: + var field = msg.a; + var subMsg = msg.b; + return A2( + elm$browser$Debugger$Expando$Record, + isClosed, + A3( + elm$core$Dict$update, + field, + elm$browser$Debugger$Expando$updateField(subMsg), + valueDict + ) + ); + } + default: + var maybeName = value.a; + var isClosed = value.b; + var valueList = value.c; + switch (msg.$) { + case "Toggle": + return A3( + elm$browser$Debugger$Expando$Constructor, + maybeName, + !isClosed, + valueList + ); + case "Index": + if (msg.a.$ === "None") { + var _n10 = msg.a; + var index = msg.b; + var subMsg = msg.c; + return A3( + elm$browser$Debugger$Expando$Constructor, + maybeName, + isClosed, + A3( + elm$browser$Debugger$Expando$updateIndex, + index, + elm$browser$Debugger$Expando$update(subMsg), + valueList + ) + ); + } else { + return value; + } + default: + return value; + } + } + }); + var elm$browser$Debugger$Expando$updateField = F2(function( + msg, + maybeExpando + ) { + if (maybeExpando.$ === "Nothing") { + return maybeExpando; + } else { + var expando = maybeExpando.a; + return elm$core$Maybe$Just( + A2(elm$browser$Debugger$Expando$update, msg, expando) + ); + } + }); + var elm$browser$Debugger$History$Snapshot = F2(function(model, messages) { + return { messages: messages, model: model }; + }); + var elm$core$Array$fromListHelp = F3(function(list, nodeList, nodeListSize) { + fromListHelp: while (true) { + var _n0 = A2( + elm$core$Elm$JsArray$initializeFromList, + elm$core$Array$branchFactor, + list + ); + var jsArray = _n0.a; + var remainingItems = _n0.b; + if ( + _Utils_cmp( + elm$core$Elm$JsArray$length(jsArray), + elm$core$Array$branchFactor + ) < 0 + ) { + return A2(elm$core$Array$builderToArray, true, { + nodeList: nodeList, + nodeListSize: nodeListSize, + tail: jsArray + }); + } else { + var $temp$list = remainingItems, + $temp$nodeList = A2( + elm$core$List$cons, + elm$core$Array$Leaf(jsArray), + nodeList + ), + $temp$nodeListSize = nodeListSize + 1; + list = $temp$list; + nodeList = $temp$nodeList; + nodeListSize = $temp$nodeListSize; + continue fromListHelp; + } + } + }); + var elm$core$Array$fromList = function(list) { + if (!list.b) { + return elm$core$Array$empty; + } else { + return A3(elm$core$Array$fromListHelp, list, _List_Nil, 0); + } + }; + var elm$browser$Debugger$History$addRecent = F3(function(msg, newModel, _n0) { + var model = _n0.model; + var messages = _n0.messages; + var numMessages = _n0.numMessages; + return _Utils_eq(numMessages, elm$browser$Debugger$History$maxSnapshotSize) + ? _Utils_Tuple2( + elm$core$Maybe$Just( + A2( + elm$browser$Debugger$History$Snapshot, + model, + elm$core$Array$fromList(messages) + ) + ), + A3( + elm$browser$Debugger$History$RecentHistory, + newModel, + _List_fromArray([msg]), + 1 + ) + ) + : _Utils_Tuple2( + elm$core$Maybe$Nothing, + A3( + elm$browser$Debugger$History$RecentHistory, + model, + A2(elm$core$List$cons, msg, messages), + numMessages + 1 + ) + ); + }); + var elm$core$Bitwise$shiftRightZfBy = _Bitwise_shiftRightZfBy; + var elm$core$Array$bitMask = 4294967295 >>> (32 - elm$core$Array$shiftStep); + var elm$core$Basics$ge = _Utils_ge; + var elm$core$Bitwise$and = _Bitwise_and; + var elm$core$Elm$JsArray$push = _JsArray_push; + var elm$core$Elm$JsArray$singleton = _JsArray_singleton; + var elm$core$Elm$JsArray$unsafeGet = _JsArray_unsafeGet; + var elm$core$Elm$JsArray$unsafeSet = _JsArray_unsafeSet; + var elm$core$Array$insertTailInTree = F4(function(shift, index, tail, tree) { + var pos = elm$core$Array$bitMask & (index >>> shift); + if (_Utils_cmp(pos, elm$core$Elm$JsArray$length(tree)) > -1) { + if (shift === 5) { + return A2(elm$core$Elm$JsArray$push, elm$core$Array$Leaf(tail), tree); + } else { + var newSub = elm$core$Array$SubTree( + A4( + elm$core$Array$insertTailInTree, + shift - elm$core$Array$shiftStep, + index, + tail, + elm$core$Elm$JsArray$empty + ) + ); + return A2(elm$core$Elm$JsArray$push, newSub, tree); + } + } else { + var value = A2(elm$core$Elm$JsArray$unsafeGet, pos, tree); + if (value.$ === "SubTree") { + var subTree = value.a; + var newSub = elm$core$Array$SubTree( + A4( + elm$core$Array$insertTailInTree, + shift - elm$core$Array$shiftStep, + index, + tail, + subTree + ) + ); + return A3(elm$core$Elm$JsArray$unsafeSet, pos, newSub, tree); + } else { + var newSub = elm$core$Array$SubTree( + A4( + elm$core$Array$insertTailInTree, + shift - elm$core$Array$shiftStep, + index, + tail, + elm$core$Elm$JsArray$singleton(value) + ) + ); + return A3(elm$core$Elm$JsArray$unsafeSet, pos, newSub, tree); + } + } + }); + var elm$core$Bitwise$shiftLeftBy = _Bitwise_shiftLeftBy; + var elm$core$Array$unsafeReplaceTail = F2(function(newTail, _n0) { + var len = _n0.a; + var startShift = _n0.b; + var tree = _n0.c; + var tail = _n0.d; + var originalTailLen = elm$core$Elm$JsArray$length(tail); + var newTailLen = elm$core$Elm$JsArray$length(newTail); + var newArrayLen = len + (newTailLen - originalTailLen); + if (_Utils_eq(newTailLen, elm$core$Array$branchFactor)) { + var overflow = + _Utils_cmp(newArrayLen >>> elm$core$Array$shiftStep, 1 << startShift) > + 0; + if (overflow) { + var newShift = startShift + elm$core$Array$shiftStep; + var newTree = A4( + elm$core$Array$insertTailInTree, + newShift, + len, + newTail, + elm$core$Elm$JsArray$singleton(elm$core$Array$SubTree(tree)) + ); + return A4( + elm$core$Array$Array_elm_builtin, + newArrayLen, + newShift, + newTree, + elm$core$Elm$JsArray$empty + ); + } else { + return A4( + elm$core$Array$Array_elm_builtin, + newArrayLen, + startShift, + A4(elm$core$Array$insertTailInTree, startShift, len, newTail, tree), + elm$core$Elm$JsArray$empty + ); + } + } else { + return A4( + elm$core$Array$Array_elm_builtin, + newArrayLen, + startShift, + tree, + newTail + ); + } + }); + var elm$core$Array$push = F2(function(a, array) { + var tail = array.d; + return A2( + elm$core$Array$unsafeReplaceTail, + A2(elm$core$Elm$JsArray$push, a, tail), + array + ); + }); + var elm$browser$Debugger$History$add = F3(function(msg, model, _n0) { + var snapshots = _n0.snapshots; + var recent = _n0.recent; + var numMessages = _n0.numMessages; + var _n1 = A3(elm$browser$Debugger$History$addRecent, msg, model, recent); + if (_n1.a.$ === "Just") { + var snapshot = _n1.a.a; + var newRecent = _n1.b; + return A3( + elm$browser$Debugger$History$History, + A2(elm$core$Array$push, snapshot, snapshots), + newRecent, + numMessages + 1 + ); + } else { + var _n2 = _n1.a; + var newRecent = _n1.b; + return A3( + elm$browser$Debugger$History$History, + snapshots, + newRecent, + numMessages + 1 + ); + } + }); + var elm$browser$Debugger$History$Stepping = F2(function(a, b) { + return { $: "Stepping", a: a, b: b }; + }); + var elm$browser$Debugger$History$Done = F2(function(a, b) { + return { $: "Done", a: a, b: b }; + }); + var elm$browser$Debugger$History$getHelp = F3(function( + update, + msg, + getResult + ) { + if (getResult.$ === "Done") { + return getResult; + } else { + var n = getResult.a; + var model = getResult.b; + return !n + ? A2(elm$browser$Debugger$History$Done, msg, A2(update, msg, model).a) + : A2( + elm$browser$Debugger$History$Stepping, + n - 1, + A2(update, msg, model).a + ); + } + }); + var elm$browser$Debugger$History$undone = function(getResult) { + undone: while (true) { + if (getResult.$ === "Done") { + var msg = getResult.a; + var model = getResult.b; + return _Utils_Tuple2(model, msg); + } else { + var $temp$getResult = getResult; + getResult = $temp$getResult; + continue undone; + } + } + }; + var elm$core$Array$getHelp = F3(function(shift, index, tree) { + getHelp: while (true) { + var pos = elm$core$Array$bitMask & (index >>> shift); + var _n0 = A2(elm$core$Elm$JsArray$unsafeGet, pos, tree); + if (_n0.$ === "SubTree") { + var subTree = _n0.a; + var $temp$shift = shift - elm$core$Array$shiftStep, + $temp$index = index, + $temp$tree = subTree; + shift = $temp$shift; + index = $temp$index; + tree = $temp$tree; + continue getHelp; + } else { + var values = _n0.a; + return A2( + elm$core$Elm$JsArray$unsafeGet, + elm$core$Array$bitMask & index, + values + ); + } + } + }); + var elm$core$Array$tailIndex = function(len) { + return (len >>> 5) << 5; + }; + var elm$core$Array$get = F2(function(index, _n0) { + var len = _n0.a; + var startShift = _n0.b; + var tree = _n0.c; + var tail = _n0.d; + return index < 0 || _Utils_cmp(index, len) > -1 + ? elm$core$Maybe$Nothing + : _Utils_cmp(index, elm$core$Array$tailIndex(len)) > -1 + ? elm$core$Maybe$Just( + A2( + elm$core$Elm$JsArray$unsafeGet, + elm$core$Array$bitMask & index, + tail + ) + ) + : elm$core$Maybe$Just( + A3(elm$core$Array$getHelp, startShift, index, tree) + ); + }); + var elm$browser$Debugger$History$get = F3(function(update, index, history) { + get: while (true) { + var recent = history.recent; + var snapshotMax = history.numMessages - recent.numMessages; + if (_Utils_cmp(index, snapshotMax) > -1) { + return elm$browser$Debugger$History$undone( + A3( + elm$core$List$foldr, + elm$browser$Debugger$History$getHelp(update), + A2( + elm$browser$Debugger$History$Stepping, + index - snapshotMax, + recent.model + ), + recent.messages + ) + ); + } else { + var _n0 = A2( + elm$core$Array$get, + (index / elm$browser$Debugger$History$maxSnapshotSize) | 0, + history.snapshots + ); + if (_n0.$ === "Nothing") { + var $temp$update = update, + $temp$index = index, + $temp$history = history; + update = $temp$update; + index = $temp$index; + history = $temp$history; + continue get; + } else { + var model = _n0.a.model; + var messages = _n0.a.messages; + return elm$browser$Debugger$History$undone( + A3( + elm$core$Array$foldr, + elm$browser$Debugger$History$getHelp(update), + A2( + elm$browser$Debugger$History$Stepping, + index % elm$browser$Debugger$History$maxSnapshotSize, + model + ), + messages + ) + ); + } + } + } + }); + var elm$browser$Debugger$Main$Paused = F3(function(a, b, c) { + return { $: "Paused", a: a, b: b, c: c }; + }); + var elm$browser$Debugger$History$elmToJs = _Debugger_unsafeCoerce; + var elm$browser$Debugger$History$encodeHelp = F2(function( + snapshot, + allMessages + ) { + return A3( + elm$core$Array$foldl, + elm$core$List$cons, + allMessages, + snapshot.messages + ); + }); + var elm$json$Json$Encode$list = F2(function(func, entries) { + return _Json_wrap( + A3( + elm$core$List$foldl, + _Json_addEntry(func), + _Json_emptyArray(_Utils_Tuple0), + entries + ) + ); + }); + var elm$browser$Debugger$History$encode = function(_n0) { + var snapshots = _n0.snapshots; + var recent = _n0.recent; + return A2( + elm$json$Json$Encode$list, + elm$browser$Debugger$History$elmToJs, + A3( + elm$core$Array$foldr, + elm$browser$Debugger$History$encodeHelp, + elm$core$List$reverse(recent.messages), + snapshots + ) + ); + }; + var elm$json$Json$Encode$object = function(pairs) { + return _Json_wrap( + A3( + elm$core$List$foldl, + F2(function(_n0, obj) { + var k = _n0.a; + var v = _n0.b; + return A3(_Json_addField, k, v, obj); + }), + _Json_emptyObject(_Utils_Tuple0), + pairs + ) + ); + }; + var elm$browser$Debugger$Metadata$encodeAlias = function(_n0) { + var args = _n0.args; + var tipe = _n0.tipe; + return elm$json$Json$Encode$object( + _List_fromArray([ + _Utils_Tuple2( + "args", + A2(elm$json$Json$Encode$list, elm$json$Json$Encode$string, args) + ), + _Utils_Tuple2("type", elm$json$Json$Encode$string(tipe)) + ]) + ); + }; + var elm$browser$Debugger$Metadata$encodeDict = F2(function(f, dict) { + return elm$json$Json$Encode$object( + elm$core$Dict$toList( + A2( + elm$core$Dict$map, + F2(function(key, value) { + return f(value); + }), + dict + ) + ) + ); + }); + var elm$browser$Debugger$Metadata$encodeUnion = function(_n0) { + var args = _n0.args; + var tags = _n0.tags; + return elm$json$Json$Encode$object( + _List_fromArray([ + _Utils_Tuple2( + "args", + A2(elm$json$Json$Encode$list, elm$json$Json$Encode$string, args) + ), + _Utils_Tuple2( + "tags", + A2( + elm$browser$Debugger$Metadata$encodeDict, + elm$json$Json$Encode$list(elm$json$Json$Encode$string), + tags + ) + ) + ]) + ); + }; + var elm$browser$Debugger$Metadata$encodeTypes = function(_n0) { + var message = _n0.message; + var unions = _n0.unions; + var aliases = _n0.aliases; + return elm$json$Json$Encode$object( + _List_fromArray([ + _Utils_Tuple2("message", elm$json$Json$Encode$string(message)), + _Utils_Tuple2( + "aliases", + A2( + elm$browser$Debugger$Metadata$encodeDict, + elm$browser$Debugger$Metadata$encodeAlias, + aliases + ) + ), + _Utils_Tuple2( + "unions", + A2( + elm$browser$Debugger$Metadata$encodeDict, + elm$browser$Debugger$Metadata$encodeUnion, + unions + ) + ) + ]) + ); + }; + var elm$browser$Debugger$Metadata$encodeVersions = function(_n0) { + var elm = _n0.elm; + return elm$json$Json$Encode$object( + _List_fromArray([_Utils_Tuple2("elm", elm$json$Json$Encode$string(elm))]) + ); + }; + var elm$browser$Debugger$Metadata$encode = function(_n0) { + var versions = _n0.versions; + var types = _n0.types; + return elm$json$Json$Encode$object( + _List_fromArray([ + _Utils_Tuple2( + "versions", + elm$browser$Debugger$Metadata$encodeVersions(versions) + ), + _Utils_Tuple2("types", elm$browser$Debugger$Metadata$encodeTypes(types)) + ]) + ); + }; + var elm$browser$Debugger$Main$download = F2(function(metadata, history) { + var json = elm$json$Json$Encode$object( + _List_fromArray([ + _Utils_Tuple2( + "metadata", + elm$browser$Debugger$Metadata$encode(metadata) + ), + _Utils_Tuple2("history", elm$browser$Debugger$History$encode(history)) + ]) + ); + var historyLength = elm$browser$Debugger$History$size(history); + return A2( + elm$core$Task$perform, + function(_n0) { + return elm$browser$Debugger$Main$NoOp; + }, + A2(_Debugger_download, historyLength, json) + ); + }); + var elm$browser$Debugger$History$jsToElm = _Debugger_unsafeCoerce; + var elm$json$Json$Decode$value = _Json_decodeValue; + var elm$browser$Debugger$History$decoder = F2(function(initialModel, update) { + var addMessage = F2(function(rawMsg, _n0) { + var model = _n0.a; + var history = _n0.b; + var msg = elm$browser$Debugger$History$jsToElm(rawMsg); + return _Utils_Tuple2( + A2(update, msg, model), + A3(elm$browser$Debugger$History$add, msg, model, history) + ); + }); + var updateModel = function(rawMsgs) { + return A3( + elm$core$List$foldl, + addMessage, + _Utils_Tuple2( + initialModel, + elm$browser$Debugger$History$empty(initialModel) + ), + rawMsgs + ); + }; + return A2( + elm$json$Json$Decode$map, + updateModel, + elm$json$Json$Decode$list(elm$json$Json$Decode$value) + ); + }); + var elm$browser$Debugger$History$getInitialModel = function(_n0) { + var snapshots = _n0.snapshots; + var recent = _n0.recent; + var _n1 = A2(elm$core$Array$get, 0, snapshots); + if (_n1.$ === "Just") { + var model = _n1.a.model; + return model; + } else { + return recent.model; + } + }; + var elm$browser$Debugger$Overlay$BadImport = function(a) { + return { $: "BadImport", a: a }; + }; + var elm$browser$Debugger$Report$CorruptHistory = { $: "CorruptHistory" }; + var elm$browser$Debugger$Overlay$corruptImport = elm$browser$Debugger$Overlay$BadImport( + elm$browser$Debugger$Report$CorruptHistory + ); + var elm$core$Platform$Cmd$batch = _Platform_batch; + var elm$core$Platform$Cmd$none = elm$core$Platform$Cmd$batch(_List_Nil); + var elm$browser$Debugger$Main$loadNewHistory = F3(function( + rawHistory, + update, + model + ) { + var pureUserUpdate = F2(function(msg, userModel) { + return A2(update, msg, userModel).a; + }); + var initialUserModel = elm$browser$Debugger$History$getInitialModel( + model.history + ); + var decoder = A2( + elm$browser$Debugger$History$decoder, + initialUserModel, + pureUserUpdate + ); + var _n0 = A2(elm$json$Json$Decode$decodeValue, decoder, rawHistory); + if (_n0.$ === "Err") { + return _Utils_Tuple2( + _Utils_update(model, { + overlay: elm$browser$Debugger$Overlay$corruptImport + }), + elm$core$Platform$Cmd$none + ); + } else { + var _n1 = _n0.a; + var latestUserModel = _n1.a; + var newHistory = _n1.b; + return _Utils_Tuple2( + _Utils_update(model, { + expando: elm$browser$Debugger$Expando$init(latestUserModel), + history: newHistory, + overlay: elm$browser$Debugger$Overlay$none, + state: elm$browser$Debugger$Main$Running(latestUserModel) + }), + elm$core$Platform$Cmd$none + ); + } + }); + var elm$core$Basics$always = F2(function(a, _n0) { + return a; + }); + var elm$browser$Debugger$Main$scroll = function(popout) { + return A2( + elm$core$Task$perform, + elm$core$Basics$always(elm$browser$Debugger$Main$NoOp), + _Debugger_scroll(popout) + ); + }; + var elm$browser$Debugger$Main$Upload = function(a) { + return { $: "Upload", a: a }; + }; + var elm$browser$Debugger$Main$upload = A2( + elm$core$Task$perform, + elm$browser$Debugger$Main$Upload, + _Debugger_upload(_Utils_Tuple0) + ); + var elm$browser$Debugger$Overlay$BadMetadata = function(a) { + return { $: "BadMetadata", a: a }; + }; + var elm$browser$Debugger$Overlay$badMetadata = elm$browser$Debugger$Overlay$BadMetadata; + var elm$browser$Debugger$Main$withGoodMetadata = F2(function(model, func) { + var _n0 = model.metadata; + if (_n0.$ === "Ok") { + var metadata = _n0.a; + return func(metadata); + } else { + var error = _n0.a; + return _Utils_Tuple2( + _Utils_update(model, { + overlay: elm$browser$Debugger$Overlay$badMetadata(error) + }), + elm$core$Platform$Cmd$none + ); + } + }); + var elm$browser$Debugger$Report$AliasChange = function(a) { + return { $: "AliasChange", a: a }; + }; + var elm$browser$Debugger$Metadata$checkAlias = F4(function( + name, + old, + _new, + changes + ) { + return _Utils_eq(old.tipe, _new.tipe) && _Utils_eq(old.args, _new.args) + ? changes + : A2( + elm$core$List$cons, + elm$browser$Debugger$Report$AliasChange(name), + changes + ); + }); + var elm$browser$Debugger$Metadata$addTag = F3(function(tag, _n0, changes) { + return _Utils_update(changes, { + added: A2(elm$core$List$cons, tag, changes.added) + }); + }); + var elm$browser$Debugger$Metadata$checkTag = F4(function( + tag, + old, + _new, + changes + ) { + return _Utils_eq(old, _new) + ? changes + : _Utils_update(changes, { + changed: A2(elm$core$List$cons, tag, changes.changed) + }); + }); + var elm$browser$Debugger$Metadata$removeTag = F3(function(tag, _n0, changes) { + return _Utils_update(changes, { + removed: A2(elm$core$List$cons, tag, changes.removed) + }); + }); + var elm$browser$Debugger$Report$UnionChange = F2(function(a, b) { + return { $: "UnionChange", a: a, b: b }; + }); + var elm$browser$Debugger$Report$TagChanges = F4(function( + removed, + changed, + added, + argsMatch + ) { + return { + added: added, + argsMatch: argsMatch, + changed: changed, + removed: removed + }; + }); + var elm$browser$Debugger$Report$emptyTagChanges = function(argsMatch) { + return A4( + elm$browser$Debugger$Report$TagChanges, + _List_Nil, + _List_Nil, + _List_Nil, + argsMatch + ); + }; + var elm$browser$Debugger$Report$hasTagChanges = function(tagChanges) { + return _Utils_eq( + tagChanges, + A4( + elm$browser$Debugger$Report$TagChanges, + _List_Nil, + _List_Nil, + _List_Nil, + true + ) + ); + }; + var elm$core$Dict$merge = F6(function( + leftStep, + bothStep, + rightStep, + leftDict, + rightDict, + initialResult + ) { + var stepState = F3(function(rKey, rValue, _n0) { + stepState: while (true) { + var list = _n0.a; + var result = _n0.b; + if (!list.b) { + return _Utils_Tuple2(list, A3(rightStep, rKey, rValue, result)); + } else { + var _n2 = list.a; + var lKey = _n2.a; + var lValue = _n2.b; + var rest = list.b; + if (_Utils_cmp(lKey, rKey) < 0) { + var $temp$rKey = rKey, + $temp$rValue = rValue, + $temp$_n0 = _Utils_Tuple2( + rest, + A3(leftStep, lKey, lValue, result) + ); + rKey = $temp$rKey; + rValue = $temp$rValue; + _n0 = $temp$_n0; + continue stepState; + } else { + if (_Utils_cmp(lKey, rKey) > 0) { + return _Utils_Tuple2(list, A3(rightStep, rKey, rValue, result)); + } else { + return _Utils_Tuple2( + rest, + A4(bothStep, lKey, lValue, rValue, result) + ); + } + } + } + } + }); + var _n3 = A3( + elm$core$Dict$foldl, + stepState, + _Utils_Tuple2(elm$core$Dict$toList(leftDict), initialResult), + rightDict + ); + var leftovers = _n3.a; + var intermediateResult = _n3.b; + return A3( + elm$core$List$foldl, + F2(function(_n4, result) { + var k = _n4.a; + var v = _n4.b; + return A3(leftStep, k, v, result); + }), + intermediateResult, + leftovers + ); + }); + var elm$browser$Debugger$Metadata$checkUnion = F4(function( + name, + old, + _new, + changes + ) { + var tagChanges = A6( + elm$core$Dict$merge, + elm$browser$Debugger$Metadata$removeTag, + elm$browser$Debugger$Metadata$checkTag, + elm$browser$Debugger$Metadata$addTag, + old.tags, + _new.tags, + elm$browser$Debugger$Report$emptyTagChanges( + _Utils_eq(old.args, _new.args) + ) + ); + return elm$browser$Debugger$Report$hasTagChanges(tagChanges) + ? changes + : A2( + elm$core$List$cons, + A2(elm$browser$Debugger$Report$UnionChange, name, tagChanges), + changes + ); + }); + var elm$browser$Debugger$Metadata$ignore = F3(function(key, value, report) { + return report; + }); + var elm$browser$Debugger$Report$MessageChanged = F2(function(a, b) { + return { $: "MessageChanged", a: a, b: b }; + }); + var elm$browser$Debugger$Report$SomethingChanged = function(a) { + return { $: "SomethingChanged", a: a }; + }; + var elm$core$Basics$neq = _Utils_notEqual; + var elm$browser$Debugger$Metadata$checkTypes = F2(function(old, _new) { + return !_Utils_eq(old.message, _new.message) + ? A2( + elm$browser$Debugger$Report$MessageChanged, + old.message, + _new.message + ) + : elm$browser$Debugger$Report$SomethingChanged( + A6( + elm$core$Dict$merge, + elm$browser$Debugger$Metadata$ignore, + elm$browser$Debugger$Metadata$checkUnion, + elm$browser$Debugger$Metadata$ignore, + old.unions, + _new.unions, + A6( + elm$core$Dict$merge, + elm$browser$Debugger$Metadata$ignore, + elm$browser$Debugger$Metadata$checkAlias, + elm$browser$Debugger$Metadata$ignore, + old.aliases, + _new.aliases, + _List_Nil + ) + ) + ); + }); + var elm$browser$Debugger$Report$VersionChanged = F2(function(a, b) { + return { $: "VersionChanged", a: a, b: b }; + }); + var elm$browser$Debugger$Metadata$check = F2(function(old, _new) { + return !_Utils_eq(old.versions.elm, _new.versions.elm) + ? A2( + elm$browser$Debugger$Report$VersionChanged, + old.versions.elm, + _new.versions.elm + ) + : A2(elm$browser$Debugger$Metadata$checkTypes, old.types, _new.types); + }); + var elm$browser$Debugger$Overlay$RiskyImport = F2(function(a, b) { + return { $: "RiskyImport", a: a, b: b }; + }); + var elm$browser$Debugger$Overlay$uploadDecoder = A3( + elm$json$Json$Decode$map2, + F2(function(x, y) { + return _Utils_Tuple2(x, y); + }), + A2( + elm$json$Json$Decode$field, + "metadata", + elm$browser$Debugger$Metadata$decoder + ), + A2(elm$json$Json$Decode$field, "history", elm$json$Json$Decode$value) + ); + var elm$browser$Debugger$Report$Fine = { $: "Fine" }; + var elm$browser$Debugger$Report$Impossible = { $: "Impossible" }; + var elm$browser$Debugger$Report$Risky = { $: "Risky" }; + var elm$core$List$isEmpty = function(xs) { + if (!xs.b) { + return true; + } else { + return false; + } + }; + var elm$browser$Debugger$Report$some = function(list) { + return !elm$core$List$isEmpty(list); + }; + var elm$browser$Debugger$Report$evaluateChange = function(change) { + if (change.$ === "AliasChange") { + return elm$browser$Debugger$Report$Impossible; + } else { + var removed = change.b.removed; + var changed = change.b.changed; + var added = change.b.added; + var argsMatch = change.b.argsMatch; + return !argsMatch || + (elm$browser$Debugger$Report$some(changed) || + elm$browser$Debugger$Report$some(removed)) + ? elm$browser$Debugger$Report$Impossible + : elm$browser$Debugger$Report$some(added) + ? elm$browser$Debugger$Report$Risky + : elm$browser$Debugger$Report$Fine; + } + }; + var elm$browser$Debugger$Report$worstCase = F2(function(status, statusList) { + worstCase: while (true) { + if (!statusList.b) { + return status; + } else { + switch (statusList.a.$) { + case "Impossible": + var _n1 = statusList.a; + return elm$browser$Debugger$Report$Impossible; + case "Risky": + var _n2 = statusList.a; + var rest = statusList.b; + var $temp$status = elm$browser$Debugger$Report$Risky, + $temp$statusList = rest; + status = $temp$status; + statusList = $temp$statusList; + continue worstCase; + default: + var _n3 = statusList.a; + var rest = statusList.b; + var $temp$status = status, + $temp$statusList = rest; + status = $temp$status; + statusList = $temp$statusList; + continue worstCase; + } + } + } + }); + var elm$browser$Debugger$Report$evaluate = function(report) { + switch (report.$) { + case "CorruptHistory": + return elm$browser$Debugger$Report$Impossible; + case "VersionChanged": + return elm$browser$Debugger$Report$Impossible; + case "MessageChanged": + return elm$browser$Debugger$Report$Impossible; + default: + var changes = report.a; + return A2( + elm$browser$Debugger$Report$worstCase, + elm$browser$Debugger$Report$Fine, + A2( + elm$core$List$map, + elm$browser$Debugger$Report$evaluateChange, + changes + ) + ); + } + }; + var elm$json$Json$Decode$decodeString = _Json_runOnString; + var elm$browser$Debugger$Overlay$assessImport = F2(function( + metadata, + jsonString + ) { + var _n0 = A2( + elm$json$Json$Decode$decodeString, + elm$browser$Debugger$Overlay$uploadDecoder, + jsonString + ); + if (_n0.$ === "Err") { + return elm$core$Result$Err(elm$browser$Debugger$Overlay$corruptImport); + } else { + var _n1 = _n0.a; + var foreignMetadata = _n1.a; + var rawHistory = _n1.b; + var report = A2( + elm$browser$Debugger$Metadata$check, + foreignMetadata, + metadata + ); + var _n2 = elm$browser$Debugger$Report$evaluate(report); + switch (_n2.$) { + case "Impossible": + return elm$core$Result$Err( + elm$browser$Debugger$Overlay$BadImport(report) + ); + case "Risky": + return elm$core$Result$Err( + A2(elm$browser$Debugger$Overlay$RiskyImport, report, rawHistory) + ); + default: + return elm$core$Result$Ok(rawHistory); + } + } + }); + var elm$browser$Debugger$Overlay$close = F2(function(msg, state) { + switch (state.$) { + case "None": + return elm$core$Maybe$Nothing; + case "BadMetadata": + return elm$core$Maybe$Nothing; + case "BadImport": + return elm$core$Maybe$Nothing; + default: + var rawHistory = state.b; + if (msg.$ === "Cancel") { + return elm$core$Maybe$Nothing; + } else { + return elm$core$Maybe$Just(rawHistory); + } + } + }); + var elm$browser$Debugger$Main$wrapUpdate = F3(function(update, msg, model) { + wrapUpdate: while (true) { + switch (msg.$) { + case "NoOp": + return _Utils_Tuple2(model, elm$core$Platform$Cmd$none); + case "UserMsg": + var userMsg = msg.a; + var userModel = elm$browser$Debugger$Main$getLatestModel(model.state); + var newHistory = A3( + elm$browser$Debugger$History$add, + userMsg, + userModel, + model.history + ); + var _n1 = A2(update, userMsg, userModel); + var newUserModel = _n1.a; + var userCmds = _n1.b; + var commands = A2( + elm$core$Platform$Cmd$map, + elm$browser$Debugger$Main$UserMsg, + userCmds + ); + var _n2 = model.state; + if (_n2.$ === "Running") { + return _Utils_Tuple2( + _Utils_update(model, { + expando: A2( + elm$browser$Debugger$Expando$merge, + newUserModel, + model.expando + ), + history: newHistory, + state: elm$browser$Debugger$Main$Running(newUserModel) + }), + elm$core$Platform$Cmd$batch( + _List_fromArray([ + commands, + elm$browser$Debugger$Main$scroll(model.popout) + ]) + ) + ); + } else { + var index = _n2.a; + var indexModel = _n2.b; + return _Utils_Tuple2( + _Utils_update(model, { + history: newHistory, + state: A3( + elm$browser$Debugger$Main$Paused, + index, + indexModel, + newUserModel + ) + }), + commands + ); + } + case "ExpandoMsg": + var eMsg = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { + expando: A2( + elm$browser$Debugger$Expando$update, + eMsg, + model.expando + ) + }), + elm$core$Platform$Cmd$none + ); + case "Resume": + var _n3 = model.state; + if (_n3.$ === "Running") { + return _Utils_Tuple2(model, elm$core$Platform$Cmd$none); + } else { + var userModel = _n3.c; + return _Utils_Tuple2( + _Utils_update(model, { + expando: A2( + elm$browser$Debugger$Expando$merge, + userModel, + model.expando + ), + state: elm$browser$Debugger$Main$Running(userModel) + }), + elm$browser$Debugger$Main$scroll(model.popout) + ); + } + case "Jump": + var index = msg.a; + var _n4 = A3( + elm$browser$Debugger$History$get, + update, + index, + model.history + ); + var indexModel = _n4.a; + var indexMsg = _n4.b; + return _Utils_Tuple2( + _Utils_update(model, { + expando: A2( + elm$browser$Debugger$Expando$merge, + indexModel, + model.expando + ), + state: A3( + elm$browser$Debugger$Main$Paused, + index, + indexModel, + elm$browser$Debugger$Main$getLatestModel(model.state) + ) + }), + elm$core$Platform$Cmd$none + ); + case "Open": + return _Utils_Tuple2( + model, + A2( + elm$core$Task$perform, + function(_n5) { + return elm$browser$Debugger$Main$NoOp; + }, + _Debugger_open(model.popout) + ) + ); + case "Up": + var index = (function() { + var _n6 = model.state; + if (_n6.$ === "Paused") { + var i = _n6.a; + return i; + } else { + return elm$browser$Debugger$History$size(model.history); + } + })(); + if (index > 0) { + var $temp$update = update, + $temp$msg = elm$browser$Debugger$Main$Jump(index - 1), + $temp$model = model; + update = $temp$update; + msg = $temp$msg; + model = $temp$model; + continue wrapUpdate; + } else { + return _Utils_Tuple2(model, elm$core$Platform$Cmd$none); + } + case "Down": + var _n7 = model.state; + if (_n7.$ === "Running") { + return _Utils_Tuple2(model, elm$core$Platform$Cmd$none); + } else { + var index = _n7.a; + var userModel = _n7.c; + if ( + _Utils_eq( + index, + elm$browser$Debugger$History$size(model.history) - 1 + ) + ) { + var $temp$update = update, + $temp$msg = elm$browser$Debugger$Main$Resume, + $temp$model = model; + update = $temp$update; + msg = $temp$msg; + model = $temp$model; + continue wrapUpdate; + } else { + var $temp$update = update, + $temp$msg = elm$browser$Debugger$Main$Jump(index + 1), + $temp$model = model; + update = $temp$update; + msg = $temp$msg; + model = $temp$model; + continue wrapUpdate; + } + } + case "Import": + return A2(elm$browser$Debugger$Main$withGoodMetadata, model, function( + _n8 + ) { + return _Utils_Tuple2(model, elm$browser$Debugger$Main$upload); + }); + case "Export": + return A2(elm$browser$Debugger$Main$withGoodMetadata, model, function( + metadata + ) { + return _Utils_Tuple2( + model, + A2(elm$browser$Debugger$Main$download, metadata, model.history) + ); + }); + case "Upload": + var jsonString = msg.a; + return A2(elm$browser$Debugger$Main$withGoodMetadata, model, function( + metadata + ) { + var _n9 = A2( + elm$browser$Debugger$Overlay$assessImport, + metadata, + jsonString + ); + if (_n9.$ === "Err") { + var newOverlay = _n9.a; + return _Utils_Tuple2( + _Utils_update(model, { overlay: newOverlay }), + elm$core$Platform$Cmd$none + ); + } else { + var rawHistory = _n9.a; + return A3( + elm$browser$Debugger$Main$loadNewHistory, + rawHistory, + update, + model + ); + } + }); + default: + var overlayMsg = msg.a; + var _n10 = A2( + elm$browser$Debugger$Overlay$close, + overlayMsg, + model.overlay + ); + if (_n10.$ === "Nothing") { + return _Utils_Tuple2( + _Utils_update(model, { + overlay: elm$browser$Debugger$Overlay$none + }), + elm$core$Platform$Cmd$none + ); + } else { + var rawHistory = _n10.a; + return A3( + elm$browser$Debugger$Main$loadNewHistory, + rawHistory, + update, + model + ); + } + } + } + }); + var elm$core$Set$foldr = F3(function(func, initialState, _n0) { + var dict = _n0.a; + return A3( + elm$core$Dict$foldr, + F3(function(key, _n1, state) { + return A2(func, key, state); + }), + initialState, + dict + ); + }); + var elm$core$String$dropLeft = F2(function(n, string) { + return n < 1 + ? string + : A3(elm$core$String$slice, n, elm$core$String$length(string), string); + }); + var elm$core$String$startsWith = _String_startsWith; + var elm$url$Url$Http = { $: "Http" }; + var elm$url$Url$Https = { $: "Https" }; + var elm$core$String$indexes = _String_indexes; + var elm$core$String$isEmpty = function(string) { + return string === ""; + }; + var elm$core$String$toInt = _String_toInt; + var elm$url$Url$Url = F6(function( + protocol, + host, + port_, + path, + query, + fragment + ) { + return { + fragment: fragment, + host: host, + path: path, + port_: port_, + protocol: protocol, + query: query + }; + }); + var elm$url$Url$chompBeforePath = F5(function( + protocol, + path, + params, + frag, + str + ) { + if ( + elm$core$String$isEmpty(str) || + A2(elm$core$String$contains, "@", str) + ) { + return elm$core$Maybe$Nothing; + } else { + var _n0 = A2(elm$core$String$indexes, ":", str); + if (!_n0.b) { + return elm$core$Maybe$Just( + A6( + elm$url$Url$Url, + protocol, + str, + elm$core$Maybe$Nothing, + path, + params, + frag + ) + ); + } else { + if (!_n0.b.b) { + var i = _n0.a; + var _n1 = elm$core$String$toInt( + A2(elm$core$String$dropLeft, i + 1, str) + ); + if (_n1.$ === "Nothing") { + return elm$core$Maybe$Nothing; + } else { + var port_ = _n1; + return elm$core$Maybe$Just( + A6( + elm$url$Url$Url, + protocol, + A2(elm$core$String$left, i, str), + port_, + path, + params, + frag + ) + ); + } + } else { + return elm$core$Maybe$Nothing; + } + } + } + }); + var elm$url$Url$chompBeforeQuery = F4(function(protocol, params, frag, str) { + if (elm$core$String$isEmpty(str)) { + return elm$core$Maybe$Nothing; + } else { + var _n0 = A2(elm$core$String$indexes, "/", str); + if (!_n0.b) { + return A5( + elm$url$Url$chompBeforePath, + protocol, + "/", + params, + frag, + str + ); + } else { + var i = _n0.a; + return A5( + elm$url$Url$chompBeforePath, + protocol, + A2(elm$core$String$dropLeft, i, str), + params, + frag, + A2(elm$core$String$left, i, str) + ); + } + } + }); + var elm$url$Url$chompBeforeFragment = F3(function(protocol, frag, str) { + if (elm$core$String$isEmpty(str)) { + return elm$core$Maybe$Nothing; + } else { + var _n0 = A2(elm$core$String$indexes, "?", str); + if (!_n0.b) { + return A4( + elm$url$Url$chompBeforeQuery, + protocol, + elm$core$Maybe$Nothing, + frag, + str + ); + } else { + var i = _n0.a; + return A4( + elm$url$Url$chompBeforeQuery, + protocol, + elm$core$Maybe$Just(A2(elm$core$String$dropLeft, i + 1, str)), + frag, + A2(elm$core$String$left, i, str) + ); + } + } + }); + var elm$url$Url$chompAfterProtocol = F2(function(protocol, str) { + if (elm$core$String$isEmpty(str)) { + return elm$core$Maybe$Nothing; + } else { + var _n0 = A2(elm$core$String$indexes, "#", str); + if (!_n0.b) { + return A3( + elm$url$Url$chompBeforeFragment, + protocol, + elm$core$Maybe$Nothing, + str + ); + } else { + var i = _n0.a; + return A3( + elm$url$Url$chompBeforeFragment, + protocol, + elm$core$Maybe$Just(A2(elm$core$String$dropLeft, i + 1, str)), + A2(elm$core$String$left, i, str) + ); + } + } + }); + var elm$url$Url$fromString = function(str) { + return A2(elm$core$String$startsWith, "http://", str) + ? A2( + elm$url$Url$chompAfterProtocol, + elm$url$Url$Http, + A2(elm$core$String$dropLeft, 7, str) + ) + : A2(elm$core$String$startsWith, "https://", str) + ? A2( + elm$url$Url$chompAfterProtocol, + elm$url$Url$Https, + A2(elm$core$String$dropLeft, 8, str) + ) + : elm$core$Maybe$Nothing; + }; + var elm$browser$Browser$application = _Browser_application; + var elm$core$Result$andThen = F2(function(callback, result) { + if (result.$ === "Ok") { + var value = result.a; + return callback(value); + } else { + var msg = result.a; + return elm$core$Result$Err(msg); + } + }); + var elm$core$Result$toMaybe = function(result) { + if (result.$ === "Ok") { + var v = result.a; + return elm$core$Maybe$Just(v); + } else { + return elm$core$Maybe$Nothing; + } + }; + var author$project$Api$application = F2(function(viewerDecoder, config) { + var init = F3(function(flags, url, navKey) { + var maybeViewer = elm$core$Result$toMaybe( + A2( + elm$core$Result$andThen, + elm$json$Json$Decode$decodeString( + author$project$Api$storageDecoder(viewerDecoder) + ), + A2( + elm$json$Json$Decode$decodeValue, + elm$json$Json$Decode$string, + flags + ) + ) + ); + return A3(config.init, maybeViewer, url, navKey); + }); + return elm$browser$Browser$application({ + init: init, + onUrlChange: config.onUrlChange, + onUrlRequest: config.onUrlRequest, + subscriptions: config.subscriptions, + update: config.update, + view: config.view + }); + }); + var author$project$Main$ChangedUrl = function(a) { + return { $: "ChangedUrl", a: a }; + }; + var author$project$Main$ClickedLink = function(a) { + return { $: "ClickedLink", a: a }; + }; + var author$project$Main$Redirect = function(a) { + return { $: "Redirect", a: a }; + }; + var elm$core$Maybe$destruct = F3(function(_default, func, maybe) { + if (maybe.$ === "Just") { + var a = maybe.a; + return func(a); + } else { + return _default; + } + }); + var elm$json$Json$Encode$null = _Json_encodeNull; + var author$project$Api$storeCache = _Platform_outgoingPort( + "storeCache", + function($) { + return A3( + elm$core$Maybe$destruct, + elm$json$Json$Encode$null, + elm$core$Basics$identity, + $ + ); + } + ); + var author$project$Api$logout = author$project$Api$storeCache( + elm$core$Maybe$Nothing + ); + var author$project$Main$Article = function(a) { + return { $: "Article", a: a }; + }; + var author$project$Main$Editor = F2(function(a, b) { + return { $: "Editor", a: a, b: b }; + }); + var author$project$Main$GotArticleMsg = function(a) { + return { $: "GotArticleMsg", a: a }; + }; + var author$project$Main$GotEditorMsg = function(a) { + return { $: "GotEditorMsg", a: a }; + }; + var author$project$Main$GotHomeMsg = function(a) { + return { $: "GotHomeMsg", a: a }; + }; + var author$project$Main$GotLoginMsg = function(a) { + return { $: "GotLoginMsg", a: a }; + }; + var author$project$Main$GotProfileMsg = function(a) { + return { $: "GotProfileMsg", a: a }; + }; + var author$project$Main$GotRegisterMsg = function(a) { + return { $: "GotRegisterMsg", a: a }; + }; + var author$project$Main$GotSettingsMsg = function(a) { + return { $: "GotSettingsMsg", a: a }; + }; + var author$project$Main$Home = function(a) { + return { $: "Home", a: a }; + }; + var author$project$Main$Login = function(a) { + return { $: "Login", a: a }; + }; + var author$project$Main$NotFound = function(a) { + return { $: "NotFound", a: a }; + }; + var author$project$Main$Profile = F2(function(a, b) { + return { $: "Profile", a: a, b: b }; + }); + var author$project$Main$Register = function(a) { + return { $: "Register", a: a }; + }; + var author$project$Main$Settings = function(a) { + return { $: "Settings", a: a }; + }; + var author$project$Page$Article$toSession = function(model) { + return model.session; + }; + var author$project$Page$Article$Editor$toSession = function(model) { + return model.session; + }; + var author$project$Page$Home$toSession = function(model) { + return model.session; + }; + var author$project$Page$Login$toSession = function(model) { + return model.session; + }; + var author$project$Page$Profile$toSession = function(model) { + return model.session; + }; + var author$project$Page$Register$toSession = function(model) { + return model.session; + }; + var author$project$Page$Settings$toSession = function(model) { + return model.session; + }; + var author$project$Main$toSession = function(page) { + switch (page.$) { + case "Redirect": + var session = page.a; + return session; + case "NotFound": + var session = page.a; + return session; + case "Home": + var home = page.a; + return author$project$Page$Home$toSession(home); + case "Settings": + var settings = page.a; + return author$project$Page$Settings$toSession(settings); + case "Login": + var login = page.a; + return author$project$Page$Login$toSession(login); + case "Register": + var register = page.a; + return author$project$Page$Register$toSession(register); + case "Profile": + var profile = page.b; + return author$project$Page$Profile$toSession(profile); + case "Article": + var article = page.a; + return author$project$Page$Article$toSession(article); + default: + var editor = page.b; + return author$project$Page$Article$Editor$toSession(editor); + } + }; + var author$project$Main$updateWith = F4(function(toModel, toMsg, model, _n0) { + var subModel = _n0.a; + var subCmd = _n0.b; + return _Utils_Tuple2( + toModel(subModel), + A2(elm$core$Platform$Cmd$map, toMsg, subCmd) + ); + }); + var elm$http$Http$Internal$Header = F2(function(a, b) { + return { $: "Header", a: a, b: b }; + }); + var elm$http$Http$header = elm$http$Http$Internal$Header; + var author$project$Api$credHeader = function(_n0) { + var str = _n0.b; + return A2(elm$http$Http$header, "authorization", "Token " + str); + }; + var author$project$Api$Endpoint$unwrap = function(_n0) { + var str = _n0.a; + return str; + }; + var elm$http$Http$Internal$Request = function(a) { + return { $: "Request", a: a }; + }; + var elm$http$Http$request = elm$http$Http$Internal$Request; + var author$project$Api$Endpoint$request = function(config) { + return elm$http$Http$request({ + body: config.body, + expect: config.expect, + headers: config.headers, + method: config.method, + timeout: config.timeout, + url: author$project$Api$Endpoint$unwrap(config.url), + withCredentials: config.withCredentials + }); + }; + var elm$http$Http$Internal$EmptyBody = { $: "EmptyBody" }; + var elm$http$Http$emptyBody = elm$http$Http$Internal$EmptyBody; + var elm$core$Maybe$isJust = function(maybe) { + if (maybe.$ === "Just") { + return true; + } else { + return false; + } + }; + var elm$core$Result$map = F2(function(func, ra) { + if (ra.$ === "Ok") { + var a = ra.a; + return elm$core$Result$Ok(func(a)); + } else { + var e = ra.a; + return elm$core$Result$Err(e); + } + }); + var elm$http$Http$BadPayload = F2(function(a, b) { + return { $: "BadPayload", a: a, b: b }; + }); + var elm$http$Http$BadStatus = function(a) { + return { $: "BadStatus", a: a }; + }; + var elm$http$Http$BadUrl = function(a) { + return { $: "BadUrl", a: a }; + }; + var elm$http$Http$NetworkError = { $: "NetworkError" }; + var elm$http$Http$Timeout = { $: "Timeout" }; + var elm$http$Http$Internal$FormDataBody = function(a) { + return { $: "FormDataBody", a: a }; + }; + var elm$http$Http$Internal$isStringBody = function(body) { + if (body.$ === "StringBody") { + return true; + } else { + return false; + } + }; + var elm$http$Http$expectStringResponse = _Http_expectStringResponse; + var elm$http$Http$expectJson = function(decoder) { + return elm$http$Http$expectStringResponse(function(response) { + var _n0 = A2(elm$json$Json$Decode$decodeString, decoder, response.body); + if (_n0.$ === "Err") { + var decodeError = _n0.a; + return elm$core$Result$Err( + elm$json$Json$Decode$errorToString(decodeError) + ); + } else { + var value = _n0.a; + return elm$core$Result$Ok(value); + } + }); + }; + var author$project$Api$get = F3(function(url, maybeCred, decoder) { + return author$project$Api$Endpoint$request({ + body: elm$http$Http$emptyBody, + expect: elm$http$Http$expectJson(decoder), + headers: (function() { + if (maybeCred.$ === "Just") { + var cred = maybeCred.a; + return _List_fromArray([author$project$Api$credHeader(cred)]); + } else { + return _List_Nil; + } + })(), + method: "GET", + timeout: elm$core$Maybe$Nothing, + url: url, + withCredentials: false + }); + }); + var author$project$Api$Endpoint$Endpoint = function(a) { + return { $: "Endpoint", a: a }; + }; + var elm$url$Url$Builder$toQueryPair = function(_n0) { + var key = _n0.a; + var value = _n0.b; + return key + ("=" + value); + }; + var elm$url$Url$Builder$toQuery = function(parameters) { + if (!parameters.b) { + return ""; + } else { + return ( + "?" + + A2( + elm$core$String$join, + "&", + A2(elm$core$List$map, elm$url$Url$Builder$toQueryPair, parameters) + ) + ); + } + }; + var elm$url$Url$Builder$crossOrigin = F3(function( + prePath, + pathSegments, + parameters + ) { + return ( + prePath + + ("/" + + (A2(elm$core$String$join, "/", pathSegments) + + elm$url$Url$Builder$toQuery(parameters))) + ); + }); + var author$project$Api$Endpoint$url = F2(function(paths, queryParams) { + return author$project$Api$Endpoint$Endpoint( + A3( + elm$url$Url$Builder$crossOrigin, + "https://conduit.productionready.io", + A2(elm$core$List$cons, "api", paths), + queryParams + ) + ); + }); + var author$project$Article$Slug$toString = function(_n0) { + var str = _n0.a; + return str; + }; + var author$project$Api$Endpoint$article = function(slug) { + return A2( + author$project$Api$Endpoint$url, + _List_fromArray(["articles", author$project$Article$Slug$toString(slug)]), + _List_Nil + ); + }; + var author$project$Article$Article = F2(function(a, b) { + return { $: "Article", a: a, b: b }; + }); + var author$project$Article$Full = function(a) { + return { $: "Full", a: a }; + }; + var author$project$Article$Internals = F3(function(slug, author, metadata) { + return { author: author, metadata: metadata, slug: slug }; + }); + var author$project$Article$Metadata = F6(function( + description, + title, + tags, + createdAt, + favorited, + favoritesCount + ) { + return { + createdAt: createdAt, + description: description, + favorited: favorited, + favoritesCount: favoritesCount, + tags: tags, + title: title + }; + }); + var elm$json$Json$Decode$bool = _Json_decodeBool; + var elm$json$Json$Decode$int = _Json_decodeInt; + var elm$json$Json$Decode$null = _Json_decodeNull; + var elm$json$Json$Decode$oneOf = _Json_oneOf; + var elm$json$Json$Decode$nullable = function(decoder) { + return elm$json$Json$Decode$oneOf( + _List_fromArray([ + elm$json$Json$Decode$null(elm$core$Maybe$Nothing), + A2(elm$json$Json$Decode$map, elm$core$Maybe$Just, decoder) + ]) + ); + }; + var elm$json$Json$Decode$andThen = _Json_andThen; + var elm$json$Json$Decode$fail = _Json_fail; + var elm$parser$Parser$deadEndsToString = function(deadEnds) { + return "TODO deadEndsToString"; + }; + var elm$parser$Parser$DeadEnd = F3(function(row, col, problem) { + return { col: col, problem: problem, row: row }; + }); + var elm$parser$Parser$problemToDeadEnd = function(p) { + return A3(elm$parser$Parser$DeadEnd, p.row, p.col, p.problem); + }; + var elm$parser$Parser$Advanced$bagToList = F2(function(bag, list) { + bagToList: while (true) { + switch (bag.$) { + case "Empty": + return list; + case "AddRight": + var bag1 = bag.a; + var x = bag.b; + var $temp$bag = bag1, + $temp$list = A2(elm$core$List$cons, x, list); + bag = $temp$bag; + list = $temp$list; + continue bagToList; + default: + var bag1 = bag.a; + var bag2 = bag.b; + var $temp$bag = bag1, + $temp$list = A2(elm$parser$Parser$Advanced$bagToList, bag2, list); + bag = $temp$bag; + list = $temp$list; + continue bagToList; + } + } + }); + var elm$parser$Parser$Advanced$run = F2(function(_n0, src) { + var parse = _n0.a; + var _n1 = parse({ + col: 1, + context: _List_Nil, + indent: 1, + offset: 0, + row: 1, + src: src + }); + if (_n1.$ === "Good") { + var value = _n1.b; + return elm$core$Result$Ok(value); + } else { + var bag = _n1.b; + return elm$core$Result$Err( + A2(elm$parser$Parser$Advanced$bagToList, bag, _List_Nil) + ); + } + }); + var elm$parser$Parser$run = F2(function(parser, source) { + var _n0 = A2(elm$parser$Parser$Advanced$run, parser, source); + if (_n0.$ === "Ok") { + var a = _n0.a; + return elm$core$Result$Ok(a); + } else { + var problems = _n0.a; + return elm$core$Result$Err( + A2(elm$core$List$map, elm$parser$Parser$problemToDeadEnd, problems) + ); + } + }); + var elm$parser$Parser$Advanced$Bad = F2(function(a, b) { + return { $: "Bad", a: a, b: b }; + }); + var elm$parser$Parser$Advanced$Good = F3(function(a, b, c) { + return { $: "Good", a: a, b: b, c: c }; + }); + var elm$parser$Parser$Advanced$Parser = function(a) { + return { $: "Parser", a: a }; + }; + var elm$parser$Parser$Advanced$andThen = F2(function(callback, _n0) { + var parseA = _n0.a; + return elm$parser$Parser$Advanced$Parser(function(s0) { + var _n1 = parseA(s0); + if (_n1.$ === "Bad") { + var p = _n1.a; + var x = _n1.b; + return A2(elm$parser$Parser$Advanced$Bad, p, x); + } else { + var p1 = _n1.a; + var a = _n1.b; + var s1 = _n1.c; + var _n2 = callback(a); + var parseB = _n2.a; + var _n3 = parseB(s1); + if (_n3.$ === "Bad") { + var p2 = _n3.a; + var x = _n3.b; + return A2(elm$parser$Parser$Advanced$Bad, p1 || p2, x); + } else { + var p2 = _n3.a; + var b = _n3.b; + var s2 = _n3.c; + return A3(elm$parser$Parser$Advanced$Good, p1 || p2, b, s2); + } + } + }); + }); + var elm$parser$Parser$andThen = elm$parser$Parser$Advanced$andThen; + var elm$parser$Parser$ExpectingEnd = { $: "ExpectingEnd" }; + var elm$parser$Parser$Advanced$AddRight = F2(function(a, b) { + return { $: "AddRight", a: a, b: b }; + }); + var elm$parser$Parser$Advanced$Empty = { $: "Empty" }; + var elm$parser$Parser$Advanced$Problem = F4(function( + row, + col, + problem, + contextStack + ) { + return { col: col, contextStack: contextStack, problem: problem, row: row }; + }); + var elm$parser$Parser$Advanced$fromState = F2(function(s, x) { + return A2( + elm$parser$Parser$Advanced$AddRight, + elm$parser$Parser$Advanced$Empty, + A4(elm$parser$Parser$Advanced$Problem, s.row, s.col, x, s.context) + ); + }); + var elm$parser$Parser$Advanced$end = function(x) { + return elm$parser$Parser$Advanced$Parser(function(s) { + return _Utils_eq(elm$core$String$length(s.src), s.offset) + ? A3(elm$parser$Parser$Advanced$Good, false, _Utils_Tuple0, s) + : A2( + elm$parser$Parser$Advanced$Bad, + false, + A2(elm$parser$Parser$Advanced$fromState, s, x) + ); + }); + }; + var elm$parser$Parser$end = elm$parser$Parser$Advanced$end( + elm$parser$Parser$ExpectingEnd + ); + var elm$parser$Parser$Advanced$map2 = F3(function(func, _n0, _n1) { + var parseA = _n0.a; + var parseB = _n1.a; + return elm$parser$Parser$Advanced$Parser(function(s0) { + var _n2 = parseA(s0); + if (_n2.$ === "Bad") { + var p = _n2.a; + var x = _n2.b; + return A2(elm$parser$Parser$Advanced$Bad, p, x); + } else { + var p1 = _n2.a; + var a = _n2.b; + var s1 = _n2.c; + var _n3 = parseB(s1); + if (_n3.$ === "Bad") { + var p2 = _n3.a; + var x = _n3.b; + return A2(elm$parser$Parser$Advanced$Bad, p1 || p2, x); + } else { + var p2 = _n3.a; + var b = _n3.b; + var s2 = _n3.c; + return A3( + elm$parser$Parser$Advanced$Good, + p1 || p2, + A2(func, a, b), + s2 + ); + } + } + }); + }); + var elm$parser$Parser$Advanced$ignorer = F2(function( + keepParser, + ignoreParser + ) { + return A3( + elm$parser$Parser$Advanced$map2, + elm$core$Basics$always, + keepParser, + ignoreParser + ); + }); + var elm$parser$Parser$ignorer = elm$parser$Parser$Advanced$ignorer; + var elm$parser$Parser$Advanced$keeper = F2(function(parseFunc, parseArg) { + return A3( + elm$parser$Parser$Advanced$map2, + elm$core$Basics$apL, + parseFunc, + parseArg + ); + }); + var elm$parser$Parser$keeper = elm$parser$Parser$Advanced$keeper; + var elm$parser$Parser$Advanced$map = F2(function(func, _n0) { + var parse = _n0.a; + return elm$parser$Parser$Advanced$Parser(function(s0) { + var _n1 = parse(s0); + if (_n1.$ === "Good") { + var p = _n1.a; + var a = _n1.b; + var s1 = _n1.c; + return A3(elm$parser$Parser$Advanced$Good, p, func(a), s1); + } else { + var p = _n1.a; + var x = _n1.b; + return A2(elm$parser$Parser$Advanced$Bad, p, x); + } + }); + }); + var elm$parser$Parser$map = elm$parser$Parser$Advanced$map; + var elm$parser$Parser$Advanced$Append = F2(function(a, b) { + return { $: "Append", a: a, b: b }; + }); + var elm$parser$Parser$Advanced$oneOfHelp = F3(function(s0, bag, parsers) { + oneOfHelp: while (true) { + if (!parsers.b) { + return A2(elm$parser$Parser$Advanced$Bad, false, bag); + } else { + var parse = parsers.a.a; + var remainingParsers = parsers.b; + var _n1 = parse(s0); + if (_n1.$ === "Good") { + var step = _n1; + return step; + } else { + var step = _n1; + var p = step.a; + var x = step.b; + if (p) { + return step; + } else { + var $temp$s0 = s0, + $temp$bag = A2(elm$parser$Parser$Advanced$Append, bag, x), + $temp$parsers = remainingParsers; + s0 = $temp$s0; + bag = $temp$bag; + parsers = $temp$parsers; + continue oneOfHelp; + } + } + } + } + }); + var elm$parser$Parser$Advanced$oneOf = function(parsers) { + return elm$parser$Parser$Advanced$Parser(function(s) { + return A3( + elm$parser$Parser$Advanced$oneOfHelp, + s, + elm$parser$Parser$Advanced$Empty, + parsers + ); + }); + }; + var elm$parser$Parser$oneOf = elm$parser$Parser$Advanced$oneOf; + var elm$parser$Parser$Advanced$succeed = function(a) { + return elm$parser$Parser$Advanced$Parser(function(s) { + return A3(elm$parser$Parser$Advanced$Good, false, a, s); + }); + }; + var elm$parser$Parser$succeed = elm$parser$Parser$Advanced$succeed; + var elm$parser$Parser$ExpectingSymbol = function(a) { + return { $: "ExpectingSymbol", a: a }; + }; + var elm$parser$Parser$Advanced$Token = F2(function(a, b) { + return { $: "Token", a: a, b: b }; + }); + var elm$parser$Parser$Advanced$isSubString = _Parser_isSubString; + var elm$parser$Parser$Advanced$token = function(_n0) { + var str = _n0.a; + var expecting = _n0.b; + var progress = !elm$core$String$isEmpty(str); + return elm$parser$Parser$Advanced$Parser(function(s) { + var _n1 = A5( + elm$parser$Parser$Advanced$isSubString, + str, + s.offset, + s.row, + s.col, + s.src + ); + var newOffset = _n1.a; + var newRow = _n1.b; + var newCol = _n1.c; + return _Utils_eq(newOffset, -1) + ? A2( + elm$parser$Parser$Advanced$Bad, + false, + A2(elm$parser$Parser$Advanced$fromState, s, expecting) + ) + : A3(elm$parser$Parser$Advanced$Good, progress, _Utils_Tuple0, { + col: newCol, + context: s.context, + indent: s.indent, + offset: newOffset, + row: newRow, + src: s.src + }); + }); + }; + var elm$parser$Parser$Advanced$symbol = elm$parser$Parser$Advanced$token; + var elm$parser$Parser$symbol = function(str) { + return elm$parser$Parser$Advanced$symbol( + A2( + elm$parser$Parser$Advanced$Token, + str, + elm$parser$Parser$ExpectingSymbol(str) + ) + ); + }; + var elm$time$Time$Posix = function(a) { + return { $: "Posix", a: a }; + }; + var elm$time$Time$millisToPosix = elm$time$Time$Posix; + var rtfeldman$elm_iso8601_date_strings$Iso8601$fromParts = F6(function( + monthYearDayMs, + hour, + minute, + second, + ms, + utcOffsetMinutes + ) { + return elm$time$Time$millisToPosix( + monthYearDayMs + + hour * 60 * 60 * 1000 + + (minute - utcOffsetMinutes) * 60 * 1000 + + second * 1000 + + ms + ); + }); + var elm$parser$Parser$Advanced$isSubChar = _Parser_isSubChar; + var elm$parser$Parser$Advanced$chompWhileHelp = F5(function( + isGood, + offset, + row, + col, + s0 + ) { + chompWhileHelp: while (true) { + var newOffset = A3( + elm$parser$Parser$Advanced$isSubChar, + isGood, + offset, + s0.src + ); + if (_Utils_eq(newOffset, -1)) { + return A3( + elm$parser$Parser$Advanced$Good, + _Utils_cmp(s0.offset, offset) < 0, + _Utils_Tuple0, + { + col: col, + context: s0.context, + indent: s0.indent, + offset: offset, + row: row, + src: s0.src + } + ); + } else { + if (_Utils_eq(newOffset, -2)) { + var $temp$isGood = isGood, + $temp$offset = offset + 1, + $temp$row = row + 1, + $temp$col = 1, + $temp$s0 = s0; + isGood = $temp$isGood; + offset = $temp$offset; + row = $temp$row; + col = $temp$col; + s0 = $temp$s0; + continue chompWhileHelp; + } else { + var $temp$isGood = isGood, + $temp$offset = newOffset, + $temp$row = row, + $temp$col = col + 1, + $temp$s0 = s0; + isGood = $temp$isGood; + offset = $temp$offset; + row = $temp$row; + col = $temp$col; + s0 = $temp$s0; + continue chompWhileHelp; + } + } + } + }); + var elm$parser$Parser$Advanced$chompWhile = function(isGood) { + return elm$parser$Parser$Advanced$Parser(function(s) { + return A5( + elm$parser$Parser$Advanced$chompWhileHelp, + isGood, + s.offset, + s.row, + s.col, + s + ); + }); + }; + var elm$parser$Parser$chompWhile = elm$parser$Parser$Advanced$chompWhile; + var elm$parser$Parser$Advanced$mapChompedString = F2(function(func, _n0) { + var parse = _n0.a; + return elm$parser$Parser$Advanced$Parser(function(s0) { + var _n1 = parse(s0); + if (_n1.$ === "Bad") { + var p = _n1.a; + var x = _n1.b; + return A2(elm$parser$Parser$Advanced$Bad, p, x); + } else { + var p = _n1.a; + var a = _n1.b; + var s1 = _n1.c; + return A3( + elm$parser$Parser$Advanced$Good, + p, + A2(func, A3(elm$core$String$slice, s0.offset, s1.offset, s0.src), a), + s1 + ); + } + }); + }); + var elm$parser$Parser$Advanced$getChompedString = function(parser) { + return A2( + elm$parser$Parser$Advanced$mapChompedString, + elm$core$Basics$always, + parser + ); + }; + var elm$parser$Parser$getChompedString = elm$parser$Parser$Advanced$getChompedString; + var elm$parser$Parser$Problem = function(a) { + return { $: "Problem", a: a }; + }; + var elm$parser$Parser$Advanced$problem = function(x) { + return elm$parser$Parser$Advanced$Parser(function(s) { + return A2( + elm$parser$Parser$Advanced$Bad, + false, + A2(elm$parser$Parser$Advanced$fromState, s, x) + ); + }); + }; + var elm$parser$Parser$problem = function(msg) { + return elm$parser$Parser$Advanced$problem(elm$parser$Parser$Problem(msg)); + }; + var rtfeldman$elm_iso8601_date_strings$Iso8601$paddedInt = function( + quantity + ) { + return A2( + elm$parser$Parser$andThen, + function(str) { + if (_Utils_eq(elm$core$String$length(str), quantity)) { + var _n0 = elm$core$String$toInt(str); + if (_n0.$ === "Just") { + var intVal = _n0.a; + return elm$parser$Parser$succeed(intVal); + } else { + return elm$parser$Parser$problem( + 'Invalid integer: "' + (str + '"') + ); + } + } else { + return elm$parser$Parser$problem( + "Expected " + + (elm$core$String$fromInt(quantity) + + (" digits, but got " + + elm$core$String$fromInt(elm$core$String$length(str)))) + ); + } + }, + elm$parser$Parser$getChompedString( + elm$parser$Parser$chompWhile(elm$core$Char$isDigit) + ) + ); + }; + var rtfeldman$elm_iso8601_date_strings$Iso8601$epochYear = 1970; + var rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay = function(day) { + return elm$parser$Parser$problem( + "Invalid day: " + elm$core$String$fromInt(day) + ); + }; + var elm$core$Basics$modBy = _Basics_modBy; + var rtfeldman$elm_iso8601_date_strings$Iso8601$isLeapYear = function(year) { + return ( + !A2(elm$core$Basics$modBy, 4, year) && + (A2(elm$core$Basics$modBy, 100, year) || + !A2(elm$core$Basics$modBy, 400, year)) + ); + }; + var rtfeldman$elm_iso8601_date_strings$Iso8601$leapYearsBefore = function( + y1 + ) { + var y = y1 - 1; + return ((y / 4) | 0) - ((y / 100) | 0) + ((y / 400) | 0); + }; + var rtfeldman$elm_iso8601_date_strings$Iso8601$msPerDay = 86400000; + var rtfeldman$elm_iso8601_date_strings$Iso8601$msPerYear = 31536000000; + var rtfeldman$elm_iso8601_date_strings$Iso8601$yearMonthDay = function(_n0) { + var year = _n0.a; + var month = _n0.b; + var dayInMonth = _n0.c; + if (dayInMonth < 0) { + return rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay(dayInMonth); + } else { + var succeedWith = function(extraMs) { + var yearMs = + rtfeldman$elm_iso8601_date_strings$Iso8601$msPerYear * + (year - rtfeldman$elm_iso8601_date_strings$Iso8601$epochYear); + var days = + month < 3 || + !rtfeldman$elm_iso8601_date_strings$Iso8601$isLeapYear(year) + ? dayInMonth - 1 + : dayInMonth; + var dayMs = + rtfeldman$elm_iso8601_date_strings$Iso8601$msPerDay * + (days + + (rtfeldman$elm_iso8601_date_strings$Iso8601$leapYearsBefore(year) - + rtfeldman$elm_iso8601_date_strings$Iso8601$leapYearsBefore( + rtfeldman$elm_iso8601_date_strings$Iso8601$epochYear + ))); + return elm$parser$Parser$succeed(extraMs + yearMs + dayMs); + }; + switch (month) { + case 1: + return dayInMonth > 31 + ? rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay(dayInMonth) + : succeedWith(0); + case 2: + return dayInMonth > 29 || + (dayInMonth === 29 && + !rtfeldman$elm_iso8601_date_strings$Iso8601$isLeapYear(year)) + ? rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay(dayInMonth) + : succeedWith(2678400000); + case 3: + return dayInMonth > 31 + ? rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay(dayInMonth) + : succeedWith(5097600000); + case 4: + return dayInMonth > 30 + ? rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay(dayInMonth) + : succeedWith(7776000000); + case 5: + return dayInMonth > 31 + ? rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay(dayInMonth) + : succeedWith(10368000000); + case 6: + return dayInMonth > 30 + ? rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay(dayInMonth) + : succeedWith(13046400000); + case 7: + return dayInMonth > 31 + ? rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay(dayInMonth) + : succeedWith(15638400000); + case 8: + return dayInMonth > 31 + ? rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay(dayInMonth) + : succeedWith(18316800000); + case 9: + return dayInMonth > 30 + ? rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay(dayInMonth) + : succeedWith(20995200000); + case 10: + return dayInMonth > 31 + ? rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay(dayInMonth) + : succeedWith(23587200000); + case 11: + return dayInMonth > 30 + ? rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay(dayInMonth) + : succeedWith(26265600000); + case 12: + return dayInMonth > 31 + ? rtfeldman$elm_iso8601_date_strings$Iso8601$invalidDay(dayInMonth) + : succeedWith(28857600000); + default: + return elm$parser$Parser$problem( + 'Invalid month: "' + (elm$core$String$fromInt(month) + '"') + ); + } + } + }; + var rtfeldman$elm_iso8601_date_strings$Iso8601$monthYearDayInMs = A2( + elm$parser$Parser$andThen, + rtfeldman$elm_iso8601_date_strings$Iso8601$yearMonthDay, + A2( + elm$parser$Parser$keeper, + A2( + elm$parser$Parser$keeper, + A2( + elm$parser$Parser$keeper, + elm$parser$Parser$succeed( + F3(function(year, month, day) { + return _Utils_Tuple3(year, month, day); + }) + ), + A2( + elm$parser$Parser$ignorer, + rtfeldman$elm_iso8601_date_strings$Iso8601$paddedInt(4), + elm$parser$Parser$symbol("-") + ) + ), + A2( + elm$parser$Parser$ignorer, + rtfeldman$elm_iso8601_date_strings$Iso8601$paddedInt(2), + elm$parser$Parser$symbol("-") + ) + ), + rtfeldman$elm_iso8601_date_strings$Iso8601$paddedInt(2) + ) + ); + var rtfeldman$elm_iso8601_date_strings$Iso8601$utcOffsetMinutesFromParts = F3( + function(multiplier, hours, minutes) { + return multiplier * (hours * 60 + minutes); + } + ); + var rtfeldman$elm_iso8601_date_strings$Iso8601$iso8601 = A2( + elm$parser$Parser$andThen, + function(datePart) { + return elm$parser$Parser$oneOf( + _List_fromArray([ + A2( + elm$parser$Parser$keeper, + A2( + elm$parser$Parser$keeper, + A2( + elm$parser$Parser$keeper, + A2( + elm$parser$Parser$keeper, + A2( + elm$parser$Parser$keeper, + A2( + elm$parser$Parser$ignorer, + elm$parser$Parser$succeed( + rtfeldman$elm_iso8601_date_strings$Iso8601$fromParts( + datePart + ) + ), + elm$parser$Parser$symbol("T") + ), + A2( + elm$parser$Parser$ignorer, + rtfeldman$elm_iso8601_date_strings$Iso8601$paddedInt(2), + elm$parser$Parser$symbol(":") + ) + ), + A2( + elm$parser$Parser$ignorer, + rtfeldman$elm_iso8601_date_strings$Iso8601$paddedInt(2), + elm$parser$Parser$symbol(":") + ) + ), + rtfeldman$elm_iso8601_date_strings$Iso8601$paddedInt(2) + ), + elm$parser$Parser$oneOf( + _List_fromArray([ + A2( + elm$parser$Parser$keeper, + A2( + elm$parser$Parser$ignorer, + elm$parser$Parser$succeed(elm$core$Basics$identity), + elm$parser$Parser$symbol(".") + ), + rtfeldman$elm_iso8601_date_strings$Iso8601$paddedInt(3) + ), + elm$parser$Parser$succeed(0) + ]) + ) + ), + elm$parser$Parser$oneOf( + _List_fromArray([ + A2( + elm$parser$Parser$map, + function(_n0) { + return 0; + }, + elm$parser$Parser$symbol("Z") + ), + A2( + elm$parser$Parser$keeper, + A2( + elm$parser$Parser$keeper, + A2( + elm$parser$Parser$keeper, + elm$parser$Parser$succeed( + rtfeldman$elm_iso8601_date_strings$Iso8601$utcOffsetMinutesFromParts + ), + elm$parser$Parser$oneOf( + _List_fromArray([ + A2( + elm$parser$Parser$map, + function(_n1) { + return 1; + }, + elm$parser$Parser$symbol("+") + ), + A2( + elm$parser$Parser$map, + function(_n2) { + return -1; + }, + elm$parser$Parser$symbol("-") + ) + ]) + ) + ), + A2( + elm$parser$Parser$ignorer, + rtfeldman$elm_iso8601_date_strings$Iso8601$paddedInt(2), + elm$parser$Parser$symbol(":") + ) + ), + rtfeldman$elm_iso8601_date_strings$Iso8601$paddedInt(2) + ) + ]) + ) + ), + A2( + elm$parser$Parser$ignorer, + elm$parser$Parser$succeed( + A6( + rtfeldman$elm_iso8601_date_strings$Iso8601$fromParts, + datePart, + 0, + 0, + 0, + 0, + 0 + ) + ), + elm$parser$Parser$end + ) + ]) + ); + }, + rtfeldman$elm_iso8601_date_strings$Iso8601$monthYearDayInMs + ); + var rtfeldman$elm_iso8601_date_strings$Iso8601$toTime = function(str) { + return A2( + elm$parser$Parser$run, + rtfeldman$elm_iso8601_date_strings$Iso8601$iso8601, + str + ); + }; + var rtfeldman$elm_iso8601_date_strings$Iso8601$decoder = A2( + elm$json$Json$Decode$andThen, + function(str) { + var _n0 = rtfeldman$elm_iso8601_date_strings$Iso8601$toTime(str); + if (_n0.$ === "Err") { + var deadEnds = _n0.a; + return elm$json$Json$Decode$fail( + elm$parser$Parser$deadEndsToString(deadEnds) + ); + } else { + var time = _n0.a; + return elm$json$Json$Decode$succeed(time); + } + }, + elm$json$Json$Decode$string + ); + var author$project$Article$metadataDecoder = A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "favoritesCount", + elm$json$Json$Decode$int, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "favorited", + elm$json$Json$Decode$bool, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "createdAt", + rtfeldman$elm_iso8601_date_strings$Iso8601$decoder, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "tagList", + elm$json$Json$Decode$list(elm$json$Json$Decode$string), + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "title", + elm$json$Json$Decode$string, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "description", + A2( + elm$json$Json$Decode$map, + elm$core$Maybe$withDefault(""), + elm$json$Json$Decode$nullable(elm$json$Json$Decode$string) + ), + elm$json$Json$Decode$succeed(author$project$Article$Metadata) + ) + ) + ) + ) + ) + ); + var author$project$Article$Slug$Slug = function(a) { + return { $: "Slug", a: a }; + }; + var author$project$Article$Slug$decoder = A2( + elm$json$Json$Decode$map, + author$project$Article$Slug$Slug, + elm$json$Json$Decode$string + ); + var author$project$Api$username = function(_n0) { + var val = _n0.a; + return val; + }; + var author$project$Author$IsNotFollowing = function(a) { + return { $: "IsNotFollowing", a: a }; + }; + var author$project$Author$IsViewer = F2(function(a, b) { + return { $: "IsViewer", a: a, b: b }; + }); + var author$project$Author$UnfollowedAuthor = F2(function(a, b) { + return { $: "UnfollowedAuthor", a: a, b: b }; + }); + var NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$optionalDecoder = F3( + function(pathDecoder, valDecoder, fallback) { + var nullOr = function(decoder) { + return elm$json$Json$Decode$oneOf( + _List_fromArray([decoder, elm$json$Json$Decode$null(fallback)]) + ); + }; + var handleResult = function(input) { + var _n0 = A2(elm$json$Json$Decode$decodeValue, pathDecoder, input); + if (_n0.$ === "Ok") { + var rawValue = _n0.a; + var _n1 = A2( + elm$json$Json$Decode$decodeValue, + nullOr(valDecoder), + rawValue + ); + if (_n1.$ === "Ok") { + var finalResult = _n1.a; + return elm$json$Json$Decode$succeed(finalResult); + } else { + var finalErr = _n1.a; + return elm$json$Json$Decode$fail( + elm$json$Json$Decode$errorToString(finalErr) + ); + } + } else { + return elm$json$Json$Decode$succeed(fallback); + } + }; + return A2( + elm$json$Json$Decode$andThen, + handleResult, + elm$json$Json$Decode$value + ); + } + ); + var NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$optional = F4( + function(key, valDecoder, fallback, decoder) { + return A2( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$custom, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$optionalDecoder, + A2(elm$json$Json$Decode$field, key, elm$json$Json$Decode$value), + valDecoder, + fallback + ), + decoder + ); + } + ); + var author$project$Author$FollowedAuthor = F2(function(a, b) { + return { $: "FollowedAuthor", a: a, b: b }; + }); + var author$project$Author$IsFollowing = function(a) { + return { $: "IsFollowing", a: a }; + }; + var author$project$Author$authorFromFollowing = F3(function( + prof, + uname, + isFollowing + ) { + return isFollowing + ? author$project$Author$IsFollowing( + A2(author$project$Author$FollowedAuthor, uname, prof) + ) + : author$project$Author$IsNotFollowing( + A2(author$project$Author$UnfollowedAuthor, uname, prof) + ); + }); + var author$project$Author$nonViewerDecoder = F2(function(prof, uname) { + return A4( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$optional, + "following", + elm$json$Json$Decode$bool, + false, + elm$json$Json$Decode$succeed( + A2(author$project$Author$authorFromFollowing, prof, uname) + ) + ); + }); + var author$project$Author$decodeFromPair = F2(function(maybeCred, _n0) { + var prof = _n0.a; + var uname = _n0.b; + if (maybeCred.$ === "Nothing") { + return elm$json$Json$Decode$succeed( + author$project$Author$IsNotFollowing( + A2(author$project$Author$UnfollowedAuthor, uname, prof) + ) + ); + } else { + var cred = maybeCred.a; + return _Utils_eq(uname, author$project$Api$username(cred)) + ? elm$json$Json$Decode$succeed( + A2(author$project$Author$IsViewer, cred, prof) + ) + : A2(author$project$Author$nonViewerDecoder, prof, uname); + } + }); + var author$project$Avatar$Avatar = function(a) { + return { $: "Avatar", a: a }; + }; + var author$project$Avatar$decoder = A2( + elm$json$Json$Decode$map, + author$project$Avatar$Avatar, + elm$json$Json$Decode$nullable(elm$json$Json$Decode$string) + ); + var author$project$Profile$Internals = F2(function(bio, avatar) { + return { avatar: avatar, bio: bio }; + }); + var author$project$Profile$Profile = function(a) { + return { $: "Profile", a: a }; + }; + var author$project$Profile$decoder = A2( + elm$json$Json$Decode$map, + author$project$Profile$Profile, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "image", + author$project$Avatar$decoder, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "bio", + elm$json$Json$Decode$nullable(elm$json$Json$Decode$string), + elm$json$Json$Decode$succeed(author$project$Profile$Internals) + ) + ) + ); + var elm$core$Tuple$pair = F2(function(a, b) { + return _Utils_Tuple2(a, b); + }); + var author$project$Author$decoder = function(maybeCred) { + return A2( + elm$json$Json$Decode$andThen, + author$project$Author$decodeFromPair(maybeCred), + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "username", + author$project$Username$decoder, + A2( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$custom, + author$project$Profile$decoder, + elm$json$Json$Decode$succeed(elm$core$Tuple$pair) + ) + ) + ); + }; + var author$project$Article$internalsDecoder = function(maybeCred) { + return A2( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$custom, + author$project$Article$metadataDecoder, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "author", + author$project$Author$decoder(maybeCred), + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "slug", + author$project$Article$Slug$decoder, + elm$json$Json$Decode$succeed(author$project$Article$Internals) + ) + ) + ); + }; + var author$project$Article$Body$Body = function(a) { + return { $: "Body", a: a }; + }; + var author$project$Article$Body$decoder = A2( + elm$json$Json$Decode$map, + author$project$Article$Body$Body, + elm$json$Json$Decode$string + ); + var author$project$Article$fullDecoder = function(maybeCred) { + return A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "body", + A2( + elm$json$Json$Decode$map, + author$project$Article$Full, + author$project$Article$Body$decoder + ), + A2( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$custom, + author$project$Article$internalsDecoder(maybeCred), + elm$json$Json$Decode$succeed(author$project$Article$Article) + ) + ); + }; + var author$project$Article$fetch = F2(function(maybeCred, articleSlug) { + return A3( + author$project$Api$get, + author$project$Api$Endpoint$article(articleSlug), + maybeCred, + A2( + elm$json$Json$Decode$field, + "article", + author$project$Article$fullDecoder(maybeCred) + ) + ); + }); + var author$project$Api$Endpoint$comments = function(slug) { + return A2( + author$project$Api$Endpoint$url, + _List_fromArray([ + "articles", + author$project$Article$Slug$toString(slug), + "comments" + ]), + _List_Nil + ); + }; + var author$project$Article$Comment$Comment = function(a) { + return { $: "Comment", a: a }; + }; + var author$project$Article$Comment$Internals = F4(function( + id, + body, + createdAt, + author + ) { + return { author: author, body: body, createdAt: createdAt, id: id }; + }); + var author$project$CommentId$CommentId = function(a) { + return { $: "CommentId", a: a }; + }; + var author$project$CommentId$decoder = A2( + elm$json$Json$Decode$map, + author$project$CommentId$CommentId, + elm$json$Json$Decode$int + ); + var author$project$Article$Comment$decoder = function(maybeCred) { + return A2( + elm$json$Json$Decode$map, + author$project$Article$Comment$Comment, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "author", + author$project$Author$decoder(maybeCred), + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "createdAt", + rtfeldman$elm_iso8601_date_strings$Iso8601$decoder, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "body", + elm$json$Json$Decode$string, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "id", + author$project$CommentId$decoder, + elm$json$Json$Decode$succeed( + author$project$Article$Comment$Internals + ) + ) + ) + ) + ) + ); + }; + var author$project$Article$Comment$list = F2(function( + maybeCred, + articleSlug + ) { + return A3( + author$project$Api$get, + author$project$Api$Endpoint$comments(articleSlug), + maybeCred, + A2( + elm$json$Json$Decode$field, + "comments", + elm$json$Json$Decode$list( + author$project$Article$Comment$decoder(maybeCred) + ) + ) + ); + }); + var elm$core$Process$sleep = _Process_sleep; + var author$project$Loading$slowThreshold = elm$core$Process$sleep(500); + var author$project$Page$Article$CompletedLoadArticle = function(a) { + return { $: "CompletedLoadArticle", a: a }; + }; + var author$project$Page$Article$CompletedLoadComments = function(a) { + return { $: "CompletedLoadComments", a: a }; + }; + var author$project$Page$Article$GotTimeZone = function(a) { + return { $: "GotTimeZone", a: a }; + }; + var author$project$Page$Article$Loading = { $: "Loading" }; + var author$project$Page$Article$PassedSlowLoadThreshold = { + $: "PassedSlowLoadThreshold" + }; + var author$project$Viewer$cred = function(_n0) { + var val = _n0.b; + return val; + }; + var author$project$Session$cred = function(session) { + if (session.$ === "LoggedIn") { + var val = session.b; + return elm$core$Maybe$Just(author$project$Viewer$cred(val)); + } else { + return elm$core$Maybe$Nothing; + } + }; + var elm$core$Task$onError = _Scheduler_onError; + var elm$core$Task$attempt = F2(function(resultToMessage, task) { + return elm$core$Task$command( + elm$core$Task$Perform( + A2( + elm$core$Task$onError, + A2( + elm$core$Basics$composeL, + A2( + elm$core$Basics$composeL, + elm$core$Task$succeed, + resultToMessage + ), + elm$core$Result$Err + ), + A2( + elm$core$Task$andThen, + A2( + elm$core$Basics$composeL, + A2( + elm$core$Basics$composeL, + elm$core$Task$succeed, + resultToMessage + ), + elm$core$Result$Ok + ), + task + ) + ) + ) + ); + }); + var elm$http$Http$toTask = function(_n0) { + var request_ = _n0.a; + return A2(_Http_toTask, request_, elm$core$Maybe$Nothing); + }; + var elm$http$Http$send = F2(function(resultToMessage, request_) { + return A2( + elm$core$Task$attempt, + resultToMessage, + elm$http$Http$toTask(request_) + ); + }); + var elm$time$Time$Name = function(a) { + return { $: "Name", a: a }; + }; + var elm$time$Time$Offset = function(a) { + return { $: "Offset", a: a }; + }; + var elm$time$Time$Zone = F2(function(a, b) { + return { $: "Zone", a: a, b: b }; + }); + var elm$time$Time$customZone = elm$time$Time$Zone; + var elm$time$Time$here = _Time_here(_Utils_Tuple0); + var elm$time$Time$utc = A2(elm$time$Time$Zone, 0, _List_Nil); + var author$project$Page$Article$init = F2(function(session, slug) { + var maybeCred = author$project$Session$cred(session); + return _Utils_Tuple2( + { + article: author$project$Page$Article$Loading, + comments: author$project$Page$Article$Loading, + errors: _List_Nil, + session: session, + timeZone: elm$time$Time$utc + }, + elm$core$Platform$Cmd$batch( + _List_fromArray([ + A2( + elm$http$Http$send, + author$project$Page$Article$CompletedLoadArticle, + A2(author$project$Article$fetch, maybeCred, slug) + ), + A2( + elm$http$Http$send, + author$project$Page$Article$CompletedLoadComments, + A2(author$project$Article$Comment$list, maybeCred, slug) + ), + A2( + elm$core$Task$perform, + author$project$Page$Article$GotTimeZone, + elm$time$Time$here + ), + A2( + elm$core$Task$perform, + function(_n0) { + return author$project$Page$Article$PassedSlowLoadThreshold; + }, + author$project$Loading$slowThreshold + ) + ]) + ) + ); + }); + var author$project$Page$Article$Editor$CompletedArticleLoad = function(a) { + return { $: "CompletedArticleLoad", a: a }; + }; + var author$project$Page$Article$Editor$Loading = function(a) { + return { $: "Loading", a: a }; + }; + var author$project$Page$Article$Editor$PassedSlowLoadThreshold = { + $: "PassedSlowLoadThreshold" + }; + var elm$core$Task$fail = _Scheduler_fail; + var elm$core$Task$mapError = F2(function(convert, task) { + return A2( + elm$core$Task$onError, + A2(elm$core$Basics$composeL, elm$core$Task$fail, convert), + task + ); + }); + var author$project$Page$Article$Editor$initEdit = F2(function(session, slug) { + return _Utils_Tuple2( + { + session: session, + status: author$project$Page$Article$Editor$Loading(slug) + }, + elm$core$Platform$Cmd$batch( + _List_fromArray([ + A2( + elm$core$Task$attempt, + author$project$Page$Article$Editor$CompletedArticleLoad, + A2( + elm$core$Task$mapError, + function(httpError) { + return _Utils_Tuple2(slug, httpError); + }, + elm$http$Http$toTask( + A2( + author$project$Article$fetch, + author$project$Session$cred(session), + slug + ) + ) + ) + ), + A2( + elm$core$Task$perform, + function(_n0) { + return author$project$Page$Article$Editor$PassedSlowLoadThreshold; + }, + author$project$Loading$slowThreshold + ) + ]) + ) + ); + }); + var author$project$Page$Article$Editor$EditingNew = F2(function(a, b) { + return { $: "EditingNew", a: a, b: b }; + }); + var author$project$Page$Article$Editor$initNew = function(session) { + return _Utils_Tuple2( + { + session: session, + status: A2(author$project$Page$Article$Editor$EditingNew, _List_Nil, { + body: "", + description: "", + tags: "", + title: "" + }) + }, + elm$core$Platform$Cmd$none + ); + }; + var author$project$Api$Endpoint$tags = A2( + author$project$Api$Endpoint$url, + _List_fromArray(["tags"]), + _List_Nil + ); + var author$project$Article$Tag$Tag = function(a) { + return { $: "Tag", a: a }; + }; + var author$project$Article$Tag$decoder = A2( + elm$json$Json$Decode$map, + author$project$Article$Tag$Tag, + elm$json$Json$Decode$string + ); + var author$project$Article$Tag$list = A3( + author$project$Api$get, + author$project$Api$Endpoint$tags, + elm$core$Maybe$Nothing, + A2( + elm$json$Json$Decode$field, + "tags", + elm$json$Json$Decode$list(author$project$Article$Tag$decoder) + ) + ); + var author$project$Page$Home$CompletedFeedLoad = function(a) { + return { $: "CompletedFeedLoad", a: a }; + }; + var author$project$Page$Home$CompletedTagsLoad = function(a) { + return { $: "CompletedTagsLoad", a: a }; + }; + var author$project$Page$Home$GlobalFeed = { $: "GlobalFeed" }; + var author$project$Page$Home$GotTimeZone = function(a) { + return { $: "GotTimeZone", a: a }; + }; + var author$project$Page$Home$Loading = { $: "Loading" }; + var author$project$Page$Home$PassedSlowLoadThreshold = { + $: "PassedSlowLoadThreshold" + }; + var author$project$Page$Home$YourFeed = function(a) { + return { $: "YourFeed", a: a }; + }; + var author$project$Api$Endpoint$articles = function(params) { + return A2( + author$project$Api$Endpoint$url, + _List_fromArray(["articles"]), + params + ); + }; + var author$project$Api$Endpoint$feed = function(params) { + return A2( + author$project$Api$Endpoint$url, + _List_fromArray(["articles", "feed"]), + params + ); + }; + var elm$core$Basics$composeR = F3(function(f, g, x) { + return g(f(x)); + }); + var NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$hardcoded = A2( + elm$core$Basics$composeR, + elm$json$Json$Decode$succeed, + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$custom + ); + var author$project$Article$Preview = { $: "Preview" }; + var author$project$Article$previewDecoder = function(maybeCred) { + return A2( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$hardcoded, + author$project$Article$Preview, + A2( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$custom, + author$project$Article$internalsDecoder(maybeCred), + elm$json$Json$Decode$succeed(author$project$Article$Article) + ) + ); + }; + var author$project$Article$Feed$pageCountDecoder = function(resultsPerPage) { + return A2( + elm$json$Json$Decode$map, + function(total) { + return elm$core$Basics$ceiling(total / resultsPerPage); + }, + elm$json$Json$Decode$int + ); + }; + var author$project$PaginatedList$PaginatedList = function(a) { + return { $: "PaginatedList", a: a }; + }; + var author$project$PaginatedList$fromList = F2(function(totalCount, list) { + return author$project$PaginatedList$PaginatedList({ + total: totalCount, + values: list + }); + }); + var author$project$Article$Feed$decoder = F2(function( + maybeCred, + resultsPerPage + ) { + return A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "articles", + elm$json$Json$Decode$list( + author$project$Article$previewDecoder(maybeCred) + ), + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "articlesCount", + author$project$Article$Feed$pageCountDecoder(resultsPerPage), + elm$json$Json$Decode$succeed(author$project$PaginatedList$fromList) + ) + ); + }); + var author$project$Article$Feed$Model = function(a) { + return { $: "Model", a: a }; + }; + var author$project$Article$Feed$init = F2(function(session, articles) { + return author$project$Article$Feed$Model({ + articles: articles, + errors: _List_Nil, + isLoading: false, + session: session + }); + }); + var author$project$Article$Tag$toString = function(_n0) { + var slug = _n0.a; + return slug; + }; + var author$project$Page$Home$articlesPerPage = 10; + var elm$url$Url$percentEncode = _Url_percentEncode; + var elm$url$Url$Builder$QueryParameter = F2(function(a, b) { + return { $: "QueryParameter", a: a, b: b }; + }); + var elm$url$Url$Builder$string = F2(function(key, value) { + return A2( + elm$url$Url$Builder$QueryParameter, + elm$url$Url$percentEncode(key), + elm$url$Url$percentEncode(value) + ); + }); + var author$project$PaginatedList$params = function(_n0) { + var page = _n0.page; + var resultsPerPage = _n0.resultsPerPage; + var offset = (page - 1) * resultsPerPage; + return _List_fromArray([ + A2( + elm$url$Url$Builder$string, + "limit", + elm$core$String$fromInt(resultsPerPage) + ), + A2(elm$url$Url$Builder$string, "offset", elm$core$String$fromInt(offset)) + ]); + }; + var author$project$Page$Home$fetchFeed = F3(function( + session, + feedTabs, + page + ) { + var params = author$project$PaginatedList$params({ + page: page, + resultsPerPage: author$project$Page$Home$articlesPerPage + }); + var maybeCred = author$project$Session$cred(session); + var decoder = A2( + author$project$Article$Feed$decoder, + maybeCred, + author$project$Page$Home$articlesPerPage + ); + var request = (function() { + switch (feedTabs.$) { + case "YourFeed": + var cred = feedTabs.a; + return A3( + author$project$Api$get, + author$project$Api$Endpoint$feed(params), + maybeCred, + decoder + ); + case "GlobalFeed": + return A3( + author$project$Api$get, + author$project$Api$Endpoint$articles(params), + maybeCred, + decoder + ); + default: + var tag = feedTabs.a; + var firstParam = A2( + elm$url$Url$Builder$string, + "tag", + author$project$Article$Tag$toString(tag) + ); + return A3( + author$project$Api$get, + author$project$Api$Endpoint$articles( + A2(elm$core$List$cons, firstParam, params) + ), + maybeCred, + decoder + ); + } + })(); + return A2( + elm$core$Task$map, + author$project$Article$Feed$init(session), + elm$http$Http$toTask(request) + ); + }); + var author$project$Page$Home$init = function(session) { + var loadTags = elm$http$Http$toTask(author$project$Article$Tag$list); + var feedTab = (function() { + var _n1 = author$project$Session$cred(session); + if (_n1.$ === "Just") { + var cred = _n1.a; + return author$project$Page$Home$YourFeed(cred); + } else { + return author$project$Page$Home$GlobalFeed; + } + })(); + return _Utils_Tuple2( + { + feed: author$project$Page$Home$Loading, + feedPage: 1, + feedTab: feedTab, + session: session, + tags: author$project$Page$Home$Loading, + timeZone: elm$time$Time$utc + }, + elm$core$Platform$Cmd$batch( + _List_fromArray([ + A2( + elm$core$Task$attempt, + author$project$Page$Home$CompletedFeedLoad, + A3(author$project$Page$Home$fetchFeed, session, feedTab, 1) + ), + A2( + elm$http$Http$send, + author$project$Page$Home$CompletedTagsLoad, + author$project$Article$Tag$list + ), + A2( + elm$core$Task$perform, + author$project$Page$Home$GotTimeZone, + elm$time$Time$here + ), + A2( + elm$core$Task$perform, + function(_n0) { + return author$project$Page$Home$PassedSlowLoadThreshold; + }, + author$project$Loading$slowThreshold + ) + ]) + ) + ); + }; + var author$project$Page$Login$init = function(session) { + return _Utils_Tuple2( + { + form: { email: "", password: "" }, + problems: _List_Nil, + session: session + }, + elm$core$Platform$Cmd$none + ); + }; + var author$project$Username$toString = function(_n0) { + var username = _n0.a; + return username; + }; + var author$project$Api$Endpoint$profiles = function(uname) { + return A2( + author$project$Api$Endpoint$url, + _List_fromArray(["profiles", author$project$Username$toString(uname)]), + _List_Nil + ); + }; + var author$project$Author$fetch = F2(function(uname, maybeCred) { + return A3( + author$project$Api$get, + author$project$Api$Endpoint$profiles(uname), + maybeCred, + A2( + elm$json$Json$Decode$field, + "profile", + author$project$Author$decoder(maybeCred) + ) + ); + }); + var author$project$Page$Profile$CompletedAuthorLoad = function(a) { + return { $: "CompletedAuthorLoad", a: a }; + }; + var author$project$Page$Profile$GotTimeZone = function(a) { + return { $: "GotTimeZone", a: a }; + }; + var author$project$Page$Profile$Loading = function(a) { + return { $: "Loading", a: a }; + }; + var author$project$Page$Profile$PassedSlowLoadThreshold = { + $: "PassedSlowLoadThreshold" + }; + var author$project$Page$Profile$MyArticles = { $: "MyArticles" }; + var author$project$Page$Profile$defaultFeedTab = author$project$Page$Profile$MyArticles; + var author$project$Page$Profile$CompletedFeedLoad = function(a) { + return { $: "CompletedFeedLoad", a: a }; + }; + var author$project$Page$Profile$articlesPerPage = 5; + var author$project$Page$Profile$fetchFeed = F4(function( + session, + feedTabs, + username, + page + ) { + var maybeCred = author$project$Session$cred(session); + var firstParam = (function() { + if (feedTabs.$ === "MyArticles") { + return A2( + elm$url$Url$Builder$string, + "author", + author$project$Username$toString(username) + ); + } else { + return A2( + elm$url$Url$Builder$string, + "favorited", + author$project$Username$toString(username) + ); + } + })(); + var params = A2( + elm$core$List$cons, + firstParam, + author$project$PaginatedList$params({ + page: page, + resultsPerPage: author$project$Page$Profile$articlesPerPage + }) + ); + var expect = A2( + author$project$Article$Feed$decoder, + maybeCred, + author$project$Page$Profile$articlesPerPage + ); + return A2( + elm$core$Task$attempt, + author$project$Page$Profile$CompletedFeedLoad, + A2( + elm$core$Task$mapError, + elm$core$Tuple$pair(username), + A2( + elm$core$Task$map, + author$project$Article$Feed$init(session), + elm$http$Http$toTask( + A3( + author$project$Api$get, + author$project$Api$Endpoint$articles(params), + maybeCred, + expect + ) + ) + ) + ) + ); + }); + var author$project$Page$Profile$init = F2(function(session, username) { + var maybeCred = author$project$Session$cred(session); + return _Utils_Tuple2( + { + author: author$project$Page$Profile$Loading(username), + errors: _List_Nil, + feed: author$project$Page$Profile$Loading(username), + feedPage: 1, + feedTab: author$project$Page$Profile$defaultFeedTab, + session: session, + timeZone: elm$time$Time$utc + }, + elm$core$Platform$Cmd$batch( + _List_fromArray([ + A2( + elm$core$Task$attempt, + author$project$Page$Profile$CompletedAuthorLoad, + A2( + elm$core$Task$mapError, + elm$core$Tuple$pair(username), + elm$http$Http$toTask( + A2(author$project$Author$fetch, username, maybeCred) + ) + ) + ), + A4( + author$project$Page$Profile$fetchFeed, + session, + author$project$Page$Profile$defaultFeedTab, + username, + 1 + ), + A2( + elm$core$Task$perform, + author$project$Page$Profile$GotTimeZone, + elm$time$Time$here + ), + A2( + elm$core$Task$perform, + function(_n0) { + return author$project$Page$Profile$PassedSlowLoadThreshold; + }, + author$project$Loading$slowThreshold + ) + ]) + ) + ); + }); + var author$project$Page$Register$init = function(session) { + return _Utils_Tuple2( + { + form: { email: "", password: "", username: "" }, + problems: _List_Nil, + session: session + }, + elm$core$Platform$Cmd$none + ); + }; + var author$project$Api$Endpoint$user = A2( + author$project$Api$Endpoint$url, + _List_fromArray(["user"]), + _List_Nil + ); + var author$project$Page$Settings$CompletedFormLoad = function(a) { + return { $: "CompletedFormLoad", a: a }; + }; + var author$project$Page$Settings$Loading = { $: "Loading" }; + var author$project$Page$Settings$PassedSlowLoadThreshold = { + $: "PassedSlowLoadThreshold" + }; + var author$project$Page$Settings$Form = F5(function( + avatar, + bio, + email, + username, + password + ) { + return { + avatar: avatar, + bio: bio, + email: email, + password: password, + username: username + }; + }); + var author$project$Page$Settings$formDecoder = A2( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$hardcoded, + "", + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "username", + elm$json$Json$Decode$string, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "email", + elm$json$Json$Decode$string, + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "bio", + A2( + elm$json$Json$Decode$map, + elm$core$Maybe$withDefault(""), + elm$json$Json$Decode$nullable(elm$json$Json$Decode$string) + ), + A3( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$required, + "image", + A2( + elm$json$Json$Decode$map, + elm$core$Maybe$withDefault(""), + elm$json$Json$Decode$nullable(elm$json$Json$Decode$string) + ), + elm$json$Json$Decode$succeed(author$project$Page$Settings$Form) + ) + ) + ) + ) + ); + var author$project$Page$Settings$init = function(session) { + return _Utils_Tuple2( + { + problems: _List_Nil, + session: session, + status: author$project$Page$Settings$Loading + }, + elm$core$Platform$Cmd$batch( + _List_fromArray([ + A2( + elm$http$Http$send, + author$project$Page$Settings$CompletedFormLoad, + A3( + author$project$Api$get, + author$project$Api$Endpoint$user, + author$project$Session$cred(session), + A2( + elm$json$Json$Decode$field, + "user", + author$project$Page$Settings$formDecoder + ) + ) + ), + A2( + elm$core$Task$perform, + function(_n0) { + return author$project$Page$Settings$PassedSlowLoadThreshold; + }, + author$project$Loading$slowThreshold + ) + ]) + ) + ); + }; + var author$project$Route$Home = { $: "Home" }; + var author$project$Route$routeToString = function(page) { + var pieces = (function() { + switch (page.$) { + case "Home": + return _List_Nil; + case "Root": + return _List_Nil; + case "Login": + return _List_fromArray(["login"]); + case "Logout": + return _List_fromArray(["logout"]); + case "Register": + return _List_fromArray(["register"]); + case "Settings": + return _List_fromArray(["settings"]); + case "Article": + var slug = page.a; + return _List_fromArray([ + "article", + author$project$Article$Slug$toString(slug) + ]); + case "Profile": + var username = page.a; + return _List_fromArray([ + "profile", + author$project$Username$toString(username) + ]); + case "NewArticle": + return _List_fromArray(["editor"]); + default: + var slug = page.a; + return _List_fromArray([ + "editor", + author$project$Article$Slug$toString(slug) + ]); + } + })(); + return "#/" + A2(elm$core$String$join, "/", pieces); + }; + var elm$browser$Browser$Navigation$replaceUrl = _Browser_replaceUrl; + var author$project$Route$replaceUrl = F2(function(key, route) { + return A2( + elm$browser$Browser$Navigation$replaceUrl, + key, + author$project$Route$routeToString(route) + ); + }); + var author$project$Session$navKey = function(session) { + if (session.$ === "LoggedIn") { + var key = session.a; + return key; + } else { + var key = session.a; + return key; + } + }; + var author$project$Main$changeRouteTo = F2(function(maybeRoute, model) { + var session = author$project$Main$toSession(model); + if (maybeRoute.$ === "Nothing") { + return _Utils_Tuple2( + author$project$Main$NotFound(session), + elm$core$Platform$Cmd$none + ); + } else { + switch (maybeRoute.a.$) { + case "Root": + var _n1 = maybeRoute.a; + return _Utils_Tuple2( + model, + A2( + author$project$Route$replaceUrl, + author$project$Session$navKey(session), + author$project$Route$Home + ) + ); + case "Logout": + var _n2 = maybeRoute.a; + return _Utils_Tuple2(model, author$project$Api$logout); + case "NewArticle": + var _n3 = maybeRoute.a; + return A4( + author$project$Main$updateWith, + author$project$Main$Editor(elm$core$Maybe$Nothing), + author$project$Main$GotEditorMsg, + model, + author$project$Page$Article$Editor$initNew(session) + ); + case "EditArticle": + var slug = maybeRoute.a.a; + return A4( + author$project$Main$updateWith, + author$project$Main$Editor(elm$core$Maybe$Just(slug)), + author$project$Main$GotEditorMsg, + model, + A2(author$project$Page$Article$Editor$initEdit, session, slug) + ); + case "Settings": + var _n4 = maybeRoute.a; + return A4( + author$project$Main$updateWith, + author$project$Main$Settings, + author$project$Main$GotSettingsMsg, + model, + author$project$Page$Settings$init(session) + ); + case "Home": + var _n5 = maybeRoute.a; + return A4( + author$project$Main$updateWith, + author$project$Main$Home, + author$project$Main$GotHomeMsg, + model, + author$project$Page$Home$init(session) + ); + case "Login": + var _n6 = maybeRoute.a; + return A4( + author$project$Main$updateWith, + author$project$Main$Login, + author$project$Main$GotLoginMsg, + model, + author$project$Page$Login$init(session) + ); + case "Register": + var _n7 = maybeRoute.a; + return A4( + author$project$Main$updateWith, + author$project$Main$Register, + author$project$Main$GotRegisterMsg, + model, + author$project$Page$Register$init(session) + ); + case "Profile": + var username = maybeRoute.a.a; + return A4( + author$project$Main$updateWith, + author$project$Main$Profile(username), + author$project$Main$GotProfileMsg, + model, + A2(author$project$Page$Profile$init, session, username) + ); + default: + var slug = maybeRoute.a.a; + return A4( + author$project$Main$updateWith, + author$project$Main$Article, + author$project$Main$GotArticleMsg, + model, + A2(author$project$Page$Article$init, session, slug) + ); + } + } + }); + var elm$url$Url$Parser$Parser = function(a) { + return { $: "Parser", a: a }; + }; + var elm$url$Url$Parser$State = F5(function( + visited, + unvisited, + params, + frag, + value + ) { + return { + frag: frag, + params: params, + unvisited: unvisited, + value: value, + visited: visited + }; + }); + var elm$url$Url$Parser$custom = F2(function(tipe, stringToSomething) { + return elm$url$Url$Parser$Parser(function(_n0) { + var visited = _n0.visited; + var unvisited = _n0.unvisited; + var params = _n0.params; + var frag = _n0.frag; + var value = _n0.value; + if (!unvisited.b) { + return _List_Nil; + } else { + var next = unvisited.a; + var rest = unvisited.b; + var _n2 = stringToSomething(next); + if (_n2.$ === "Just") { + var nextValue = _n2.a; + return _List_fromArray([ + A5( + elm$url$Url$Parser$State, + A2(elm$core$List$cons, next, visited), + rest, + params, + frag, + value(nextValue) + ) + ]); + } else { + return _List_Nil; + } + } + }); + }); + var author$project$Article$Slug$urlParser = A2( + elm$url$Url$Parser$custom, + "SLUG", + function(str) { + return elm$core$Maybe$Just(author$project$Article$Slug$Slug(str)); + } + ); + var author$project$Route$Article = function(a) { + return { $: "Article", a: a }; + }; + var author$project$Route$EditArticle = function(a) { + return { $: "EditArticle", a: a }; + }; + var author$project$Route$Login = { $: "Login" }; + var author$project$Route$Logout = { $: "Logout" }; + var author$project$Route$NewArticle = { $: "NewArticle" }; + var author$project$Route$Profile = function(a) { + return { $: "Profile", a: a }; + }; + var author$project$Route$Register = { $: "Register" }; + var author$project$Route$Settings = { $: "Settings" }; + var author$project$Username$urlParser = A2( + elm$url$Url$Parser$custom, + "USERNAME", + function(str) { + return elm$core$Maybe$Just(author$project$Username$Username(str)); + } + ); + var elm$url$Url$Parser$mapState = F2(function(func, _n0) { + var visited = _n0.visited; + var unvisited = _n0.unvisited; + var params = _n0.params; + var frag = _n0.frag; + var value = _n0.value; + return A5( + elm$url$Url$Parser$State, + visited, + unvisited, + params, + frag, + func(value) + ); + }); + var elm$url$Url$Parser$map = F2(function(subValue, _n0) { + var parseArg = _n0.a; + return elm$url$Url$Parser$Parser(function(_n1) { + var visited = _n1.visited; + var unvisited = _n1.unvisited; + var params = _n1.params; + var frag = _n1.frag; + var value = _n1.value; + return A2( + elm$core$List$map, + elm$url$Url$Parser$mapState(value), + parseArg( + A5( + elm$url$Url$Parser$State, + visited, + unvisited, + params, + frag, + subValue + ) + ) + ); + }); + }); + var elm$url$Url$Parser$oneOf = function(parsers) { + return elm$url$Url$Parser$Parser(function(state) { + return A2( + elm$core$List$concatMap, + function(_n0) { + var parser = _n0.a; + return parser(state); + }, + parsers + ); + }); + }; + var elm$url$Url$Parser$s = function(str) { + return elm$url$Url$Parser$Parser(function(_n0) { + var visited = _n0.visited; + var unvisited = _n0.unvisited; + var params = _n0.params; + var frag = _n0.frag; + var value = _n0.value; + if (!unvisited.b) { + return _List_Nil; + } else { + var next = unvisited.a; + var rest = unvisited.b; + return _Utils_eq(next, str) + ? _List_fromArray([ + A5( + elm$url$Url$Parser$State, + A2(elm$core$List$cons, next, visited), + rest, + params, + frag, + value + ) + ]) + : _List_Nil; + } + }); + }; + var elm$url$Url$Parser$slash = F2(function(_n0, _n1) { + var parseBefore = _n0.a; + var parseAfter = _n1.a; + return elm$url$Url$Parser$Parser(function(state) { + return A2(elm$core$List$concatMap, parseAfter, parseBefore(state)); + }); + }); + var elm$url$Url$Parser$top = elm$url$Url$Parser$Parser(function(state) { + return _List_fromArray([state]); + }); + var author$project$Route$parser = elm$url$Url$Parser$oneOf( + _List_fromArray([ + A2( + elm$url$Url$Parser$map, + author$project$Route$Home, + elm$url$Url$Parser$top + ), + A2( + elm$url$Url$Parser$map, + author$project$Route$Login, + elm$url$Url$Parser$s("login") + ), + A2( + elm$url$Url$Parser$map, + author$project$Route$Logout, + elm$url$Url$Parser$s("logout") + ), + A2( + elm$url$Url$Parser$map, + author$project$Route$Settings, + elm$url$Url$Parser$s("settings") + ), + A2( + elm$url$Url$Parser$map, + author$project$Route$Profile, + A2( + elm$url$Url$Parser$slash, + elm$url$Url$Parser$s("profile"), + author$project$Username$urlParser + ) + ), + A2( + elm$url$Url$Parser$map, + author$project$Route$Register, + elm$url$Url$Parser$s("register") + ), + A2( + elm$url$Url$Parser$map, + author$project$Route$Article, + A2( + elm$url$Url$Parser$slash, + elm$url$Url$Parser$s("article"), + author$project$Article$Slug$urlParser + ) + ), + A2( + elm$url$Url$Parser$map, + author$project$Route$NewArticle, + elm$url$Url$Parser$s("editor") + ), + A2( + elm$url$Url$Parser$map, + author$project$Route$EditArticle, + A2( + elm$url$Url$Parser$slash, + elm$url$Url$Parser$s("editor"), + author$project$Article$Slug$urlParser + ) + ) + ]) + ); + var elm$url$Url$Parser$getFirstMatch = function(states) { + getFirstMatch: while (true) { + if (!states.b) { + return elm$core$Maybe$Nothing; + } else { + var state = states.a; + var rest = states.b; + var _n1 = state.unvisited; + if (!_n1.b) { + return elm$core$Maybe$Just(state.value); + } else { + if (_n1.a === "" && !_n1.b.b) { + return elm$core$Maybe$Just(state.value); + } else { + var $temp$states = rest; + states = $temp$states; + continue getFirstMatch; + } + } + } + } + }; + var elm$url$Url$Parser$removeFinalEmpty = function(segments) { + if (!segments.b) { + return _List_Nil; + } else { + if (segments.a === "" && !segments.b.b) { + return _List_Nil; + } else { + var segment = segments.a; + var rest = segments.b; + return A2( + elm$core$List$cons, + segment, + elm$url$Url$Parser$removeFinalEmpty(rest) + ); + } + } + }; + var elm$url$Url$Parser$preparePath = function(path) { + var _n0 = A2(elm$core$String$split, "/", path); + if (_n0.b && _n0.a === "") { + var segments = _n0.b; + return elm$url$Url$Parser$removeFinalEmpty(segments); + } else { + var segments = _n0; + return elm$url$Url$Parser$removeFinalEmpty(segments); + } + }; + var elm$url$Url$percentDecode = _Url_percentDecode; + var elm$url$Url$Parser$addToParametersHelp = F2(function(value, maybeList) { + if (maybeList.$ === "Nothing") { + return elm$core$Maybe$Just(_List_fromArray([value])); + } else { + var list = maybeList.a; + return elm$core$Maybe$Just(A2(elm$core$List$cons, value, list)); + } + }); + var elm$url$Url$Parser$addParam = F2(function(segment, dict) { + var _n0 = A2(elm$core$String$split, "=", segment); + if (_n0.b && _n0.b.b && !_n0.b.b.b) { + var rawKey = _n0.a; + var _n1 = _n0.b; + var rawValue = _n1.a; + var _n2 = elm$url$Url$percentDecode(rawKey); + if (_n2.$ === "Nothing") { + return dict; + } else { + var key = _n2.a; + var _n3 = elm$url$Url$percentDecode(rawValue); + if (_n3.$ === "Nothing") { + return dict; + } else { + var value = _n3.a; + return A3( + elm$core$Dict$update, + key, + elm$url$Url$Parser$addToParametersHelp(value), + dict + ); + } + } + } else { + return dict; + } + }); + var elm$url$Url$Parser$prepareQuery = function(maybeQuery) { + if (maybeQuery.$ === "Nothing") { + return elm$core$Dict$empty; + } else { + var qry = maybeQuery.a; + return A3( + elm$core$List$foldr, + elm$url$Url$Parser$addParam, + elm$core$Dict$empty, + A2(elm$core$String$split, "&", qry) + ); + } + }; + var elm$url$Url$Parser$parse = F2(function(_n0, url) { + var parser = _n0.a; + return elm$url$Url$Parser$getFirstMatch( + parser( + A5( + elm$url$Url$Parser$State, + _List_Nil, + elm$url$Url$Parser$preparePath(url.path), + elm$url$Url$Parser$prepareQuery(url.query), + url.fragment, + elm$core$Basics$identity + ) + ) + ); + }); + var author$project$Route$fromUrl = function(url) { + return A2( + elm$url$Url$Parser$parse, + author$project$Route$parser, + _Utils_update(url, { + fragment: elm$core$Maybe$Nothing, + path: A2(elm$core$Maybe$withDefault, "", url.fragment) + }) + ); + }; + var author$project$Session$Guest = function(a) { + return { $: "Guest", a: a }; + }; + var author$project$Session$LoggedIn = F2(function(a, b) { + return { $: "LoggedIn", a: a, b: b }; + }); + var author$project$Session$fromViewer = F2(function(key, maybeViewer) { + if (maybeViewer.$ === "Just") { + var viewerVal = maybeViewer.a; + return A2(author$project$Session$LoggedIn, key, viewerVal); + } else { + return author$project$Session$Guest(key); + } + }); + var author$project$Main$init = F3(function(maybeViewer, url, navKey) { + return A2( + author$project$Main$changeRouteTo, + author$project$Route$fromUrl(url), + author$project$Main$Redirect( + A2(author$project$Session$fromViewer, navKey, maybeViewer) + ) + ); + }); + var author$project$Main$GotSession = function(a) { + return { $: "GotSession", a: a }; + }; + var author$project$Page$Article$GotSession = function(a) { + return { $: "GotSession", a: a }; + }; + var author$project$Api$decodeFromChange = F2(function(viewerDecoder, val) { + return elm$core$Result$toMaybe( + A2( + elm$json$Json$Decode$decodeValue, + author$project$Api$storageDecoder(viewerDecoder), + val + ) + ); + }); + var author$project$Api$onStoreChange = _Platform_incomingPort( + "onStoreChange", + elm$json$Json$Decode$value + ); + var author$project$Api$viewerChanges = F2(function(toMsg, decoder) { + return author$project$Api$onStoreChange(function(value) { + return toMsg(A2(author$project$Api$decodeFromChange, decoder, value)); + }); + }); + var author$project$Viewer$Viewer = F2(function(a, b) { + return { $: "Viewer", a: a, b: b }; + }); + var author$project$Viewer$decoder = A2( + NoRedInk$elm_json_decode_pipeline$Json$Decode$Pipeline$custom, + A2(elm$json$Json$Decode$field, "image", author$project$Avatar$decoder), + elm$json$Json$Decode$succeed(author$project$Viewer$Viewer) + ); + var author$project$Session$changes = F2(function(toMsg, key) { + return A2( + author$project$Api$viewerChanges, + function(maybeViewer) { + return toMsg(A2(author$project$Session$fromViewer, key, maybeViewer)); + }, + author$project$Viewer$decoder + ); + }); + var author$project$Page$Article$subscriptions = function(model) { + return A2( + author$project$Session$changes, + author$project$Page$Article$GotSession, + author$project$Session$navKey(model.session) + ); + }; + var author$project$Page$Article$Editor$GotSession = function(a) { + return { $: "GotSession", a: a }; + }; + var author$project$Page$Article$Editor$subscriptions = function(model) { + return A2( + author$project$Session$changes, + author$project$Page$Article$Editor$GotSession, + author$project$Session$navKey(model.session) + ); + }; + var author$project$Page$Home$GotSession = function(a) { + return { $: "GotSession", a: a }; + }; + var author$project$Page$Home$subscriptions = function(model) { + return A2( + author$project$Session$changes, + author$project$Page$Home$GotSession, + author$project$Session$navKey(model.session) + ); + }; + var author$project$Page$Login$GotSession = function(a) { + return { $: "GotSession", a: a }; + }; + var author$project$Page$Login$subscriptions = function(model) { + return A2( + author$project$Session$changes, + author$project$Page$Login$GotSession, + author$project$Session$navKey(model.session) + ); + }; + var author$project$Page$Profile$GotSession = function(a) { + return { $: "GotSession", a: a }; + }; + var author$project$Page$Profile$subscriptions = function(model) { + return A2( + author$project$Session$changes, + author$project$Page$Profile$GotSession, + author$project$Session$navKey(model.session) + ); + }; + var author$project$Page$Register$GotSession = function(a) { + return { $: "GotSession", a: a }; + }; + var author$project$Page$Register$subscriptions = function(model) { + return A2( + author$project$Session$changes, + author$project$Page$Register$GotSession, + author$project$Session$navKey(model.session) + ); + }; + var author$project$Page$Settings$GotSession = function(a) { + return { $: "GotSession", a: a }; + }; + var author$project$Page$Settings$subscriptions = function(model) { + return A2( + author$project$Session$changes, + author$project$Page$Settings$GotSession, + author$project$Session$navKey(model.session) + ); + }; + var elm$core$Platform$Sub$batch = _Platform_batch; + var elm$core$Platform$Sub$none = elm$core$Platform$Sub$batch(_List_Nil); + var author$project$Main$subscriptions = function(model) { + switch (model.$) { + case "NotFound": + return elm$core$Platform$Sub$none; + case "Redirect": + return A2( + author$project$Session$changes, + author$project$Main$GotSession, + author$project$Session$navKey(author$project$Main$toSession(model)) + ); + case "Settings": + var settings = model.a; + return A2( + elm$core$Platform$Sub$map, + author$project$Main$GotSettingsMsg, + author$project$Page$Settings$subscriptions(settings) + ); + case "Home": + var home = model.a; + return A2( + elm$core$Platform$Sub$map, + author$project$Main$GotHomeMsg, + author$project$Page$Home$subscriptions(home) + ); + case "Login": + var login = model.a; + return A2( + elm$core$Platform$Sub$map, + author$project$Main$GotLoginMsg, + author$project$Page$Login$subscriptions(login) + ); + case "Register": + var register = model.a; + return A2( + elm$core$Platform$Sub$map, + author$project$Main$GotRegisterMsg, + author$project$Page$Register$subscriptions(register) + ); + case "Profile": + var profile = model.b; + return A2( + elm$core$Platform$Sub$map, + author$project$Main$GotProfileMsg, + author$project$Page$Profile$subscriptions(profile) + ); + case "Article": + var article = model.a; + return A2( + elm$core$Platform$Sub$map, + author$project$Main$GotArticleMsg, + author$project$Page$Article$subscriptions(article) + ); + default: + var editor = model.b; + return A2( + elm$core$Platform$Sub$map, + author$project$Main$GotEditorMsg, + author$project$Page$Article$Editor$subscriptions(editor) + ); + } + }; + var author$project$Api$addServerError = function(list) { + return A2(elm$core$List$cons, "Server error", list); + }; + var author$project$Api$post = F4(function(url, maybeCred, body, decoder) { + return author$project$Api$Endpoint$request({ + body: body, + expect: elm$http$Http$expectJson(decoder), + headers: (function() { + if (maybeCred.$ === "Just") { + var cred = maybeCred.a; + return _List_fromArray([author$project$Api$credHeader(cred)]); + } else { + return _List_Nil; + } + })(), + method: "POST", + timeout: elm$core$Maybe$Nothing, + url: url, + withCredentials: false + }); + }); + var author$project$Api$Endpoint$favorite = function(slug) { + return A2( + author$project$Api$Endpoint$url, + _List_fromArray([ + "articles", + author$project$Article$Slug$toString(slug), + "favorite" + ]), + _List_Nil + ); + }; + var author$project$Article$faveDecoder = function(cred) { + return A2( + elm$json$Json$Decode$field, + "article", + author$project$Article$previewDecoder(elm$core$Maybe$Just(cred)) + ); + }; + var author$project$Article$favorite = F2(function(articleSlug, cred) { + return A4( + author$project$Api$post, + author$project$Api$Endpoint$favorite(articleSlug), + elm$core$Maybe$Just(cred), + elm$http$Http$emptyBody, + author$project$Article$faveDecoder(cred) + ); + }); + var author$project$Article$mapAuthor = F2(function(transform, _n0) { + var info = _n0.a; + var extras = _n0.b; + return A2( + author$project$Article$Article, + _Utils_update(info, { + author: transform(info.author) + }), + extras + ); + }); + var author$project$Api$delete = F4(function(url, cred, body, decoder) { + return author$project$Api$Endpoint$request({ + body: body, + expect: elm$http$Http$expectJson(decoder), + headers: _List_fromArray([author$project$Api$credHeader(cred)]), + method: "DELETE", + timeout: elm$core$Maybe$Nothing, + url: url, + withCredentials: false + }); + }); + var author$project$Article$unfavorite = F2(function(articleSlug, cred) { + return A4( + author$project$Api$delete, + author$project$Api$Endpoint$favorite(articleSlug), + cred, + elm$http$Http$emptyBody, + author$project$Article$faveDecoder(cred) + ); + }); + var author$project$CommentId$toString = function(_n0) { + var id = _n0.a; + return elm$core$String$fromInt(id); + }; + var author$project$Api$Endpoint$comment = F2(function(slug, commentId) { + return A2( + author$project$Api$Endpoint$url, + _List_fromArray([ + "articles", + author$project$Article$Slug$toString(slug), + "comments", + author$project$CommentId$toString(commentId) + ]), + _List_Nil + ); + }); + var author$project$Article$Comment$delete = F3(function( + articleSlug, + commentId, + cred + ) { + return A4( + author$project$Api$delete, + A2(author$project$Api$Endpoint$comment, articleSlug, commentId), + cred, + elm$http$Http$emptyBody, + elm$json$Json$Decode$succeed(_Utils_Tuple0) + ); + }); + var author$project$Article$Comment$encodeCommentBody = function(str) { + return elm$json$Json$Encode$object( + _List_fromArray([ + _Utils_Tuple2( + "comment", + elm$json$Json$Encode$object( + _List_fromArray([ + _Utils_Tuple2("body", elm$json$Json$Encode$string(str)) + ]) + ) + ) + ]) + ); + }; + var elm$http$Http$Internal$StringBody = F2(function(a, b) { + return { $: "StringBody", a: a, b: b }; + }); + var elm$http$Http$jsonBody = function(value) { + return A2( + elm$http$Http$Internal$StringBody, + "application/json", + A2(elm$json$Json$Encode$encode, 0, value) + ); + }; + var author$project$Article$Comment$post = F3(function( + articleSlug, + commentBody, + cred + ) { + var bod = elm$http$Http$jsonBody( + author$project$Article$Comment$encodeCommentBody(commentBody) + ); + return A4( + author$project$Api$post, + author$project$Api$Endpoint$comments(articleSlug), + elm$core$Maybe$Just(cred), + bod, + A2( + elm$json$Json$Decode$field, + "comment", + author$project$Article$Comment$decoder(elm$core$Maybe$Just(cred)) + ) + ); + }); + var author$project$Api$Endpoint$follow = function(uname) { + return A2( + author$project$Api$Endpoint$url, + _List_fromArray([ + "profiles", + author$project$Username$toString(uname), + "follow" + ]), + _List_Nil + ); + }; + var author$project$Author$followDecoder = function(cred) { + return A2( + elm$json$Json$Decode$field, + "profile", + author$project$Author$decoder(elm$core$Maybe$Just(cred)) + ); + }; + var author$project$Author$requestFollow = F2(function(_n0, cred) { + var uname = _n0.a; + return A4( + author$project$Api$post, + author$project$Api$Endpoint$follow(uname), + elm$core$Maybe$Just(cred), + elm$http$Http$emptyBody, + author$project$Author$followDecoder(cred) + ); + }); + var author$project$Author$requestUnfollow = F2(function(_n0, cred) { + var uname = _n0.a; + return A4( + author$project$Api$delete, + author$project$Api$Endpoint$follow(uname), + cred, + elm$http$Http$emptyBody, + author$project$Author$followDecoder(cred) + ); + }); + var author$project$Log$error = elm$core$Platform$Cmd$none; + var author$project$Page$Article$CompletedDeleteArticle = function(a) { + return { $: "CompletedDeleteArticle", a: a }; + }; + var author$project$Page$Article$CompletedDeleteComment = F2(function(a, b) { + return { $: "CompletedDeleteComment", a: a, b: b }; + }); + var author$project$Page$Article$CompletedFollowChange = function(a) { + return { $: "CompletedFollowChange", a: a }; + }; + var author$project$Page$Article$CompletedPostComment = function(a) { + return { $: "CompletedPostComment", a: a }; + }; + var author$project$Page$Article$Editing = function(a) { + return { $: "Editing", a: a }; + }; + var author$project$Page$Article$Failed = { $: "Failed" }; + var author$project$Page$Article$Loaded = function(a) { + return { $: "Loaded", a: a }; + }; + var author$project$Page$Article$LoadingSlowly = { $: "LoadingSlowly" }; + var author$project$Page$Article$Sending = function(a) { + return { $: "Sending", a: a }; + }; + var author$project$Page$Article$delete = F2(function(slug, cred) { + return A4( + author$project$Api$delete, + author$project$Api$Endpoint$article(slug), + cred, + elm$http$Http$emptyBody, + elm$json$Json$Decode$succeed(_Utils_Tuple0) + ); + }); + var author$project$Article$fromPreview = F2(function(newBody, _n0) { + var info = _n0.a; + var _n1 = _n0.b; + return A2( + author$project$Article$Article, + info, + author$project$Article$Full(newBody) + ); + }); + var author$project$Page$Article$CompletedFavoriteChange = function(a) { + return { $: "CompletedFavoriteChange", a: a }; + }; + var author$project$Page$Article$fave = F4(function( + toRequest, + cred, + slug, + body + ) { + return A2( + elm$core$Task$attempt, + author$project$Page$Article$CompletedFavoriteChange, + A2( + elm$core$Task$map, + author$project$Article$fromPreview(body), + elm$http$Http$toTask(A2(toRequest, slug, cred)) + ) + ); + }); + var author$project$Article$Comment$id = function(_n0) { + var comment = _n0.a; + return comment.id; + }; + var elm$core$List$filter = F2(function(isGood, list) { + return A3( + elm$core$List$foldr, + F2(function(x, xs) { + return isGood(x) ? A2(elm$core$List$cons, x, xs) : xs; + }), + _List_Nil, + list + ); + }); + var author$project$Page$Article$withoutComment = F2(function(id, list) { + return A2( + elm$core$List$filter, + function(comment) { + return !_Utils_eq(author$project$Article$Comment$id(comment), id); + }, + list + ); + }); + var author$project$Page$Article$update = F2(function(msg, model) { + switch (msg.$) { + case "ClickedDismissErrors": + return _Utils_Tuple2( + _Utils_update(model, { errors: _List_Nil }), + elm$core$Platform$Cmd$none + ); + case "ClickedFavorite": + var cred = msg.a; + var slug = msg.b; + var body = msg.c; + return _Utils_Tuple2( + model, + A4( + author$project$Page$Article$fave, + author$project$Article$favorite, + cred, + slug, + body + ) + ); + case "ClickedUnfavorite": + var cred = msg.a; + var slug = msg.b; + var body = msg.c; + return _Utils_Tuple2( + model, + A4( + author$project$Page$Article$fave, + author$project$Article$unfavorite, + cred, + slug, + body + ) + ); + case "CompletedLoadArticle": + if (msg.a.$ === "Ok") { + var article = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + article: author$project$Page$Article$Loaded(article) + }), + elm$core$Platform$Cmd$none + ); + } else { + var error = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + article: author$project$Page$Article$Failed + }), + author$project$Log$error + ); + } + case "CompletedLoadComments": + if (msg.a.$ === "Ok") { + var comments = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + comments: author$project$Page$Article$Loaded( + _Utils_Tuple2(author$project$Page$Article$Editing(""), comments) + ) + }), + elm$core$Platform$Cmd$none + ); + } else { + var error = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + article: author$project$Page$Article$Failed + }), + author$project$Log$error + ); + } + case "CompletedFavoriteChange": + if (msg.a.$ === "Ok") { + var newArticle = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + article: author$project$Page$Article$Loaded(newArticle) + }), + elm$core$Platform$Cmd$none + ); + } else { + var error = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + errors: author$project$Api$addServerError(model.errors) + }), + author$project$Log$error + ); + } + case "ClickedUnfollow": + var cred = msg.a; + var followedAuthor = msg.b; + return _Utils_Tuple2( + model, + A2( + elm$http$Http$send, + author$project$Page$Article$CompletedFollowChange, + A2(author$project$Author$requestUnfollow, followedAuthor, cred) + ) + ); + case "ClickedFollow": + var cred = msg.a; + var unfollowedAuthor = msg.b; + return _Utils_Tuple2( + model, + A2( + elm$http$Http$send, + author$project$Page$Article$CompletedFollowChange, + A2(author$project$Author$requestFollow, unfollowedAuthor, cred) + ) + ); + case "CompletedFollowChange": + if (msg.a.$ === "Ok") { + var newAuthor = msg.a.a; + var _n1 = model.article; + if (_n1.$ === "Loaded") { + var article = _n1.a; + return _Utils_Tuple2( + _Utils_update(model, { + article: author$project$Page$Article$Loaded( + A2( + author$project$Article$mapAuthor, + function(_n2) { + return newAuthor; + }, + article + ) + ) + }), + elm$core$Platform$Cmd$none + ); + } else { + return _Utils_Tuple2(model, author$project$Log$error); + } + } else { + var error = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + errors: author$project$Api$addServerError(model.errors) + }), + author$project$Log$error + ); + } + case "EnteredCommentText": + var str = msg.a; + var _n3 = model.comments; + if (_n3.$ === "Loaded" && _n3.a.a.$ === "Editing") { + var _n4 = _n3.a; + var comments = _n4.b; + return _Utils_Tuple2( + _Utils_update(model, { + comments: author$project$Page$Article$Loaded( + _Utils_Tuple2( + author$project$Page$Article$Editing(str), + comments + ) + ) + }), + elm$core$Platform$Cmd$none + ); + } else { + return _Utils_Tuple2(model, author$project$Log$error); + } + case "ClickedPostComment": + var cred = msg.a; + var slug = msg.b; + var _n5 = model.comments; + if (_n5.$ === "Loaded" && _n5.a.a.$ === "Editing") { + if (_n5.a.a.a === "") { + var _n6 = _n5.a; + var comments = _n6.b; + return _Utils_Tuple2(model, elm$core$Platform$Cmd$none); + } else { + var _n7 = _n5.a; + var str = _n7.a.a; + var comments = _n7.b; + return _Utils_Tuple2( + _Utils_update(model, { + comments: author$project$Page$Article$Loaded( + _Utils_Tuple2( + author$project$Page$Article$Sending(str), + comments + ) + ) + }), + A2( + elm$http$Http$send, + author$project$Page$Article$CompletedPostComment, + A3(author$project$Article$Comment$post, slug, str, cred) + ) + ); + } + } else { + return _Utils_Tuple2(model, author$project$Log$error); + } + case "CompletedPostComment": + if (msg.a.$ === "Ok") { + var comment = msg.a.a; + var _n8 = model.comments; + if (_n8.$ === "Loaded") { + var _n9 = _n8.a; + var comments = _n9.b; + return _Utils_Tuple2( + _Utils_update(model, { + comments: author$project$Page$Article$Loaded( + _Utils_Tuple2( + author$project$Page$Article$Editing(""), + A2(elm$core$List$cons, comment, comments) + ) + ) + }), + elm$core$Platform$Cmd$none + ); + } else { + return _Utils_Tuple2(model, author$project$Log$error); + } + } else { + var error = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + errors: author$project$Api$addServerError(model.errors) + }), + author$project$Log$error + ); + } + case "ClickedDeleteComment": + var cred = msg.a; + var slug = msg.b; + var id = msg.c; + return _Utils_Tuple2( + model, + A2( + elm$http$Http$send, + author$project$Page$Article$CompletedDeleteComment(id), + A3(author$project$Article$Comment$delete, slug, id, cred) + ) + ); + case "CompletedDeleteComment": + if (msg.b.$ === "Ok") { + var id = msg.a; + var _n10 = model.comments; + if (_n10.$ === "Loaded") { + var _n11 = _n10.a; + var commentText = _n11.a; + var comments = _n11.b; + return _Utils_Tuple2( + _Utils_update(model, { + comments: author$project$Page$Article$Loaded( + _Utils_Tuple2( + commentText, + A2(author$project$Page$Article$withoutComment, id, comments) + ) + ) + }), + elm$core$Platform$Cmd$none + ); + } else { + return _Utils_Tuple2(model, author$project$Log$error); + } + } else { + var id = msg.a; + var error = msg.b.a; + return _Utils_Tuple2( + _Utils_update(model, { + errors: author$project$Api$addServerError(model.errors) + }), + author$project$Log$error + ); + } + case "ClickedDeleteArticle": + var cred = msg.a; + var slug = msg.b; + return _Utils_Tuple2( + model, + A2( + elm$http$Http$send, + author$project$Page$Article$CompletedDeleteArticle, + A2(author$project$Page$Article$delete, slug, cred) + ) + ); + case "CompletedDeleteArticle": + if (msg.a.$ === "Ok") { + return _Utils_Tuple2( + model, + A2( + author$project$Route$replaceUrl, + author$project$Session$navKey(model.session), + author$project$Route$Home + ) + ); + } else { + var error = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + errors: author$project$Api$addServerError(model.errors) + }), + author$project$Log$error + ); + } + case "GotTimeZone": + var tz = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { timeZone: tz }), + elm$core$Platform$Cmd$none + ); + case "GotSession": + var session = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { session: session }), + A2( + author$project$Route$replaceUrl, + author$project$Session$navKey(session), + author$project$Route$Home + ) + ); + default: + var comments = (function() { + var _n13 = model.comments; + if (_n13.$ === "Loading") { + return author$project$Page$Article$LoadingSlowly; + } else { + var other = _n13; + return other; + } + })(); + var article = (function() { + var _n12 = model.article; + if (_n12.$ === "Loading") { + return author$project$Page$Article$LoadingSlowly; + } else { + var other = _n12; + return other; + } + })(); + return _Utils_Tuple2( + _Utils_update(model, { article: article, comments: comments }), + elm$core$Platform$Cmd$none + ); + } + }); + var author$project$Article$body = function(_n0) { + var extraInfo = _n0.b.a; + return extraInfo; + }; + var author$project$Article$metadata = function(_n0) { + var internals = _n0.a; + return internals.metadata; + }; + var author$project$Article$slug = function(_n0) { + var internals = _n0.a; + return internals.slug; + }; + var author$project$Article$Body$toMarkdownString = function(_n0) { + var markdown = _n0.a; + return markdown; + }; + var author$project$Page$Article$Editor$Editing = F3(function(a, b, c) { + return { $: "Editing", a: a, b: b, c: c }; + }); + var author$project$Page$Article$Editor$LoadingFailed = function(a) { + return { $: "LoadingFailed", a: a }; + }; + var author$project$Page$Article$Editor$LoadingSlowly = function(a) { + return { $: "LoadingSlowly", a: a }; + }; + var author$project$Page$Article$Editor$CompletedCreate = function(a) { + return { $: "CompletedCreate", a: a }; + }; + var author$project$Page$Article$Editor$CompletedEdit = function(a) { + return { $: "CompletedEdit", a: a }; + }; + var author$project$Page$Article$Editor$Creating = function(a) { + return { $: "Creating", a: a }; + }; + var author$project$Page$Article$Editor$Saving = F2(function(a, b) { + return { $: "Saving", a: a, b: b }; + }); + var elm$core$String$trim = _String_trim; + var author$project$Page$Article$Editor$tagsFromString = function(str) { + return A2( + elm$core$List$filter, + A2( + elm$core$Basics$composeL, + elm$core$Basics$not, + elm$core$String$isEmpty + ), + A2( + elm$core$List$map, + elm$core$String$trim, + A2(elm$core$String$split, " ", str) + ) + ); + }; + var author$project$Page$Article$Editor$create = F2(function(_n0, cred) { + var form = _n0.a; + var article = elm$json$Json$Encode$object( + _List_fromArray([ + _Utils_Tuple2("title", elm$json$Json$Encode$string(form.title)), + _Utils_Tuple2( + "description", + elm$json$Json$Encode$string(form.description) + ), + _Utils_Tuple2("body", elm$json$Json$Encode$string(form.body)), + _Utils_Tuple2( + "tagList", + A2( + elm$json$Json$Encode$list, + elm$json$Json$Encode$string, + author$project$Page$Article$Editor$tagsFromString(form.tags) + ) + ) + ]) + ); + var body = elm$http$Http$jsonBody( + elm$json$Json$Encode$object( + _List_fromArray([_Utils_Tuple2("article", article)]) + ) + ); + return A4( + author$project$Api$post, + author$project$Api$Endpoint$articles(_List_Nil), + elm$core$Maybe$Just(cred), + body, + A2( + elm$json$Json$Decode$field, + "article", + author$project$Article$fullDecoder(elm$core$Maybe$Just(cred)) + ) + ); + }); + var author$project$Api$put = F4(function(url, cred, body, decoder) { + return author$project$Api$Endpoint$request({ + body: body, + expect: elm$http$Http$expectJson(decoder), + headers: _List_fromArray([author$project$Api$credHeader(cred)]), + method: "PUT", + timeout: elm$core$Maybe$Nothing, + url: url, + withCredentials: false + }); + }); + var author$project$Page$Article$Editor$edit = F3(function( + articleSlug, + _n0, + cred + ) { + var form = _n0.a; + var article = elm$json$Json$Encode$object( + _List_fromArray([ + _Utils_Tuple2("title", elm$json$Json$Encode$string(form.title)), + _Utils_Tuple2( + "description", + elm$json$Json$Encode$string(form.description) + ), + _Utils_Tuple2("body", elm$json$Json$Encode$string(form.body)) + ]) + ); + var body = elm$http$Http$jsonBody( + elm$json$Json$Encode$object( + _List_fromArray([_Utils_Tuple2("article", article)]) + ) + ); + return A4( + author$project$Api$put, + author$project$Api$Endpoint$article(articleSlug), + cred, + body, + A2( + elm$json$Json$Decode$field, + "article", + author$project$Article$fullDecoder(elm$core$Maybe$Just(cred)) + ) + ); + }); + var author$project$Page$Article$Editor$Body = { $: "Body" }; + var author$project$Page$Article$Editor$Title = { $: "Title" }; + var author$project$Page$Article$Editor$fieldsToValidate = _List_fromArray([ + author$project$Page$Article$Editor$Title, + author$project$Page$Article$Editor$Body + ]); + var author$project$Page$Article$Editor$Trimmed = function(a) { + return { $: "Trimmed", a: a }; + }; + var author$project$Page$Article$Editor$trimFields = function(form) { + return author$project$Page$Article$Editor$Trimmed({ + body: elm$core$String$trim(form.body), + description: elm$core$String$trim(form.description), + tags: elm$core$String$trim(form.tags), + title: elm$core$String$trim(form.title) + }); + }; + var author$project$Page$Article$Editor$InvalidEntry = F2(function(a, b) { + return { $: "InvalidEntry", a: a, b: b }; + }); + var author$project$Page$Article$Editor$validateField = F2(function( + _n0, + field + ) { + var form = _n0.a; + return A2( + elm$core$List$map, + author$project$Page$Article$Editor$InvalidEntry(field), + (function() { + if (field.$ === "Title") { + return elm$core$String$isEmpty(form.title) + ? _List_fromArray(["title can't be blank."]) + : _List_Nil; + } else { + return elm$core$String$isEmpty(form.body) + ? _List_fromArray(["body can't be blank."]) + : _List_Nil; + } + })() + ); + }); + var author$project$Page$Article$Editor$validate = function(form) { + var trimmedForm = author$project$Page$Article$Editor$trimFields(form); + var _n0 = A2( + elm$core$List$concatMap, + author$project$Page$Article$Editor$validateField(trimmedForm), + author$project$Page$Article$Editor$fieldsToValidate + ); + if (!_n0.b) { + return elm$core$Result$Ok(trimmedForm); + } else { + var problems = _n0; + return elm$core$Result$Err(problems); + } + }; + var author$project$Page$Article$Editor$save = F2(function(cred, status) { + switch (status.$) { + case "Editing": + var slug = status.a; + var form = status.c; + var _n1 = author$project$Page$Article$Editor$validate(form); + if (_n1.$ === "Ok") { + var validForm = _n1.a; + return _Utils_Tuple2( + A2(author$project$Page$Article$Editor$Saving, slug, form), + A2( + elm$http$Http$send, + author$project$Page$Article$Editor$CompletedEdit, + A3(author$project$Page$Article$Editor$edit, slug, validForm, cred) + ) + ); + } else { + var problems = _n1.a; + return _Utils_Tuple2( + A3( + author$project$Page$Article$Editor$Editing, + slug, + problems, + form + ), + elm$core$Platform$Cmd$none + ); + } + case "EditingNew": + var form = status.b; + var _n2 = author$project$Page$Article$Editor$validate(form); + if (_n2.$ === "Ok") { + var validForm = _n2.a; + return _Utils_Tuple2( + author$project$Page$Article$Editor$Creating(form), + A2( + elm$http$Http$send, + author$project$Page$Article$Editor$CompletedCreate, + A2(author$project$Page$Article$Editor$create, validForm, cred) + ) + ); + } else { + var problems = _n2.a; + return _Utils_Tuple2( + A2(author$project$Page$Article$Editor$EditingNew, problems, form), + elm$core$Platform$Cmd$none + ); + } + default: + return _Utils_Tuple2(status, elm$core$Platform$Cmd$none); + } + }); + var author$project$Page$Article$Editor$ServerError = function(a) { + return { $: "ServerError", a: a }; + }; + var author$project$Page$Article$Editor$savingError = F2(function( + error, + status + ) { + var problems = _List_fromArray([ + author$project$Page$Article$Editor$ServerError("Error saving article") + ]); + switch (status.$) { + case "Saving": + var slug = status.a; + var form = status.b; + return A3( + author$project$Page$Article$Editor$Editing, + slug, + problems, + form + ); + case "Creating": + var form = status.a; + return A2( + author$project$Page$Article$Editor$EditingNew, + problems, + form + ); + default: + return status; + } + }); + var author$project$Page$Article$Editor$updateForm = F2(function( + transform, + model + ) { + var newModel = (function() { + var _n0 = model.status; + switch (_n0.$) { + case "Loading": + return model; + case "LoadingSlowly": + return model; + case "LoadingFailed": + return model; + case "Saving": + var slug = _n0.a; + var form = _n0.b; + return _Utils_update(model, { + status: A2( + author$project$Page$Article$Editor$Saving, + slug, + transform(form) + ) + }); + case "Editing": + var slug = _n0.a; + var errors = _n0.b; + var form = _n0.c; + return _Utils_update(model, { + status: A3( + author$project$Page$Article$Editor$Editing, + slug, + errors, + transform(form) + ) + }); + case "EditingNew": + var errors = _n0.a; + var form = _n0.b; + return _Utils_update(model, { + status: A2( + author$project$Page$Article$Editor$EditingNew, + errors, + transform(form) + ) + }); + default: + var form = _n0.a; + return _Utils_update(model, { + status: author$project$Page$Article$Editor$Creating(transform(form)) + }); + } + })(); + return _Utils_Tuple2(newModel, elm$core$Platform$Cmd$none); + }); + var elm$core$Tuple$mapFirst = F2(function(func, _n0) { + var x = _n0.a; + var y = _n0.b; + return _Utils_Tuple2(func(x), y); + }); + var author$project$Page$Article$Editor$update = F2(function(msg, model) { + switch (msg.$) { + case "ClickedSave": + var cred = msg.a; + return A2( + elm$core$Tuple$mapFirst, + function(status) { + return _Utils_update(model, { status: status }); + }, + A2(author$project$Page$Article$Editor$save, cred, model.status) + ); + case "EnteredTitle": + var title = msg.a; + return A2( + author$project$Page$Article$Editor$updateForm, + function(form) { + return _Utils_update(form, { title: title }); + }, + model + ); + case "EnteredDescription": + var description = msg.a; + return A2( + author$project$Page$Article$Editor$updateForm, + function(form) { + return _Utils_update(form, { description: description }); + }, + model + ); + case "EnteredTags": + var tags = msg.a; + return A2( + author$project$Page$Article$Editor$updateForm, + function(form) { + return _Utils_update(form, { tags: tags }); + }, + model + ); + case "EnteredBody": + var body = msg.a; + return A2( + author$project$Page$Article$Editor$updateForm, + function(form) { + return _Utils_update(form, { body: body }); + }, + model + ); + case "CompletedCreate": + if (msg.a.$ === "Ok") { + var article = msg.a.a; + return _Utils_Tuple2( + model, + A2( + author$project$Route$replaceUrl, + author$project$Session$navKey(model.session), + author$project$Route$Article(author$project$Article$slug(article)) + ) + ); + } else { + var error = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + status: A2( + author$project$Page$Article$Editor$savingError, + error, + model.status + ) + }), + elm$core$Platform$Cmd$none + ); + } + case "CompletedEdit": + if (msg.a.$ === "Ok") { + var article = msg.a.a; + return _Utils_Tuple2( + model, + A2( + author$project$Route$replaceUrl, + author$project$Session$navKey(model.session), + author$project$Route$Article(author$project$Article$slug(article)) + ) + ); + } else { + var error = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + status: A2( + author$project$Page$Article$Editor$savingError, + error, + model.status + ) + }), + elm$core$Platform$Cmd$none + ); + } + case "CompletedArticleLoad": + if (msg.a.$ === "Err") { + var _n1 = msg.a.a; + var slug = _n1.a; + var error = _n1.b; + return _Utils_Tuple2( + _Utils_update(model, { + status: author$project$Page$Article$Editor$LoadingFailed(slug) + }), + elm$core$Platform$Cmd$none + ); + } else { + var article = msg.a.a; + var _n2 = author$project$Article$metadata(article); + var title = _n2.title; + var description = _n2.description; + var tags = _n2.tags; + var status = A3( + author$project$Page$Article$Editor$Editing, + author$project$Article$slug(article), + _List_Nil, + { + body: author$project$Article$Body$toMarkdownString( + author$project$Article$body(article) + ), + description: description, + tags: A2(elm$core$String$join, " ", tags), + title: title + } + ); + return _Utils_Tuple2( + _Utils_update(model, { status: status }), + elm$core$Platform$Cmd$none + ); + } + case "GotSession": + var session = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { session: session }), + A2( + author$project$Route$replaceUrl, + author$project$Session$navKey(session), + author$project$Route$Home + ) + ); + default: + var status = (function() { + var _n3 = model.status; + if (_n3.$ === "Loading") { + var slug = _n3.a; + return author$project$Page$Article$Editor$LoadingSlowly(slug); + } else { + var other = _n3; + return other; + } + })(); + return _Utils_Tuple2( + _Utils_update(model, { status: status }), + elm$core$Platform$Cmd$none + ); + } + }); + var author$project$Article$Feed$CompletedFavorite = function(a) { + return { $: "CompletedFavorite", a: a }; + }; + var author$project$Article$Feed$fave = F4(function( + toRequest, + cred, + slug, + model + ) { + return _Utils_Tuple2( + author$project$Article$Feed$Model(model), + A2( + elm$core$Task$attempt, + author$project$Article$Feed$CompletedFavorite, + elm$http$Http$toTask(A2(toRequest, slug, cred)) + ) + ); + }); + var author$project$Article$Feed$replaceArticle = F2(function( + newArticle, + oldArticle + ) { + return _Utils_eq( + author$project$Article$slug(newArticle), + author$project$Article$slug(oldArticle) + ) + ? newArticle + : oldArticle; + }); + var author$project$PaginatedList$map = F2(function(transform, _n0) { + var info = _n0.a; + return author$project$PaginatedList$PaginatedList( + _Utils_update(info, { + values: A2(elm$core$List$map, transform, info.values) + }) + ); + }); + var author$project$Article$Feed$update = F3(function(maybeCred, msg, _n0) { + var model = _n0.a; + switch (msg.$) { + case "ClickedDismissErrors": + return _Utils_Tuple2( + author$project$Article$Feed$Model( + _Utils_update(model, { errors: _List_Nil }) + ), + elm$core$Platform$Cmd$none + ); + case "ClickedFavorite": + var cred = msg.a; + var slug = msg.b; + return A4( + author$project$Article$Feed$fave, + author$project$Article$favorite, + cred, + slug, + model + ); + case "ClickedUnfavorite": + var cred = msg.a; + var slug = msg.b; + return A4( + author$project$Article$Feed$fave, + author$project$Article$unfavorite, + cred, + slug, + model + ); + default: + if (msg.a.$ === "Ok") { + var article = msg.a.a; + return _Utils_Tuple2( + author$project$Article$Feed$Model( + _Utils_update(model, { + articles: A2( + author$project$PaginatedList$map, + author$project$Article$Feed$replaceArticle(article), + model.articles + ) + }) + ), + elm$core$Platform$Cmd$none + ); + } else { + var error = msg.a.a; + return _Utils_Tuple2( + author$project$Article$Feed$Model( + _Utils_update(model, { + errors: author$project$Api$addServerError(model.errors) + }) + ), + elm$core$Platform$Cmd$none + ); + } + } + }); + var author$project$Page$Home$Failed = { $: "Failed" }; + var author$project$Page$Home$GotFeedMsg = function(a) { + return { $: "GotFeedMsg", a: a }; + }; + var author$project$Page$Home$Loaded = function(a) { + return { $: "Loaded", a: a }; + }; + var author$project$Page$Home$LoadingSlowly = { $: "LoadingSlowly" }; + var author$project$Page$Home$TagFeed = function(a) { + return { $: "TagFeed", a: a }; + }; + var elm$browser$Browser$Dom$setViewport = _Browser_setViewport; + var author$project$Page$Home$scrollToTop = A2( + elm$core$Task$onError, + function(_n0) { + return elm$core$Task$succeed(_Utils_Tuple0); + }, + A2(elm$browser$Browser$Dom$setViewport, 0, 0) + ); + var author$project$Page$Home$update = F2(function(msg, model) { + switch (msg.$) { + case "ClickedTag": + var tag = msg.a; + var feedTab = author$project$Page$Home$TagFeed(tag); + return _Utils_Tuple2( + _Utils_update(model, { feedTab: feedTab }), + A2( + elm$core$Task$attempt, + author$project$Page$Home$CompletedFeedLoad, + A3(author$project$Page$Home$fetchFeed, model.session, feedTab, 1) + ) + ); + case "ClickedTab": + var tab = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { feedTab: tab }), + A2( + elm$core$Task$attempt, + author$project$Page$Home$CompletedFeedLoad, + A3(author$project$Page$Home$fetchFeed, model.session, tab, 1) + ) + ); + case "ClickedFeedPage": + var page = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { feedPage: page }), + A2( + elm$core$Task$attempt, + author$project$Page$Home$CompletedFeedLoad, + A2( + elm$core$Task$andThen, + function(feed) { + return A2( + elm$core$Task$map, + function(_n1) { + return feed; + }, + author$project$Page$Home$scrollToTop + ); + }, + A3( + author$project$Page$Home$fetchFeed, + model.session, + model.feedTab, + page + ) + ) + ) + ); + case "CompletedFeedLoad": + if (msg.a.$ === "Ok") { + var feed = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + feed: author$project$Page$Home$Loaded(feed) + }), + elm$core$Platform$Cmd$none + ); + } else { + var error = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { feed: author$project$Page$Home$Failed }), + elm$core$Platform$Cmd$none + ); + } + case "CompletedTagsLoad": + if (msg.a.$ === "Ok") { + var tags = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + tags: author$project$Page$Home$Loaded(tags) + }), + elm$core$Platform$Cmd$none + ); + } else { + var error = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { tags: author$project$Page$Home$Failed }), + author$project$Log$error + ); + } + case "GotFeedMsg": + var subMsg = msg.a; + var _n2 = model.feed; + switch (_n2.$) { + case "Loaded": + var feed = _n2.a; + var _n3 = A3( + author$project$Article$Feed$update, + author$project$Session$cred(model.session), + subMsg, + feed + ); + var newFeed = _n3.a; + var subCmd = _n3.b; + return _Utils_Tuple2( + _Utils_update(model, { + feed: author$project$Page$Home$Loaded(newFeed) + }), + A2( + elm$core$Platform$Cmd$map, + author$project$Page$Home$GotFeedMsg, + subCmd + ) + ); + case "Loading": + return _Utils_Tuple2(model, author$project$Log$error); + case "LoadingSlowly": + return _Utils_Tuple2(model, author$project$Log$error); + default: + return _Utils_Tuple2(model, author$project$Log$error); + } + case "GotTimeZone": + var tz = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { timeZone: tz }), + elm$core$Platform$Cmd$none + ); + case "GotSession": + var session = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { session: session }), + elm$core$Platform$Cmd$none + ); + default: + var tags = (function() { + var _n5 = model.tags; + if (_n5.$ === "Loading") { + return author$project$Page$Home$LoadingSlowly; + } else { + var other = _n5; + return other; + } + })(); + var feed = (function() { + var _n4 = model.feed; + if (_n4.$ === "Loading") { + return author$project$Page$Home$LoadingSlowly; + } else { + var other = _n4; + return other; + } + })(); + return _Utils_Tuple2( + _Utils_update(model, { feed: feed, tags: tags }), + elm$core$Platform$Cmd$none + ); + } + }); + var author$project$Api$fromPair = function(_n0) { + var field = _n0.a; + var errors = _n0.b; + return A2( + elm$core$List$map, + function(error) { + return field + (" " + error); + }, + errors + ); + }; + var author$project$Api$errorsDecoder = A2( + elm$json$Json$Decode$map, + elm$core$List$concatMap(author$project$Api$fromPair), + elm$json$Json$Decode$keyValuePairs( + elm$json$Json$Decode$list(elm$json$Json$Decode$string) + ) + ); + var elm$core$Result$withDefault = F2(function(def, result) { + if (result.$ === "Ok") { + var a = result.a; + return a; + } else { + return def; + } + }); + var author$project$Api$decodeErrors = function(error) { + if (error.$ === "BadStatus") { + var response = error.a; + return A2( + elm$core$Result$withDefault, + _List_fromArray(["Server error"]), + A2( + elm$json$Json$Decode$decodeString, + A2( + elm$json$Json$Decode$field, + "errors", + author$project$Api$errorsDecoder + ), + response.body + ) + ); + } else { + var err = error; + return _List_fromArray(["Server error"]); + } + }; + var author$project$Page$Login$CompletedLogin = function(a) { + return { $: "CompletedLogin", a: a }; + }; + var author$project$Page$Login$ServerError = function(a) { + return { $: "ServerError", a: a }; + }; + var author$project$Api$Endpoint$login = A2( + author$project$Api$Endpoint$url, + _List_fromArray(["users", "login"]), + _List_Nil + ); + var author$project$Api$login = F2(function(body, decoder) { + return A4( + author$project$Api$post, + author$project$Api$Endpoint$login, + elm$core$Maybe$Nothing, + body, + A2( + elm$json$Json$Decode$field, + "user", + author$project$Api$decoderFromCred(decoder) + ) + ); + }); + var author$project$Page$Login$login = function(_n0) { + var form = _n0.a; + var user = elm$json$Json$Encode$object( + _List_fromArray([ + _Utils_Tuple2("email", elm$json$Json$Encode$string(form.email)), + _Utils_Tuple2("password", elm$json$Json$Encode$string(form.password)) + ]) + ); + var body = elm$http$Http$jsonBody( + elm$json$Json$Encode$object( + _List_fromArray([_Utils_Tuple2("user", user)]) + ) + ); + return A2(author$project$Api$login, body, author$project$Viewer$decoder); + }; + var author$project$Page$Login$updateForm = F2(function(transform, model) { + return _Utils_Tuple2( + _Utils_update(model, { + form: transform(model.form) + }), + elm$core$Platform$Cmd$none + ); + }); + var author$project$Page$Login$Email = { $: "Email" }; + var author$project$Page$Login$Password = { $: "Password" }; + var author$project$Page$Login$fieldsToValidate = _List_fromArray([ + author$project$Page$Login$Email, + author$project$Page$Login$Password + ]); + var author$project$Page$Login$Trimmed = function(a) { + return { $: "Trimmed", a: a }; + }; + var author$project$Page$Login$trimFields = function(form) { + return author$project$Page$Login$Trimmed({ + email: elm$core$String$trim(form.email), + password: elm$core$String$trim(form.password) + }); + }; + var author$project$Page$Login$InvalidEntry = F2(function(a, b) { + return { $: "InvalidEntry", a: a, b: b }; + }); + var author$project$Page$Login$validateField = F2(function(_n0, field) { + var form = _n0.a; + return A2( + elm$core$List$map, + author$project$Page$Login$InvalidEntry(field), + (function() { + if (field.$ === "Email") { + return elm$core$String$isEmpty(form.email) + ? _List_fromArray(["email can't be blank."]) + : _List_Nil; + } else { + return elm$core$String$isEmpty(form.password) + ? _List_fromArray(["password can't be blank."]) + : _List_Nil; + } + })() + ); + }); + var author$project$Page$Login$validate = function(form) { + var trimmedForm = author$project$Page$Login$trimFields(form); + var _n0 = A2( + elm$core$List$concatMap, + author$project$Page$Login$validateField(trimmedForm), + author$project$Page$Login$fieldsToValidate + ); + if (!_n0.b) { + return elm$core$Result$Ok(trimmedForm); + } else { + var problems = _n0; + return elm$core$Result$Err(problems); + } + }; + var author$project$Avatar$encode = function(_n0) { + var maybeUrl = _n0.a; + if (maybeUrl.$ === "Just") { + var url = maybeUrl.a; + return elm$json$Json$Encode$string(url); + } else { + return elm$json$Json$Encode$null; + } + }; + var author$project$Username$encode = function(_n0) { + var username = _n0.a; + return elm$json$Json$Encode$string(username); + }; + var author$project$Api$storeCredWith = F2(function(_n0, avatar) { + var uname = _n0.a; + var token = _n0.b; + var json = elm$json$Json$Encode$object( + _List_fromArray([ + _Utils_Tuple2( + "user", + elm$json$Json$Encode$object( + _List_fromArray([ + _Utils_Tuple2("username", author$project$Username$encode(uname)), + _Utils_Tuple2("token", elm$json$Json$Encode$string(token)), + _Utils_Tuple2("image", author$project$Avatar$encode(avatar)) + ]) + ) + ) + ]) + ); + return author$project$Api$storeCache(elm$core$Maybe$Just(json)); + }); + var author$project$Viewer$store = function(_n0) { + var avatarVal = _n0.a; + var credVal = _n0.b; + return A2(author$project$Api$storeCredWith, credVal, avatarVal); + }; + var author$project$Page$Login$update = F2(function(msg, model) { + switch (msg.$) { + case "SubmittedForm": + var _n1 = author$project$Page$Login$validate(model.form); + if (_n1.$ === "Ok") { + var validForm = _n1.a; + return _Utils_Tuple2( + _Utils_update(model, { problems: _List_Nil }), + A2( + elm$http$Http$send, + author$project$Page$Login$CompletedLogin, + author$project$Page$Login$login(validForm) + ) + ); + } else { + var problems = _n1.a; + return _Utils_Tuple2( + _Utils_update(model, { problems: problems }), + elm$core$Platform$Cmd$none + ); + } + case "EnteredEmail": + var email = msg.a; + return A2( + author$project$Page$Login$updateForm, + function(form) { + return _Utils_update(form, { email: email }); + }, + model + ); + case "EnteredPassword": + var password = msg.a; + return A2( + author$project$Page$Login$updateForm, + function(form) { + return _Utils_update(form, { password: password }); + }, + model + ); + case "CompletedLogin": + if (msg.a.$ === "Err") { + var error = msg.a.a; + var serverErrors = A2( + elm$core$List$map, + author$project$Page$Login$ServerError, + author$project$Api$decodeErrors(error) + ); + return _Utils_Tuple2( + _Utils_update(model, { + problems: A2(elm$core$List$append, model.problems, serverErrors) + }), + elm$core$Platform$Cmd$none + ); + } else { + var viewer = msg.a.a; + return _Utils_Tuple2(model, author$project$Viewer$store(viewer)); + } + default: + var session = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { session: session }), + A2( + author$project$Route$replaceUrl, + author$project$Session$navKey(session), + author$project$Route$Home + ) + ); + } + }); + var author$project$Page$Profile$CompletedFollowChange = function(a) { + return { $: "CompletedFollowChange", a: a }; + }; + var author$project$Page$Profile$Failed = function(a) { + return { $: "Failed", a: a }; + }; + var author$project$Page$Profile$GotFeedMsg = function(a) { + return { $: "GotFeedMsg", a: a }; + }; + var author$project$Page$Profile$Loaded = function(a) { + return { $: "Loaded", a: a }; + }; + var author$project$Page$Profile$LoadingSlowly = function(a) { + return { $: "LoadingSlowly", a: a }; + }; + var author$project$Author$username = function(author) { + switch (author.$) { + case "IsViewer": + var cred = author.a; + return author$project$Api$username(cred); + case "IsFollowing": + var _n1 = author.a; + var val = _n1.a; + return val; + default: + var _n2 = author.a; + var val = _n2.a; + return val; + } + }; + var author$project$Page$Profile$currentUsername = function(model) { + var _n0 = model.author; + switch (_n0.$) { + case "Loading": + var username = _n0.a; + return username; + case "LoadingSlowly": + var username = _n0.a; + return username; + case "Loaded": + var author = _n0.a; + return author$project$Author$username(author); + default: + var username = _n0.a; + return username; + } + }; + var author$project$Page$Profile$update = F2(function(msg, model) { + switch (msg.$) { + case "ClickedDismissErrors": + return _Utils_Tuple2( + _Utils_update(model, { errors: _List_Nil }), + elm$core$Platform$Cmd$none + ); + case "ClickedUnfollow": + var cred = msg.a; + var followedAuthor = msg.b; + return _Utils_Tuple2( + model, + A2( + elm$http$Http$send, + author$project$Page$Profile$CompletedFollowChange, + A2(author$project$Author$requestUnfollow, followedAuthor, cred) + ) + ); + case "ClickedFollow": + var cred = msg.a; + var unfollowedAuthor = msg.b; + return _Utils_Tuple2( + model, + A2( + elm$http$Http$send, + author$project$Page$Profile$CompletedFollowChange, + A2(author$project$Author$requestFollow, unfollowedAuthor, cred) + ) + ); + case "ClickedTab": + var tab = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { feedTab: tab }), + A4( + author$project$Page$Profile$fetchFeed, + model.session, + tab, + author$project$Page$Profile$currentUsername(model), + 1 + ) + ); + case "ClickedFeedPage": + var page = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { feedPage: page }), + A4( + author$project$Page$Profile$fetchFeed, + model.session, + model.feedTab, + author$project$Page$Profile$currentUsername(model), + page + ) + ); + case "CompletedFollowChange": + if (msg.a.$ === "Ok") { + var newAuthor = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + author: author$project$Page$Profile$Loaded(newAuthor) + }), + elm$core$Platform$Cmd$none + ); + } else { + var error = msg.a.a; + return _Utils_Tuple2(model, author$project$Log$error); + } + case "CompletedAuthorLoad": + if (msg.a.$ === "Ok") { + var author = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + author: author$project$Page$Profile$Loaded(author) + }), + elm$core$Platform$Cmd$none + ); + } else { + var _n1 = msg.a.a; + var username = _n1.a; + var err = _n1.b; + return _Utils_Tuple2( + _Utils_update(model, { + author: author$project$Page$Profile$Failed(username) + }), + author$project$Log$error + ); + } + case "CompletedFeedLoad": + if (msg.a.$ === "Ok") { + var feed = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + feed: author$project$Page$Profile$Loaded(feed) + }), + elm$core$Platform$Cmd$none + ); + } else { + var _n2 = msg.a.a; + var username = _n2.a; + var err = _n2.b; + return _Utils_Tuple2( + _Utils_update(model, { + feed: author$project$Page$Profile$Failed(username) + }), + author$project$Log$error + ); + } + case "GotFeedMsg": + var subMsg = msg.a; + var _n3 = model.feed; + switch (_n3.$) { + case "Loaded": + var feed = _n3.a; + var _n4 = A3( + author$project$Article$Feed$update, + author$project$Session$cred(model.session), + subMsg, + feed + ); + var newFeed = _n4.a; + var subCmd = _n4.b; + return _Utils_Tuple2( + _Utils_update(model, { + feed: author$project$Page$Profile$Loaded(newFeed) + }), + A2( + elm$core$Platform$Cmd$map, + author$project$Page$Profile$GotFeedMsg, + subCmd + ) + ); + case "Loading": + return _Utils_Tuple2(model, author$project$Log$error); + case "LoadingSlowly": + return _Utils_Tuple2(model, author$project$Log$error); + default: + return _Utils_Tuple2(model, author$project$Log$error); + } + case "GotTimeZone": + var tz = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { timeZone: tz }), + elm$core$Platform$Cmd$none + ); + case "GotSession": + var session = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { session: session }), + A2( + author$project$Route$replaceUrl, + author$project$Session$navKey(session), + author$project$Route$Home + ) + ); + default: + var feed = (function() { + var _n5 = model.feed; + if (_n5.$ === "Loading") { + var username = _n5.a; + return author$project$Page$Profile$LoadingSlowly(username); + } else { + var other = _n5; + return other; + } + })(); + return _Utils_Tuple2( + _Utils_update(model, { feed: feed }), + elm$core$Platform$Cmd$none + ); + } + }); + var author$project$Page$Register$CompletedRegister = function(a) { + return { $: "CompletedRegister", a: a }; + }; + var author$project$Page$Register$ServerError = function(a) { + return { $: "ServerError", a: a }; + }; + var author$project$Api$Endpoint$users = A2( + author$project$Api$Endpoint$url, + _List_fromArray(["users"]), + _List_Nil + ); + var author$project$Api$register = F2(function(body, decoder) { + return A4( + author$project$Api$post, + author$project$Api$Endpoint$users, + elm$core$Maybe$Nothing, + body, + A2( + elm$json$Json$Decode$field, + "user", + author$project$Api$decoderFromCred(decoder) + ) + ); + }); + var author$project$Page$Register$register = function(_n0) { + var form = _n0.a; + var user = elm$json$Json$Encode$object( + _List_fromArray([ + _Utils_Tuple2("username", elm$json$Json$Encode$string(form.username)), + _Utils_Tuple2("email", elm$json$Json$Encode$string(form.email)), + _Utils_Tuple2("password", elm$json$Json$Encode$string(form.password)) + ]) + ); + var body = elm$http$Http$jsonBody( + elm$json$Json$Encode$object( + _List_fromArray([_Utils_Tuple2("user", user)]) + ) + ); + return A2(author$project$Api$register, body, author$project$Viewer$decoder); + }; + var author$project$Page$Register$updateForm = F2(function(transform, model) { + return _Utils_Tuple2( + _Utils_update(model, { + form: transform(model.form) + }), + elm$core$Platform$Cmd$none + ); + }); + var author$project$Page$Register$Email = { $: "Email" }; + var author$project$Page$Register$Password = { $: "Password" }; + var author$project$Page$Register$Username = { $: "Username" }; + var author$project$Page$Register$fieldsToValidate = _List_fromArray([ + author$project$Page$Register$Username, + author$project$Page$Register$Email, + author$project$Page$Register$Password + ]); + var author$project$Page$Register$Trimmed = function(a) { + return { $: "Trimmed", a: a }; + }; + var author$project$Page$Register$trimFields = function(form) { + return author$project$Page$Register$Trimmed({ + email: elm$core$String$trim(form.email), + password: elm$core$String$trim(form.password), + username: elm$core$String$trim(form.username) + }); + }; + var author$project$Page$Register$InvalidEntry = F2(function(a, b) { + return { $: "InvalidEntry", a: a, b: b }; + }); + var author$project$Viewer$minPasswordChars = 6; + var author$project$Page$Register$validateField = F2(function(_n0, field) { + var form = _n0.a; + return A2( + elm$core$List$map, + author$project$Page$Register$InvalidEntry(field), + (function() { + switch (field.$) { + case "Username": + return elm$core$String$isEmpty(form.username) + ? _List_fromArray(["username can't be blank."]) + : _List_Nil; + case "Email": + return elm$core$String$isEmpty(form.email) + ? _List_fromArray(["email can't be blank."]) + : _List_Nil; + default: + return elm$core$String$isEmpty(form.password) + ? _List_fromArray(["password can't be blank."]) + : _Utils_cmp( + elm$core$String$length(form.password), + author$project$Viewer$minPasswordChars + ) < 0 + ? _List_fromArray([ + "password must be at least " + + (elm$core$String$fromInt( + author$project$Viewer$minPasswordChars + ) + + " characters long.") + ]) + : _List_Nil; + } + })() + ); + }); + var author$project$Page$Register$validate = function(form) { + var trimmedForm = author$project$Page$Register$trimFields(form); + var _n0 = A2( + elm$core$List$concatMap, + author$project$Page$Register$validateField(trimmedForm), + author$project$Page$Register$fieldsToValidate + ); + if (!_n0.b) { + return elm$core$Result$Ok(trimmedForm); + } else { + var problems = _n0; + return elm$core$Result$Err(problems); + } + }; + var author$project$Page$Register$update = F2(function(msg, model) { + switch (msg.$) { + case "SubmittedForm": + var _n1 = author$project$Page$Register$validate(model.form); + if (_n1.$ === "Ok") { + var validForm = _n1.a; + return _Utils_Tuple2( + _Utils_update(model, { problems: _List_Nil }), + A2( + elm$http$Http$send, + author$project$Page$Register$CompletedRegister, + author$project$Page$Register$register(validForm) + ) + ); + } else { + var problems = _n1.a; + return _Utils_Tuple2( + _Utils_update(model, { problems: problems }), + elm$core$Platform$Cmd$none + ); + } + case "EnteredUsername": + var username = msg.a; + return A2( + author$project$Page$Register$updateForm, + function(form) { + return _Utils_update(form, { username: username }); + }, + model + ); + case "EnteredEmail": + var email = msg.a; + return A2( + author$project$Page$Register$updateForm, + function(form) { + return _Utils_update(form, { email: email }); + }, + model + ); + case "EnteredPassword": + var password = msg.a; + return A2( + author$project$Page$Register$updateForm, + function(form) { + return _Utils_update(form, { password: password }); + }, + model + ); + case "CompletedRegister": + if (msg.a.$ === "Err") { + var error = msg.a.a; + var serverErrors = A2( + elm$core$List$map, + author$project$Page$Register$ServerError, + author$project$Api$decodeErrors(error) + ); + return _Utils_Tuple2( + _Utils_update(model, { + problems: A2(elm$core$List$append, model.problems, serverErrors) + }), + elm$core$Platform$Cmd$none + ); + } else { + var viewer = msg.a.a; + return _Utils_Tuple2(model, author$project$Viewer$store(viewer)); + } + default: + var session = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { session: session }), + A2( + author$project$Route$replaceUrl, + author$project$Session$navKey(session), + author$project$Route$Home + ) + ); + } + }); + var author$project$Page$Settings$CompletedSave = function(a) { + return { $: "CompletedSave", a: a }; + }; + var author$project$Page$Settings$Failed = { $: "Failed" }; + var author$project$Page$Settings$Loaded = function(a) { + return { $: "Loaded", a: a }; + }; + var author$project$Page$Settings$LoadingSlowly = { $: "LoadingSlowly" }; + var author$project$Page$Settings$ServerError = function(a) { + return { $: "ServerError", a: a }; + }; + var author$project$Api$settings = F3(function(cred, body, decoder) { + return A4( + author$project$Api$put, + author$project$Api$Endpoint$user, + cred, + body, + A2( + elm$json$Json$Decode$field, + "user", + author$project$Api$decoderFromCred(decoder) + ) + ); + }); + var author$project$Page$Settings$edit = F2(function(cred, _n0) { + var form = _n0.a; + var encodedAvatar = (function() { + var _n2 = form.avatar; + if (_n2 === "") { + return elm$json$Json$Encode$null; + } else { + var avatar = _n2; + return elm$json$Json$Encode$string(avatar); + } + })(); + var updates = _List_fromArray([ + _Utils_Tuple2("username", elm$json$Json$Encode$string(form.username)), + _Utils_Tuple2("email", elm$json$Json$Encode$string(form.email)), + _Utils_Tuple2("bio", elm$json$Json$Encode$string(form.bio)), + _Utils_Tuple2("image", encodedAvatar) + ]); + var encodedUser = elm$json$Json$Encode$object( + (function() { + var _n1 = form.password; + if (_n1 === "") { + return updates; + } else { + var password = _n1; + return A2( + elm$core$List$cons, + _Utils_Tuple2("password", elm$json$Json$Encode$string(password)), + updates + ); + } + })() + ); + var body = elm$http$Http$jsonBody( + elm$json$Json$Encode$object( + _List_fromArray([_Utils_Tuple2("user", encodedUser)]) + ) + ); + return A3( + author$project$Api$settings, + cred, + body, + author$project$Viewer$decoder + ); + }); + var author$project$Page$Settings$updateForm = F2(function(transform, model) { + var _n0 = model.status; + if (_n0.$ === "Loaded") { + var form = _n0.a; + return _Utils_Tuple2( + _Utils_update(model, { + status: author$project$Page$Settings$Loaded(transform(form)) + }), + elm$core$Platform$Cmd$none + ); + } else { + return _Utils_Tuple2(model, author$project$Log$error); + } + }); + var author$project$Page$Settings$Email = { $: "Email" }; + var author$project$Page$Settings$Password = { $: "Password" }; + var author$project$Page$Settings$Username = { $: "Username" }; + var author$project$Page$Settings$fieldsToValidate = _List_fromArray([ + author$project$Page$Settings$Username, + author$project$Page$Settings$Email, + author$project$Page$Settings$Password + ]); + var author$project$Page$Settings$Trimmed = function(a) { + return { $: "Trimmed", a: a }; + }; + var author$project$Page$Settings$trimFields = function(form) { + return author$project$Page$Settings$Trimmed({ + avatar: elm$core$String$trim(form.avatar), + bio: elm$core$String$trim(form.bio), + email: elm$core$String$trim(form.email), + password: elm$core$String$trim(form.password), + username: elm$core$String$trim(form.username) + }); + }; + var author$project$Page$Settings$InvalidEntry = F2(function(a, b) { + return { $: "InvalidEntry", a: a, b: b }; + }); + var author$project$Page$Settings$validateField = F2(function(_n0, field) { + var form = _n0.a; + return A2( + elm$core$List$map, + author$project$Page$Settings$InvalidEntry(field), + (function() { + switch (field.$) { + case "Username": + return elm$core$String$isEmpty(form.username) + ? _List_fromArray(["username can't be blank."]) + : _List_Nil; + case "Email": + return elm$core$String$isEmpty(form.email) + ? _List_fromArray(["email can't be blank."]) + : _List_Nil; + default: + var passwordLength = elm$core$String$length(form.password); + return passwordLength > 0 && + _Utils_cmp( + passwordLength, + author$project$Viewer$minPasswordChars + ) < 0 + ? _List_fromArray([ + "password must be at least " + + (elm$core$String$fromInt( + author$project$Viewer$minPasswordChars + ) + + " characters long.") + ]) + : _List_Nil; + } + })() + ); + }); + var author$project$Page$Settings$validate = function(form) { + var trimmedForm = author$project$Page$Settings$trimFields(form); + var _n0 = A2( + elm$core$List$concatMap, + author$project$Page$Settings$validateField(trimmedForm), + author$project$Page$Settings$fieldsToValidate + ); + if (!_n0.b) { + return elm$core$Result$Ok(trimmedForm); + } else { + var problems = _n0; + return elm$core$Result$Err(problems); + } + }; + var author$project$Page$Settings$update = F2(function(msg, model) { + switch (msg.$) { + case "CompletedFormLoad": + if (msg.a.$ === "Ok") { + var form = msg.a.a; + return _Utils_Tuple2( + _Utils_update(model, { + status: author$project$Page$Settings$Loaded(form) + }), + elm$core$Platform$Cmd$none + ); + } else { + return _Utils_Tuple2( + _Utils_update(model, { + status: author$project$Page$Settings$Failed + }), + elm$core$Platform$Cmd$none + ); + } + case "SubmittedForm": + var cred = msg.a; + var form = msg.b; + var _n1 = author$project$Page$Settings$validate(form); + if (_n1.$ === "Ok") { + var validForm = _n1.a; + return _Utils_Tuple2( + _Utils_update(model, { + status: author$project$Page$Settings$Loaded(form) + }), + A2( + elm$http$Http$send, + author$project$Page$Settings$CompletedSave, + A2(author$project$Page$Settings$edit, cred, validForm) + ) + ); + } else { + var problems = _n1.a; + return _Utils_Tuple2( + _Utils_update(model, { problems: problems }), + elm$core$Platform$Cmd$none + ); + } + case "EnteredEmail": + var email = msg.a; + return A2( + author$project$Page$Settings$updateForm, + function(form) { + return _Utils_update(form, { email: email }); + }, + model + ); + case "EnteredUsername": + var username = msg.a; + return A2( + author$project$Page$Settings$updateForm, + function(form) { + return _Utils_update(form, { username: username }); + }, + model + ); + case "EnteredPassword": + var password = msg.a; + return A2( + author$project$Page$Settings$updateForm, + function(form) { + return _Utils_update(form, { password: password }); + }, + model + ); + case "EnteredBio": + var bio = msg.a; + return A2( + author$project$Page$Settings$updateForm, + function(form) { + return _Utils_update(form, { bio: bio }); + }, + model + ); + case "EnteredAvatar": + var avatar = msg.a; + return A2( + author$project$Page$Settings$updateForm, + function(form) { + return _Utils_update(form, { avatar: avatar }); + }, + model + ); + case "CompletedSave": + if (msg.a.$ === "Err") { + var error = msg.a.a; + var serverErrors = A2( + elm$core$List$map, + author$project$Page$Settings$ServerError, + author$project$Api$decodeErrors(error) + ); + return _Utils_Tuple2( + _Utils_update(model, { + problems: A2(elm$core$List$append, model.problems, serverErrors) + }), + elm$core$Platform$Cmd$none + ); + } else { + var viewer = msg.a.a; + return _Utils_Tuple2(model, author$project$Viewer$store(viewer)); + } + case "GotSession": + var session = msg.a; + return _Utils_Tuple2( + _Utils_update(model, { session: session }), + A2( + author$project$Route$replaceUrl, + author$project$Session$navKey(session), + author$project$Route$Home + ) + ); + default: + var _n2 = model.status; + if (_n2.$ === "Loading") { + return _Utils_Tuple2( + _Utils_update(model, { + status: author$project$Page$Settings$LoadingSlowly + }), + elm$core$Platform$Cmd$none + ); + } else { + return _Utils_Tuple2(model, elm$core$Platform$Cmd$none); + } + } + }); + var elm$browser$Browser$Navigation$load = _Browser_load; + var elm$browser$Browser$Navigation$pushUrl = _Browser_pushUrl; + var elm$url$Url$addPort = F2(function(maybePort, starter) { + if (maybePort.$ === "Nothing") { + return starter; + } else { + var port_ = maybePort.a; + return starter + (":" + elm$core$String$fromInt(port_)); + } + }); + var elm$url$Url$addPrefixed = F3(function(prefix, maybeSegment, starter) { + if (maybeSegment.$ === "Nothing") { + return starter; + } else { + var segment = maybeSegment.a; + return _Utils_ap(starter, _Utils_ap(prefix, segment)); + } + }); + var elm$url$Url$toString = function(url) { + var http = (function() { + var _n0 = url.protocol; + if (_n0.$ === "Http") { + return "http://"; + } else { + return "https://"; + } + })(); + return A3( + elm$url$Url$addPrefixed, + "#", + url.fragment, + A3( + elm$url$Url$addPrefixed, + "?", + url.query, + _Utils_ap( + A2(elm$url$Url$addPort, url.port_, _Utils_ap(http, url.host)), + url.path + ) + ) + ); + }; + var author$project$Main$update = F2(function(msg, model) { + var _n0 = _Utils_Tuple2(msg, model); + _n0$12: while (true) { + switch (_n0.a.$) { + case "Ignored": + var _n1 = _n0.a; + return _Utils_Tuple2(model, elm$core$Platform$Cmd$none); + case "ClickedLink": + var urlRequest = _n0.a.a; + if (urlRequest.$ === "Internal") { + var url = urlRequest.a; + var _n3 = url.fragment; + if (_n3.$ === "Nothing") { + return _Utils_Tuple2(model, elm$core$Platform$Cmd$none); + } else { + return _Utils_Tuple2( + model, + A2( + elm$browser$Browser$Navigation$pushUrl, + author$project$Session$navKey( + author$project$Main$toSession(model) + ), + elm$url$Url$toString(url) + ) + ); + } + } else { + var href = urlRequest.a; + return _Utils_Tuple2( + model, + elm$browser$Browser$Navigation$load(href) + ); + } + case "ChangedUrl": + var url = _n0.a.a; + return A2( + author$project$Main$changeRouteTo, + author$project$Route$fromUrl(url), + model + ); + case "ChangedRoute": + var route = _n0.a.a; + return A2(author$project$Main$changeRouteTo, route, model); + case "GotSettingsMsg": + if (_n0.b.$ === "Settings") { + var subMsg = _n0.a.a; + var settings = _n0.b.a; + return A4( + author$project$Main$updateWith, + author$project$Main$Settings, + author$project$Main$GotSettingsMsg, + model, + A2(author$project$Page$Settings$update, subMsg, settings) + ); + } else { + break _n0$12; + } + case "GotLoginMsg": + if (_n0.b.$ === "Login") { + var subMsg = _n0.a.a; + var login = _n0.b.a; + return A4( + author$project$Main$updateWith, + author$project$Main$Login, + author$project$Main$GotLoginMsg, + model, + A2(author$project$Page$Login$update, subMsg, login) + ); + } else { + break _n0$12; + } + case "GotRegisterMsg": + if (_n0.b.$ === "Register") { + var subMsg = _n0.a.a; + var register = _n0.b.a; + return A4( + author$project$Main$updateWith, + author$project$Main$Register, + author$project$Main$GotRegisterMsg, + model, + A2(author$project$Page$Register$update, subMsg, register) + ); + } else { + break _n0$12; + } + case "GotHomeMsg": + if (_n0.b.$ === "Home") { + var subMsg = _n0.a.a; + var home = _n0.b.a; + return A4( + author$project$Main$updateWith, + author$project$Main$Home, + author$project$Main$GotHomeMsg, + model, + A2(author$project$Page$Home$update, subMsg, home) + ); + } else { + break _n0$12; + } + case "GotProfileMsg": + if (_n0.b.$ === "Profile") { + var subMsg = _n0.a.a; + var _n4 = _n0.b; + var username = _n4.a; + var profile = _n4.b; + return A4( + author$project$Main$updateWith, + author$project$Main$Profile(username), + author$project$Main$GotProfileMsg, + model, + A2(author$project$Page$Profile$update, subMsg, profile) + ); + } else { + break _n0$12; + } + case "GotArticleMsg": + if (_n0.b.$ === "Article") { + var subMsg = _n0.a.a; + var article = _n0.b.a; + return A4( + author$project$Main$updateWith, + author$project$Main$Article, + author$project$Main$GotArticleMsg, + model, + A2(author$project$Page$Article$update, subMsg, article) + ); + } else { + break _n0$12; + } + case "GotEditorMsg": + if (_n0.b.$ === "Editor") { + var subMsg = _n0.a.a; + var _n5 = _n0.b; + var slug = _n5.a; + var editor = _n5.b; + return A4( + author$project$Main$updateWith, + author$project$Main$Editor(slug), + author$project$Main$GotEditorMsg, + model, + A2(author$project$Page$Article$Editor$update, subMsg, editor) + ); + } else { + break _n0$12; + } + default: + if (_n0.b.$ === "Redirect") { + var session = _n0.a.a; + return _Utils_Tuple2( + author$project$Main$Redirect(session), + A2( + author$project$Route$replaceUrl, + author$project$Session$navKey(session), + author$project$Route$Home + ) + ); + } else { + break _n0$12; + } + } + } + return _Utils_Tuple2(model, elm$core$Platform$Cmd$none); + }); + var author$project$Main$Ignored = { $: "Ignored" }; + var author$project$Page$Home = { $: "Home" }; + var author$project$Page$NewArticle = { $: "NewArticle" }; + var author$project$Page$Other = { $: "Other" }; + var author$project$Page$Profile = function(a) { + return { $: "Profile", a: a }; + }; + var elm$html$Html$footer = _VirtualDom_node("footer"); + var author$project$Page$viewFooter = A2( + elm$html$Html$footer, + _List_Nil, + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("container")]), + _List_fromArray([ + A2( + elm$html$Html$a, + _List_fromArray([ + elm$html$Html$Attributes$class("logo-font"), + elm$html$Html$Attributes$href("/") + ]), + _List_fromArray([elm$html$Html$text("conduit")]) + ), + A2( + elm$html$Html$span, + _List_fromArray([elm$html$Html$Attributes$class("attribution")]), + _List_fromArray([ + elm$html$Html$text("An interactive learning project from "), + A2( + elm$html$Html$a, + _List_fromArray([ + elm$html$Html$Attributes$href("https://thinkster.io") + ]), + _List_fromArray([elm$html$Html$text("Thinkster")]) + ), + elm$html$Html$text(". Code & design licensed under MIT.") + ]) + ) + ]) + ) + ]) + ); + var author$project$Page$isActive = F2(function(page, route) { + var _n0 = _Utils_Tuple2(page, route); + _n0$6: while (true) { + switch (_n0.a.$) { + case "Home": + if (_n0.b.$ === "Home") { + var _n1 = _n0.a; + var _n2 = _n0.b; + return true; + } else { + break _n0$6; + } + case "Login": + if (_n0.b.$ === "Login") { + var _n3 = _n0.a; + var _n4 = _n0.b; + return true; + } else { + break _n0$6; + } + case "Register": + if (_n0.b.$ === "Register") { + var _n5 = _n0.a; + var _n6 = _n0.b; + return true; + } else { + break _n0$6; + } + case "Settings": + if (_n0.b.$ === "Settings") { + var _n7 = _n0.a; + var _n8 = _n0.b; + return true; + } else { + break _n0$6; + } + case "Profile": + if (_n0.b.$ === "Profile") { + var pageUsername = _n0.a.a; + var routeUsername = _n0.b.a; + return _Utils_eq(pageUsername, routeUsername); + } else { + break _n0$6; + } + case "NewArticle": + if (_n0.b.$ === "NewArticle") { + var _n9 = _n0.a; + var _n10 = _n0.b; + return true; + } else { + break _n0$6; + } + default: + break _n0$6; + } + } + return false; + }); + var author$project$Route$href = function(targetRoute) { + return elm$html$Html$Attributes$href( + author$project$Route$routeToString(targetRoute) + ); + }; + var elm$html$Html$Attributes$classList = function(classes) { + return elm$html$Html$Attributes$class( + A2( + elm$core$String$join, + " ", + A2( + elm$core$List$map, + elm$core$Tuple$first, + A2(elm$core$List$filter, elm$core$Tuple$second, classes) + ) + ) + ); + }; + var author$project$Page$navbarLink = F3(function(page, route, linkContent) { + return A2( + elm$html$Html$li, + _List_fromArray([ + elm$html$Html$Attributes$classList( + _List_fromArray([ + _Utils_Tuple2("nav-item", true), + _Utils_Tuple2( + "active", + A2(author$project$Page$isActive, page, route) + ) + ]) + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$a, + _List_fromArray([ + elm$html$Html$Attributes$class("nav-link"), + author$project$Route$href(route) + ]), + linkContent + ) + ]) + ); + }); + var author$project$Asset$Image = function(a) { + return { $: "Image", a: a }; + }; + var author$project$Asset$image = function(filename) { + return author$project$Asset$Image("/assets/images/" + filename); + }; + var author$project$Asset$defaultAvatar = author$project$Asset$image( + "smiley-cyrus.jpg" + ); + var elm$html$Html$Attributes$src = function(url) { + return A2( + elm$html$Html$Attributes$stringProperty, + "src", + _VirtualDom_noJavaScriptOrHtmlUri(url) + ); + }; + var author$project$Asset$src = function(_n0) { + var url = _n0.a; + return elm$html$Html$Attributes$src(url); + }; + var author$project$Avatar$src = function(_n0) { + var maybeUrl = _n0.a; + if (maybeUrl.$ === "Nothing") { + return author$project$Asset$src(author$project$Asset$defaultAvatar); + } else { + if (maybeUrl.a === "") { + return author$project$Asset$src(author$project$Asset$defaultAvatar); + } else { + var url = maybeUrl.a; + return elm$html$Html$Attributes$src(url); + } + } + }; + var author$project$Username$toHtml = function(_n0) { + var username = _n0.a; + return elm$html$Html$text(username); + }; + var author$project$Viewer$avatar = function(_n0) { + var val = _n0.a; + return val; + }; + var author$project$Viewer$username = function(_n0) { + var val = _n0.b; + return author$project$Api$username(val); + }; + var elm$html$Html$i = _VirtualDom_node("i"); + var elm$html$Html$img = _VirtualDom_node("img"); + var author$project$Page$viewMenu = F2(function(page, maybeViewer) { + var linkTo = author$project$Page$navbarLink(page); + if (maybeViewer.$ === "Just") { + var viewer = maybeViewer.a; + var username = author$project$Viewer$username(viewer); + var avatar = author$project$Viewer$avatar(viewer); + return _List_fromArray([ + A2( + linkTo, + author$project$Route$NewArticle, + _List_fromArray([ + A2( + elm$html$Html$i, + _List_fromArray([elm$html$Html$Attributes$class("ion-compose")]), + _List_Nil + ), + elm$html$Html$text("\u00a0New Post") + ]) + ), + A2( + linkTo, + author$project$Route$Settings, + _List_fromArray([ + A2( + elm$html$Html$i, + _List_fromArray([elm$html$Html$Attributes$class("ion-gear-a")]), + _List_Nil + ), + elm$html$Html$text("\u00a0Settings") + ]) + ), + A2( + linkTo, + author$project$Route$Profile(username), + _List_fromArray([ + A2( + elm$html$Html$img, + _List_fromArray([ + elm$html$Html$Attributes$class("user-pic"), + author$project$Avatar$src(avatar) + ]), + _List_Nil + ), + author$project$Username$toHtml(username) + ]) + ), + A2( + linkTo, + author$project$Route$Logout, + _List_fromArray([elm$html$Html$text("Sign out")]) + ) + ]); + } else { + return _List_fromArray([ + A2( + linkTo, + author$project$Route$Login, + _List_fromArray([elm$html$Html$text("Sign in")]) + ), + A2( + linkTo, + author$project$Route$Register, + _List_fromArray([elm$html$Html$text("Sign up")]) + ) + ]); + } + }); + var elm$html$Html$nav = _VirtualDom_node("nav"); + var author$project$Page$viewHeader = F2(function(page, maybeViewer) { + return A2( + elm$html$Html$nav, + _List_fromArray([elm$html$Html$Attributes$class("navbar navbar-light")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("container")]), + _List_fromArray([ + A2( + elm$html$Html$a, + _List_fromArray([ + elm$html$Html$Attributes$class("navbar-brand"), + author$project$Route$href(author$project$Route$Home) + ]), + _List_fromArray([elm$html$Html$text("conduit")]) + ), + A2( + elm$html$Html$ul, + _List_fromArray([ + elm$html$Html$Attributes$class("nav navbar-nav pull-xs-right") + ]), + A2( + elm$core$List$cons, + A3( + author$project$Page$navbarLink, + page, + author$project$Route$Home, + _List_fromArray([elm$html$Html$text("Home")]) + ), + A2(author$project$Page$viewMenu, page, maybeViewer) + ) + ) + ]) + ) + ]) + ); + }); + var author$project$Page$view = F3(function(maybeViewer, page, _n0) { + var title = _n0.title; + var content = _n0.content; + return { + body: A2( + elm$core$List$cons, + A2(author$project$Page$viewHeader, page, maybeViewer), + A2( + elm$core$List$cons, + content, + _List_fromArray([author$project$Page$viewFooter]) + ) + ), + title: title + " - Conduit" + }; + }); + var author$project$Article$author = function(_n0) { + var internals = _n0.a; + return internals.author; + }; + var elm_explorations$markdown$Markdown$defaultOptions = { + defaultHighlighting: elm$core$Maybe$Nothing, + githubFlavored: elm$core$Maybe$Just({ breaks: false, tables: false }), + sanitize: true, + smartypants: false + }; + var elm_explorations$markdown$Markdown$toHtmlWith = _Markdown_toHtml; + var elm_explorations$markdown$Markdown$toHtml = elm_explorations$markdown$Markdown$toHtmlWith( + elm_explorations$markdown$Markdown$defaultOptions + ); + var author$project$Article$Body$toHtml = F2(function(_n0, attributes) { + var markdown = _n0.a; + return A2(elm_explorations$markdown$Markdown$toHtml, attributes, markdown); + }); + var author$project$Author$profile = function(author) { + switch (author.$) { + case "IsViewer": + var val = author.b; + return val; + case "IsFollowing": + var _n1 = author.a; + var val = _n1.b; + return val; + default: + var _n2 = author.a; + var val = _n2.b; + return val; + } + }; + var author$project$Author$view = function(uname) { + return A2( + elm$html$Html$a, + _List_fromArray([ + elm$html$Html$Attributes$class("author"), + author$project$Route$href(author$project$Route$Profile(uname)) + ]), + _List_fromArray([author$project$Username$toHtml(uname)]) + ); + }; + var author$project$Loading$error = function(str) { + return elm$html$Html$text("Error loading " + (str + ".")); + }; + var author$project$Asset$loading = author$project$Asset$image("loading.svg"); + var elm$html$Html$Attributes$alt = elm$html$Html$Attributes$stringProperty( + "alt" + ); + var elm$html$Html$Attributes$height = function(n) { + return A2(_VirtualDom_attribute, "height", elm$core$String$fromInt(n)); + }; + var elm$html$Html$Attributes$width = function(n) { + return A2(_VirtualDom_attribute, "width", elm$core$String$fromInt(n)); + }; + var author$project$Loading$icon = A2( + elm$html$Html$img, + _List_fromArray([ + author$project$Asset$src(author$project$Asset$loading), + elm$html$Html$Attributes$width(64), + elm$html$Html$Attributes$height(64), + elm$html$Html$Attributes$alt("Loading...") + ]), + _List_Nil + ); + var author$project$Page$viewErrors = F2(function(dismissErrors, errors) { + return elm$core$List$isEmpty(errors) + ? elm$html$Html$text("") + : A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("error-messages"), + A2(elm$html$Html$Attributes$style, "position", "fixed"), + A2(elm$html$Html$Attributes$style, "top", "0"), + A2( + elm$html$Html$Attributes$style, + "background", + "rgb(250, 250, 250)" + ), + A2(elm$html$Html$Attributes$style, "padding", "20px"), + A2(elm$html$Html$Attributes$style, "border", "1px solid") + ]), + _Utils_ap( + A2( + elm$core$List$map, + function(error) { + return A2( + elm$html$Html$p, + _List_Nil, + _List_fromArray([elm$html$Html$text(error)]) + ); + }, + errors + ), + _List_fromArray([ + A2( + elm$html$Html$button, + _List_fromArray([elm$html$Html$Events$onClick(dismissErrors)]), + _List_fromArray([elm$html$Html$text("Ok")]) + ) + ]) + ) + ); + }); + var author$project$Page$Article$ClickedDismissErrors = { + $: "ClickedDismissErrors" + }; + var author$project$Page$Article$ClickedPostComment = F2(function(a, b) { + return { $: "ClickedPostComment", a: a, b: b }; + }); + var author$project$Page$Article$EnteredCommentText = function(a) { + return { $: "EnteredCommentText", a: a }; + }; + var elm$html$Html$form = _VirtualDom_node("form"); + var elm$html$Html$textarea = _VirtualDom_node("textarea"); + var elm$virtual_dom$VirtualDom$attribute = F2(function(key, value) { + return A2( + _VirtualDom_attribute, + _VirtualDom_noOnOrFormAction(key), + _VirtualDom_noJavaScriptOrHtmlUri(value) + ); + }); + var elm$html$Html$Attributes$attribute = elm$virtual_dom$VirtualDom$attribute; + var elm$json$Json$Encode$bool = _Json_wrap; + var elm$html$Html$Attributes$boolProperty = F2(function(key, bool) { + return A2(_VirtualDom_property, key, elm$json$Json$Encode$bool(bool)); + }); + var elm$html$Html$Attributes$disabled = elm$html$Html$Attributes$boolProperty( + "disabled" + ); + var elm$html$Html$Attributes$placeholder = elm$html$Html$Attributes$stringProperty( + "placeholder" + ); + var elm$html$Html$Attributes$value = elm$html$Html$Attributes$stringProperty( + "value" + ); + var elm$html$Html$Events$alwaysStop = function(x) { + return _Utils_Tuple2(x, true); + }; + var elm$virtual_dom$VirtualDom$MayStopPropagation = function(a) { + return { $: "MayStopPropagation", a: a }; + }; + var elm$html$Html$Events$stopPropagationOn = F2(function(event, decoder) { + return A2( + elm$virtual_dom$VirtualDom$on, + event, + elm$virtual_dom$VirtualDom$MayStopPropagation(decoder) + ); + }); + var elm$json$Json$Decode$at = F2(function(fields, decoder) { + return A3(elm$core$List$foldr, elm$json$Json$Decode$field, decoder, fields); + }); + var elm$html$Html$Events$targetValue = A2( + elm$json$Json$Decode$at, + _List_fromArray(["target", "value"]), + elm$json$Json$Decode$string + ); + var elm$html$Html$Events$onInput = function(tagger) { + return A2( + elm$html$Html$Events$stopPropagationOn, + "input", + A2( + elm$json$Json$Decode$map, + elm$html$Html$Events$alwaysStop, + A2(elm$json$Json$Decode$map, tagger, elm$html$Html$Events$targetValue) + ) + ); + }; + var elm$html$Html$Events$alwaysPreventDefault = function(msg) { + return _Utils_Tuple2(msg, true); + }; + var elm$virtual_dom$VirtualDom$MayPreventDefault = function(a) { + return { $: "MayPreventDefault", a: a }; + }; + var elm$html$Html$Events$preventDefaultOn = F2(function(event, decoder) { + return A2( + elm$virtual_dom$VirtualDom$on, + event, + elm$virtual_dom$VirtualDom$MayPreventDefault(decoder) + ); + }); + var elm$html$Html$Events$onSubmit = function(msg) { + return A2( + elm$html$Html$Events$preventDefaultOn, + "submit", + A2( + elm$json$Json$Decode$map, + elm$html$Html$Events$alwaysPreventDefault, + elm$json$Json$Decode$succeed(msg) + ) + ); + }; + var author$project$Page$Article$viewAddComment = F3(function( + slug, + commentText, + maybeViewer + ) { + if (maybeViewer.$ === "Just") { + var viewer = maybeViewer.a; + var cred = author$project$Viewer$cred(viewer); + var avatar = author$project$Viewer$avatar(viewer); + var _n1 = (function() { + if (commentText.$ === "Editing") { + var str = commentText.a; + return _Utils_Tuple2(str, _List_Nil); + } else { + var str = commentText.a; + return _Utils_Tuple2( + str, + _List_fromArray([elm$html$Html$Attributes$disabled(true)]) + ); + } + })(); + var commentStr = _n1.a; + var buttonAttrs = _n1.b; + return A2( + elm$html$Html$form, + _List_fromArray([ + elm$html$Html$Attributes$class("card comment-form"), + elm$html$Html$Events$onSubmit( + A2(author$project$Page$Article$ClickedPostComment, cred, slug) + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("card-block")]), + _List_fromArray([ + A2( + elm$html$Html$textarea, + _List_fromArray([ + elm$html$Html$Attributes$class("form-control"), + elm$html$Html$Attributes$placeholder("Write a comment..."), + A2(elm$html$Html$Attributes$attribute, "rows", "3"), + elm$html$Html$Events$onInput( + author$project$Page$Article$EnteredCommentText + ), + elm$html$Html$Attributes$value(commentStr) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("card-footer")]), + _List_fromArray([ + A2( + elm$html$Html$img, + _List_fromArray([ + elm$html$Html$Attributes$class("comment-author-img"), + author$project$Avatar$src(avatar) + ]), + _List_Nil + ), + A2( + elm$html$Html$button, + A2( + elm$core$List$cons, + elm$html$Html$Attributes$class("btn btn-sm btn-primary"), + buttonAttrs + ), + _List_fromArray([elm$html$Html$text("Post Comment")]) + ) + ]) + ) + ]) + ); + } else { + return A2( + elm$html$Html$p, + _List_Nil, + _List_fromArray([ + A2( + elm$html$Html$a, + _List_fromArray([ + author$project$Route$href(author$project$Route$Login) + ]), + _List_fromArray([elm$html$Html$text("Sign in")]) + ), + elm$html$Html$text(" or "), + A2( + elm$html$Html$a, + _List_fromArray([ + author$project$Route$href(author$project$Route$Register) + ]), + _List_fromArray([elm$html$Html$text("sign up")]) + ), + elm$html$Html$text(" to comment.") + ]) + ); + } + }); + var author$project$Author$toggleFollowButton = F4(function( + txt, + extraClasses, + msgWhenClicked, + uname + ) { + var classStr = + "btn btn-sm " + + (A2(elm$core$String$join, " ", extraClasses) + " action-btn"); + var caption = + "\u00a0" + (txt + (" " + author$project$Username$toString(uname))); + return A2( + elm$html$Html$button, + _List_fromArray([ + elm$html$Html$Attributes$class(classStr), + elm$html$Html$Events$onClick(msgWhenClicked) + ]), + _List_fromArray([ + A2( + elm$html$Html$i, + _List_fromArray([elm$html$Html$Attributes$class("ion-plus-round")]), + _List_Nil + ), + elm$html$Html$text(caption) + ]) + ); + }); + var author$project$Author$followButton = F3(function(toMsg, cred, author) { + var uname = author.a; + return A4( + author$project$Author$toggleFollowButton, + "Follow", + _List_fromArray(["btn-outline-secondary"]), + A2(toMsg, cred, author), + uname + ); + }); + var author$project$Author$unfollowButton = F3(function(toMsg, cred, author) { + var uname = author.a; + return A4( + author$project$Author$toggleFollowButton, + "Unfollow", + _List_fromArray(["btn-secondary"]), + A2(toMsg, cred, author), + uname + ); + }); + var author$project$Page$Article$ClickedFollow = F2(function(a, b) { + return { $: "ClickedFollow", a: a, b: b }; + }); + var author$project$Page$Article$ClickedUnfollow = F2(function(a, b) { + return { $: "ClickedUnfollow", a: a, b: b }; + }); + var author$project$Page$Article$ClickedDeleteArticle = F2(function(a, b) { + return { $: "ClickedDeleteArticle", a: a, b: b }; + }); + var author$project$Page$Article$deleteButton = F2(function(cred, article) { + var msg = A2( + author$project$Page$Article$ClickedDeleteArticle, + cred, + author$project$Article$slug(article) + ); + return A2( + elm$html$Html$button, + _List_fromArray([ + elm$html$Html$Attributes$class("btn btn-outline-danger btn-sm"), + elm$html$Html$Events$onClick(msg) + ]), + _List_fromArray([ + A2( + elm$html$Html$i, + _List_fromArray([elm$html$Html$Attributes$class("ion-trash-a")]), + _List_Nil + ), + elm$html$Html$text(" Delete Article") + ]) + ); + }); + var author$project$Page$Article$editButton = function(article) { + return A2( + elm$html$Html$a, + _List_fromArray([ + elm$html$Html$Attributes$class("btn btn-outline-secondary btn-sm"), + author$project$Route$href( + author$project$Route$EditArticle(author$project$Article$slug(article)) + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$i, + _List_fromArray([elm$html$Html$Attributes$class("ion-edit")]), + _List_Nil + ), + elm$html$Html$text(" Edit Article") + ]) + ); + }; + var author$project$Article$onClickStopPropagation = function(msg) { + return A2( + elm$html$Html$Events$stopPropagationOn, + "click", + elm$json$Json$Decode$succeed(_Utils_Tuple2(msg, true)) + ); + }; + var author$project$Article$toggleFavoriteButton = F4(function( + classStr, + msg, + attrs, + kids + ) { + return A2( + elm$html$Html$button, + A2( + elm$core$List$cons, + elm$html$Html$Attributes$class(classStr), + A2( + elm$core$List$cons, + author$project$Article$onClickStopPropagation(msg), + attrs + ) + ), + A2( + elm$core$List$cons, + A2( + elm$html$Html$i, + _List_fromArray([elm$html$Html$Attributes$class("ion-heart")]), + _List_Nil + ), + kids + ) + ); + }); + var author$project$Article$favoriteButton = F4(function( + _n0, + msg, + attrs, + kids + ) { + return A4( + author$project$Article$toggleFavoriteButton, + "btn btn-sm btn-outline-primary", + msg, + attrs, + kids + ); + }); + var author$project$Article$unfavoriteButton = F4(function( + _n0, + msg, + attrs, + kids + ) { + return A4( + author$project$Article$toggleFavoriteButton, + "btn btn-sm btn-primary", + msg, + attrs, + kids + ); + }); + var author$project$Page$Article$ClickedFavorite = F3(function(a, b, c) { + return { $: "ClickedFavorite", a: a, b: b, c: c }; + }); + var author$project$Page$Article$ClickedUnfavorite = F3(function(a, b, c) { + return { $: "ClickedUnfavorite", a: a, b: b, c: c }; + }); + var author$project$Page$Article$favoriteButton = F2(function(cred, article) { + var slug = author$project$Article$slug(article); + var body = author$project$Article$body(article); + var _n0 = author$project$Article$metadata(article); + var favoritesCount = _n0.favoritesCount; + var favorited = _n0.favorited; + var kids = _List_fromArray([ + elm$html$Html$text( + " Favorite Article (" + (elm$core$String$fromInt(favoritesCount) + ")") + ) + ]); + return favorited + ? A4( + author$project$Article$unfavoriteButton, + cred, + A3(author$project$Page$Article$ClickedUnfavorite, cred, slug, body), + _List_Nil, + kids + ) + : A4( + author$project$Article$favoriteButton, + cred, + A3(author$project$Page$Article$ClickedFavorite, cred, slug, body), + _List_Nil, + kids + ); + }); + var author$project$Page$Article$viewButtons = F3(function( + cred, + article, + author + ) { + switch (author.$) { + case "IsFollowing": + var followedAuthor = author.a; + return _List_fromArray([ + A3( + author$project$Author$unfollowButton, + author$project$Page$Article$ClickedUnfollow, + cred, + followedAuthor + ), + elm$html$Html$text(" "), + A2(author$project$Page$Article$favoriteButton, cred, article) + ]); + case "IsNotFollowing": + var unfollowedAuthor = author.a; + return _List_fromArray([ + A3( + author$project$Author$followButton, + author$project$Page$Article$ClickedFollow, + cred, + unfollowedAuthor + ), + elm$html$Html$text(" "), + A2(author$project$Page$Article$favoriteButton, cred, article) + ]); + default: + return _List_fromArray([ + author$project$Page$Article$editButton(article), + elm$html$Html$text(" "), + A2(author$project$Page$Article$deleteButton, cred, article) + ]); + } + }); + var author$project$Article$Comment$author = function(_n0) { + var comment = _n0.a; + return comment.author; + }; + var author$project$Article$Comment$body = function(_n0) { + var comment = _n0.a; + return comment.body; + }; + var author$project$Article$Comment$createdAt = function(_n0) { + var comment = _n0.a; + return comment.createdAt; + }; + var author$project$Page$Article$ClickedDeleteComment = F3(function(a, b, c) { + return { $: "ClickedDeleteComment", a: a, b: b, c: c }; + }); + var author$project$Profile$avatar = function(_n0) { + var info = _n0.a; + return info.avatar; + }; + var elm$time$Time$flooredDiv = F2(function(numerator, denominator) { + return elm$core$Basics$floor(numerator / denominator); + }); + var elm$time$Time$posixToMillis = function(_n0) { + var millis = _n0.a; + return millis; + }; + var elm$time$Time$toAdjustedMinutesHelp = F3(function( + defaultOffset, + posixMinutes, + eras + ) { + toAdjustedMinutesHelp: while (true) { + if (!eras.b) { + return posixMinutes + defaultOffset; + } else { + var era = eras.a; + var olderEras = eras.b; + if (_Utils_cmp(era.start, posixMinutes) < 0) { + return posixMinutes + era.offset; + } else { + var $temp$defaultOffset = defaultOffset, + $temp$posixMinutes = posixMinutes, + $temp$eras = olderEras; + defaultOffset = $temp$defaultOffset; + posixMinutes = $temp$posixMinutes; + eras = $temp$eras; + continue toAdjustedMinutesHelp; + } + } + } + }); + var elm$time$Time$toAdjustedMinutes = F2(function(_n0, time) { + var defaultOffset = _n0.a; + var eras = _n0.b; + return A3( + elm$time$Time$toAdjustedMinutesHelp, + defaultOffset, + A2(elm$time$Time$flooredDiv, elm$time$Time$posixToMillis(time), 60000), + eras + ); + }); + var elm$time$Time$toCivil = function(minutes) { + var rawDay = A2(elm$time$Time$flooredDiv, minutes, 60 * 24) + 719468; + var era = ((rawDay >= 0 ? rawDay : rawDay - 146096) / 146097) | 0; + var dayOfEra = rawDay - era * 146097; + var yearOfEra = + ((dayOfEra - + ((dayOfEra / 1460) | 0) + + ((dayOfEra / 36524) | 0) - + ((dayOfEra / 146096) | 0)) / + 365) | + 0; + var dayOfYear = + dayOfEra - + (365 * yearOfEra + ((yearOfEra / 4) | 0) - ((yearOfEra / 100) | 0)); + var mp = ((5 * dayOfYear + 2) / 153) | 0; + var month = mp + (mp < 10 ? 3 : -9); + var year = yearOfEra + era * 400; + return { + day: dayOfYear - (((153 * mp + 2) / 5) | 0) + 1, + month: month, + year: year + (month <= 2 ? 1 : 0) + }; + }; + var elm$time$Time$toDay = F2(function(zone, time) { + return elm$time$Time$toCivil( + A2(elm$time$Time$toAdjustedMinutes, zone, time) + ).day; + }); + var elm$time$Time$Apr = { $: "Apr" }; + var elm$time$Time$Aug = { $: "Aug" }; + var elm$time$Time$Dec = { $: "Dec" }; + var elm$time$Time$Feb = { $: "Feb" }; + var elm$time$Time$Jan = { $: "Jan" }; + var elm$time$Time$Jul = { $: "Jul" }; + var elm$time$Time$Jun = { $: "Jun" }; + var elm$time$Time$Mar = { $: "Mar" }; + var elm$time$Time$May = { $: "May" }; + var elm$time$Time$Nov = { $: "Nov" }; + var elm$time$Time$Oct = { $: "Oct" }; + var elm$time$Time$Sep = { $: "Sep" }; + var elm$time$Time$toMonth = F2(function(zone, time) { + var _n0 = elm$time$Time$toCivil( + A2(elm$time$Time$toAdjustedMinutes, zone, time) + ).month; + switch (_n0) { + case 1: + return elm$time$Time$Jan; + case 2: + return elm$time$Time$Feb; + case 3: + return elm$time$Time$Mar; + case 4: + return elm$time$Time$Apr; + case 5: + return elm$time$Time$May; + case 6: + return elm$time$Time$Jun; + case 7: + return elm$time$Time$Jul; + case 8: + return elm$time$Time$Aug; + case 9: + return elm$time$Time$Sep; + case 10: + return elm$time$Time$Oct; + case 11: + return elm$time$Time$Nov; + default: + return elm$time$Time$Dec; + } + }); + var elm$time$Time$toYear = F2(function(zone, time) { + return elm$time$Time$toCivil( + A2(elm$time$Time$toAdjustedMinutes, zone, time) + ).year; + }); + var author$project$Timestamp$format = F2(function(zone, time) { + var year = elm$core$String$fromInt(A2(elm$time$Time$toYear, zone, time)); + var month = (function() { + var _n0 = A2(elm$time$Time$toMonth, zone, time); + switch (_n0.$) { + case "Jan": + return "January"; + case "Feb": + return "February"; + case "Mar": + return "March"; + case "Apr": + return "April"; + case "May": + return "May"; + case "Jun": + return "June"; + case "Jul": + return "July"; + case "Aug": + return "August"; + case "Sep": + return "September"; + case "Oct": + return "October"; + case "Nov": + return "November"; + default: + return "December"; + } + })(); + var day = elm$core$String$fromInt(A2(elm$time$Time$toDay, zone, time)); + return month + (" " + (day + (", " + year))); + }); + var author$project$Page$Article$viewComment = F3(function( + timeZone, + slug, + comment + ) { + var timestamp = A2( + author$project$Timestamp$format, + timeZone, + author$project$Article$Comment$createdAt(comment) + ); + var author = author$project$Article$Comment$author(comment); + var authorUsername = author$project$Author$username(author); + var deleteCommentButton = (function() { + if (author.$ === "IsViewer") { + var cred = author.a; + var msg = A3( + author$project$Page$Article$ClickedDeleteComment, + cred, + slug, + author$project$Article$Comment$id(comment) + ); + return A2( + elm$html$Html$span, + _List_fromArray([ + elm$html$Html$Attributes$class("mod-options"), + elm$html$Html$Events$onClick(msg) + ]), + _List_fromArray([ + A2( + elm$html$Html$i, + _List_fromArray([elm$html$Html$Attributes$class("ion-trash-a")]), + _List_Nil + ) + ]) + ); + } else { + return elm$html$Html$text(""); + } + })(); + var profile = author$project$Author$profile(author); + return A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("card")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("card-block")]), + _List_fromArray([ + A2( + elm$html$Html$p, + _List_fromArray([elm$html$Html$Attributes$class("card-text")]), + _List_fromArray([ + elm$html$Html$text(author$project$Article$Comment$body(comment)) + ]) + ) + ]) + ), + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("card-footer")]), + _List_fromArray([ + A2( + elm$html$Html$a, + _List_fromArray([ + elm$html$Html$Attributes$class("comment-author"), + elm$html$Html$Attributes$href("") + ]), + _List_fromArray([ + A2( + elm$html$Html$img, + _List_fromArray([ + elm$html$Html$Attributes$class("comment-author-img"), + author$project$Avatar$src( + author$project$Profile$avatar(profile) + ) + ]), + _List_Nil + ), + elm$html$Html$text(" ") + ]) + ), + elm$html$Html$text(" "), + A2( + elm$html$Html$a, + _List_fromArray([ + elm$html$Html$Attributes$class("comment-author"), + author$project$Route$href( + author$project$Route$Profile(authorUsername) + ) + ]), + _List_fromArray([ + elm$html$Html$text( + author$project$Username$toString(authorUsername) + ) + ]) + ), + A2( + elm$html$Html$span, + _List_fromArray([elm$html$Html$Attributes$class("date-posted")]), + _List_fromArray([elm$html$Html$text(timestamp)]) + ), + deleteCommentButton + ]) + ) + ]) + ); + }); + var author$project$Session$viewer = function(session) { + if (session.$ === "LoggedIn") { + var val = session.b; + return elm$core$Maybe$Just(val); + } else { + return elm$core$Maybe$Nothing; + } + }; + var author$project$Timestamp$view = F2(function(timeZone, timestamp) { + return A2( + elm$html$Html$span, + _List_fromArray([elm$html$Html$Attributes$class("date")]), + _List_fromArray([ + elm$html$Html$text( + A2(author$project$Timestamp$format, timeZone, timestamp) + ) + ]) + ); + }); + var elm$html$Html$h1 = _VirtualDom_node("h1"); + var elm$html$Html$hr = _VirtualDom_node("hr"); + var author$project$Page$Article$view = function(model) { + var _n0 = model.article; + switch (_n0.$) { + case "Loaded": + var article = _n0.a; + var slug = author$project$Article$slug(article); + var author = author$project$Article$author(article); + var avatar = author$project$Profile$avatar( + author$project$Author$profile(author) + ); + var buttons = (function() { + var _n4 = author$project$Session$cred(model.session); + if (_n4.$ === "Just") { + var cred = _n4.a; + return A3( + author$project$Page$Article$viewButtons, + cred, + article, + author + ); + } else { + return _List_Nil; + } + })(); + var profile = author$project$Author$profile(author); + var _n1 = author$project$Article$metadata(article); + var title = _n1.title; + return { + content: A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("article-page")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("banner")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("container") + ]), + _List_fromArray([ + A2( + elm$html$Html$h1, + _List_Nil, + _List_fromArray([elm$html$Html$text(title)]) + ), + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("article-meta") + ]), + A2( + elm$core$List$append, + _List_fromArray([ + A2( + elm$html$Html$a, + _List_fromArray([ + author$project$Route$href( + author$project$Route$Profile( + author$project$Author$username(author) + ) + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$img, + _List_fromArray([ + author$project$Avatar$src( + author$project$Profile$avatar(profile) + ) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("info") + ]), + _List_fromArray([ + author$project$Author$view( + author$project$Author$username(author) + ), + A2( + author$project$Timestamp$view, + model.timeZone, + author$project$Article$metadata(article) + .createdAt + ) + ]) + ) + ]), + buttons + ) + ), + A2( + author$project$Page$viewErrors, + author$project$Page$Article$ClickedDismissErrors, + model.errors + ) + ]) + ) + ]) + ), + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("container page") + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("row article-content") + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("col-md-12") + ]), + _List_fromArray([ + A2( + author$project$Article$Body$toHtml, + author$project$Article$body(article), + _List_Nil + ) + ]) + ) + ]) + ), + A2(elm$html$Html$hr, _List_Nil, _List_Nil), + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("article-actions") + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("article-meta") + ]), + A2( + elm$core$List$append, + _List_fromArray([ + A2( + elm$html$Html$a, + _List_fromArray([ + author$project$Route$href( + author$project$Route$Profile( + author$project$Author$username(author) + ) + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$img, + _List_fromArray([ + author$project$Avatar$src(avatar) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("info") + ]), + _List_fromArray([ + author$project$Author$view( + author$project$Author$username(author) + ), + A2( + author$project$Timestamp$view, + model.timeZone, + author$project$Article$metadata(article) + .createdAt + ) + ]) + ) + ]), + buttons + ) + ) + ]) + ), + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("row")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class( + "col-xs-12 col-md-8 offset-md-2" + ) + ]), + (function() { + var _n2 = model.comments; + switch (_n2.$) { + case "Loading": + return _List_Nil; + case "LoadingSlowly": + return _List_fromArray([ + author$project$Loading$icon + ]); + case "Loaded": + var _n3 = _n2.a; + var commentText = _n3.a; + var comments = _n3.b; + return A2( + elm$core$List$cons, + A3( + author$project$Page$Article$viewAddComment, + slug, + commentText, + author$project$Session$viewer(model.session) + ), + A2( + elm$core$List$map, + A2( + author$project$Page$Article$viewComment, + model.timeZone, + slug + ), + comments + ) + ); + default: + return _List_fromArray([ + author$project$Loading$error("comments") + ]); + } + })() + ) + ]) + ) + ]) + ) + ]) + ), + title: title + }; + case "Loading": + return { + content: elm$html$Html$text(""), + title: "Article" + }; + case "LoadingSlowly": + return { content: author$project$Loading$icon, title: "Article" }; + default: + return { + content: author$project$Loading$error("article"), + title: "Article" + }; + } + }; + var author$project$Page$Article$Editor$getSlug = function(status) { + switch (status.$) { + case "Loading": + var slug = status.a; + return elm$core$Maybe$Just(slug); + case "LoadingSlowly": + var slug = status.a; + return elm$core$Maybe$Just(slug); + case "LoadingFailed": + var slug = status.a; + return elm$core$Maybe$Just(slug); + case "Saving": + var slug = status.a; + return elm$core$Maybe$Just(slug); + case "Editing": + var slug = status.a; + return elm$core$Maybe$Just(slug); + case "EditingNew": + return elm$core$Maybe$Nothing; + default: + return elm$core$Maybe$Nothing; + } + }; + var author$project$Page$Article$Editor$saveArticleButton = F2(function( + caption, + extraAttrs + ) { + return A2( + elm$html$Html$button, + A2( + elm$core$List$cons, + elm$html$Html$Attributes$class("btn btn-lg pull-xs-right btn-primary"), + extraAttrs + ), + _List_fromArray([elm$html$Html$text(caption)]) + ); + }); + var author$project$Page$Article$Editor$editArticleSaveButton = function( + extraAttrs + ) { + return A2( + author$project$Page$Article$Editor$saveArticleButton, + "Update Article", + extraAttrs + ); + }; + var author$project$Page$Article$Editor$newArticleSaveButton = function( + extraAttrs + ) { + return A2( + author$project$Page$Article$Editor$saveArticleButton, + "Publish Article", + extraAttrs + ); + }; + var author$project$Page$Article$Editor$ClickedSave = function(a) { + return { $: "ClickedSave", a: a }; + }; + var author$project$Page$Article$Editor$EnteredBody = function(a) { + return { $: "EnteredBody", a: a }; + }; + var author$project$Page$Article$Editor$EnteredDescription = function(a) { + return { $: "EnteredDescription", a: a }; + }; + var author$project$Page$Article$Editor$EnteredTags = function(a) { + return { $: "EnteredTags", a: a }; + }; + var author$project$Page$Article$Editor$EnteredTitle = function(a) { + return { $: "EnteredTitle", a: a }; + }; + var elm$html$Html$fieldset = _VirtualDom_node("fieldset"); + var elm$html$Html$input = _VirtualDom_node("input"); + var author$project$Page$Article$Editor$viewForm = F3(function( + cred, + fields, + saveButton + ) { + return A2( + elm$html$Html$form, + _List_fromArray([ + elm$html$Html$Events$onSubmit( + author$project$Page$Article$Editor$ClickedSave(cred) + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$fieldset, + _List_Nil, + _List_fromArray([ + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$input, + _List_fromArray([ + elm$html$Html$Attributes$class( + "form-control form-control-lg" + ), + elm$html$Html$Attributes$placeholder("Article Title"), + elm$html$Html$Events$onInput( + author$project$Page$Article$Editor$EnteredTitle + ), + elm$html$Html$Attributes$value(fields.title) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$input, + _List_fromArray([ + elm$html$Html$Attributes$class("form-control"), + elm$html$Html$Attributes$placeholder( + "What's this article about?" + ), + elm$html$Html$Events$onInput( + author$project$Page$Article$Editor$EnteredDescription + ), + elm$html$Html$Attributes$value(fields.description) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$textarea, + _List_fromArray([ + elm$html$Html$Attributes$class("form-control"), + elm$html$Html$Attributes$placeholder( + "Write your article (in markdown)" + ), + A2(elm$html$Html$Attributes$attribute, "rows", "8"), + elm$html$Html$Events$onInput( + author$project$Page$Article$Editor$EnteredBody + ), + elm$html$Html$Attributes$value(fields.body) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$input, + _List_fromArray([ + elm$html$Html$Attributes$class("form-control"), + elm$html$Html$Attributes$placeholder("Enter tags"), + elm$html$Html$Events$onInput( + author$project$Page$Article$Editor$EnteredTags + ), + elm$html$Html$Attributes$value(fields.tags) + ]), + _List_Nil + ) + ]) + ), + saveButton + ]) + ) + ]) + ); + }); + var author$project$Page$Article$Editor$viewProblem = function(problem) { + var errorMessage = (function() { + if (problem.$ === "InvalidEntry") { + var message = problem.b; + return message; + } else { + var message = problem.a; + return message; + } + })(); + return A2( + elm$html$Html$li, + _List_Nil, + _List_fromArray([elm$html$Html$text(errorMessage)]) + ); + }; + var author$project$Page$Article$Editor$viewProblems = function(problems) { + return A2( + elm$html$Html$ul, + _List_fromArray([elm$html$Html$Attributes$class("error-messages")]), + A2( + elm$core$List$map, + author$project$Page$Article$Editor$viewProblem, + problems + ) + ); + }; + var author$project$Page$Article$Editor$viewAuthenticated = F2(function( + cred, + model + ) { + var formHtml = (function() { + var _n0 = model.status; + switch (_n0.$) { + case "Loading": + return _List_Nil; + case "LoadingSlowly": + return _List_fromArray([author$project$Loading$icon]); + case "Saving": + var slug = _n0.a; + var form = _n0.b; + return _List_fromArray([ + A3( + author$project$Page$Article$Editor$viewForm, + cred, + form, + author$project$Page$Article$Editor$editArticleSaveButton( + _List_fromArray([elm$html$Html$Attributes$disabled(true)]) + ) + ) + ]); + case "Creating": + var form = _n0.a; + return _List_fromArray([ + A3( + author$project$Page$Article$Editor$viewForm, + cred, + form, + author$project$Page$Article$Editor$newArticleSaveButton( + _List_fromArray([elm$html$Html$Attributes$disabled(true)]) + ) + ) + ]); + case "Editing": + var slug = _n0.a; + var problems = _n0.b; + var form = _n0.c; + return _List_fromArray([ + author$project$Page$Article$Editor$viewProblems(problems), + A3( + author$project$Page$Article$Editor$viewForm, + cred, + form, + author$project$Page$Article$Editor$editArticleSaveButton( + _List_Nil + ) + ) + ]); + case "EditingNew": + var problems = _n0.a; + var form = _n0.b; + return _List_fromArray([ + author$project$Page$Article$Editor$viewProblems(problems), + A3( + author$project$Page$Article$Editor$viewForm, + cred, + form, + author$project$Page$Article$Editor$newArticleSaveButton(_List_Nil) + ) + ]); + default: + return _List_fromArray([ + elm$html$Html$text("Article failed to load.") + ]); + } + })(); + return A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("editor-page")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("container page")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("row")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class( + "col-md-10 offset-md-1 col-xs-12" + ) + ]), + formHtml + ) + ]) + ) + ]) + ) + ]) + ); + }); + var author$project$Page$Article$Editor$view = function(model) { + return { + content: (function() { + var _n0 = author$project$Session$cred(model.session); + if (_n0.$ === "Just") { + var cred = _n0.a; + return A2( + author$project$Page$Article$Editor$viewAuthenticated, + cred, + model + ); + } else { + return elm$html$Html$text("Sign in to edit this article."); + } + })(), + title: (function() { + var _n1 = author$project$Page$Article$Editor$getSlug(model.status); + if (_n1.$ === "Just") { + var slug = _n1.a; + return "Edit Article - " + author$project$Article$Slug$toString(slug); + } else { + return "New Article"; + } + })() + }; + }; + var author$project$Page$Blank$view = { + content: elm$html$Html$text(""), + title: "" + }; + var author$project$Article$Feed$ClickedDismissErrors = { + $: "ClickedDismissErrors" + }; + var author$project$Article$Feed$ClickedFavorite = F2(function(a, b) { + return { $: "ClickedFavorite", a: a, b: b }; + }); + var author$project$Article$Feed$ClickedUnfavorite = F2(function(a, b) { + return { $: "ClickedUnfavorite", a: a, b: b }; + }); + var author$project$Article$Feed$viewTag = function(tagName) { + return A2( + elm$html$Html$li, + _List_fromArray([ + elm$html$Html$Attributes$class("tag-default tag-pill tag-outline") + ]), + _List_fromArray([elm$html$Html$text(tagName)]) + ); + }; + var author$project$Article$Feed$viewPreview = F3(function( + maybeCred, + timeZone, + article + ) { + var slug = author$project$Article$slug(article); + var faveButton = (function() { + if (maybeCred.$ === "Just") { + var cred = maybeCred.a; + var _n2 = author$project$Article$metadata(article); + var favoritesCount = _n2.favoritesCount; + var favorited = _n2.favorited; + var viewButton = favorited + ? A2( + author$project$Article$unfavoriteButton, + cred, + A2(author$project$Article$Feed$ClickedUnfavorite, cred, slug) + ) + : A2( + author$project$Article$favoriteButton, + cred, + A2(author$project$Article$Feed$ClickedFavorite, cred, slug) + ); + return A2( + viewButton, + _List_fromArray([elm$html$Html$Attributes$class("pull-xs-right")]), + _List_fromArray([ + elm$html$Html$text(" " + elm$core$String$fromInt(favoritesCount)) + ]) + ); + } else { + return elm$html$Html$text(""); + } + })(); + var author = author$project$Article$author(article); + var profile = author$project$Author$profile(author); + var username = author$project$Author$username(author); + var _n0 = author$project$Article$metadata(article); + var title = _n0.title; + var description = _n0.description; + var createdAt = _n0.createdAt; + return A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("article-preview")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("article-meta")]), + _List_fromArray([ + A2( + elm$html$Html$a, + _List_fromArray([ + author$project$Route$href( + author$project$Route$Profile(username) + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$img, + _List_fromArray([ + author$project$Avatar$src( + author$project$Profile$avatar(profile) + ) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("info")]), + _List_fromArray([ + author$project$Author$view(username), + A2(author$project$Timestamp$view, timeZone, createdAt) + ]) + ), + faveButton + ]) + ), + A2( + elm$html$Html$a, + _List_fromArray([ + elm$html$Html$Attributes$class("preview-link"), + author$project$Route$href( + author$project$Route$Article(author$project$Article$slug(article)) + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$h1, + _List_Nil, + _List_fromArray([elm$html$Html$text(title)]) + ), + A2( + elm$html$Html$p, + _List_Nil, + _List_fromArray([elm$html$Html$text(description)]) + ), + A2( + elm$html$Html$span, + _List_Nil, + _List_fromArray([elm$html$Html$text("Read more...")]) + ), + A2( + elm$html$Html$ul, + _List_fromArray([elm$html$Html$Attributes$class("tag-list")]), + A2( + elm$core$List$map, + author$project$Article$Feed$viewTag, + author$project$Article$metadata(article).tags + ) + ) + ]) + ) + ]) + ); + }); + var author$project$PaginatedList$values = function(_n0) { + var info = _n0.a; + return info.values; + }; + var author$project$Article$Feed$viewArticles = F2(function(timeZone, _n0) { + var articles = _n0.a.articles; + var session = _n0.a.session; + var errors = _n0.a.errors; + var maybeCred = author$project$Session$cred(session); + var articlesHtml = A2( + elm$core$List$map, + A2(author$project$Article$Feed$viewPreview, maybeCred, timeZone), + author$project$PaginatedList$values(articles) + ); + return A2( + elm$core$List$cons, + A2( + author$project$Page$viewErrors, + author$project$Article$Feed$ClickedDismissErrors, + errors + ), + articlesHtml + ); + }); + var author$project$Article$Feed$pageLink = F3(function( + toMsg, + targetPage, + isActive + ) { + return A2( + elm$html$Html$li, + _List_fromArray([ + elm$html$Html$Attributes$classList( + _List_fromArray([ + _Utils_Tuple2("page-item", true), + _Utils_Tuple2("active", isActive) + ]) + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$a, + _List_fromArray([ + elm$html$Html$Attributes$class("page-link"), + elm$html$Html$Events$onClick(toMsg(targetPage)), + elm$html$Html$Attributes$href("") + ]), + _List_fromArray([ + elm$html$Html$text(elm$core$String$fromInt(targetPage)) + ]) + ) + ]) + ); + }); + var author$project$PaginatedList$total = function(_n0) { + var info = _n0.a; + return info.total; + }; + var author$project$Article$Feed$viewPagination = F3(function( + toMsg, + page, + _n0 + ) { + var feed = _n0.a; + var viewPageLink = function(currentPage) { + return A3( + author$project$Article$Feed$pageLink, + toMsg, + currentPage, + _Utils_eq(currentPage, page) + ); + }; + var totalPages = author$project$PaginatedList$total(feed.articles); + return totalPages > 1 + ? A2( + elm$html$Html$ul, + _List_fromArray([elm$html$Html$Attributes$class("pagination")]), + A2( + elm$core$List$map, + viewPageLink, + A2(elm$core$List$range, 1, totalPages) + ) + ) + : elm$html$Html$text(""); + }); + var author$project$Page$Home$ClickedFeedPage = function(a) { + return { $: "ClickedFeedPage", a: a }; + }; + var author$project$Page$Home$viewBanner = A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("banner")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("container")]), + _List_fromArray([ + A2( + elm$html$Html$h1, + _List_fromArray([elm$html$Html$Attributes$class("logo-font")]), + _List_fromArray([elm$html$Html$text("conduit")]) + ), + A2( + elm$html$Html$p, + _List_Nil, + _List_fromArray([ + elm$html$Html$text("A place to share your knowledge.") + ]) + ) + ]) + ) + ]) + ); + var author$project$Article$Feed$viewTab = F2(function(attrs, _n0) { + var name = _n0.a; + var msg = _n0.b; + return A2( + elm$html$Html$li, + _List_fromArray([elm$html$Html$Attributes$class("nav-item")]), + _List_fromArray([ + A2( + elm$html$Html$a, + A2( + elm$core$List$cons, + elm$html$Html$Attributes$class("nav-link"), + A2( + elm$core$List$cons, + elm$html$Html$Events$onClick(msg), + A2(elm$core$List$cons, elm$html$Html$Attributes$href(""), attrs) + ) + ), + _List_fromArray([elm$html$Html$text(name)]) + ) + ]) + ); + }); + var author$project$Article$Feed$viewTabs = F3(function( + before, + selected, + after + ) { + return A2( + elm$html$Html$ul, + _List_fromArray([ + elm$html$Html$Attributes$class("nav nav-pills outline-active") + ]), + elm$core$List$concat( + _List_fromArray([ + A2( + elm$core$List$map, + author$project$Article$Feed$viewTab(_List_Nil), + before + ), + _List_fromArray([ + A2( + author$project$Article$Feed$viewTab, + _List_fromArray([elm$html$Html$Attributes$class("active")]), + selected + ) + ]), + A2( + elm$core$List$map, + author$project$Article$Feed$viewTab(_List_Nil), + after + ) + ]) + ) + ); + }); + var author$project$Page$Home$ClickedTab = function(a) { + return { $: "ClickedTab", a: a }; + }; + var author$project$Page$Home$globalFeed = _Utils_Tuple2( + "Global Feed", + author$project$Page$Home$ClickedTab(author$project$Page$Home$GlobalFeed) + ); + var author$project$Page$Home$tagFeed = function(tag) { + return _Utils_Tuple2( + "#" + author$project$Article$Tag$toString(tag), + author$project$Page$Home$ClickedTab(author$project$Page$Home$TagFeed(tag)) + ); + }; + var author$project$Page$Home$yourFeed = function(cred) { + return _Utils_Tuple2( + "Your Feed", + author$project$Page$Home$ClickedTab( + author$project$Page$Home$YourFeed(cred) + ) + ); + }; + var author$project$Page$Home$viewTabs = F2(function(maybeCred, tab) { + switch (tab.$) { + case "YourFeed": + var cred = tab.a; + return A3( + author$project$Article$Feed$viewTabs, + _List_Nil, + author$project$Page$Home$yourFeed(cred), + _List_fromArray([author$project$Page$Home$globalFeed]) + ); + case "GlobalFeed": + var otherTabs = (function() { + if (maybeCred.$ === "Just") { + var cred = maybeCred.a; + return _List_fromArray([author$project$Page$Home$yourFeed(cred)]); + } else { + return _List_Nil; + } + })(); + return A3( + author$project$Article$Feed$viewTabs, + otherTabs, + author$project$Page$Home$globalFeed, + _List_Nil + ); + default: + var tag = tab.a; + var otherTabs = (function() { + if (maybeCred.$ === "Just") { + var cred = maybeCred.a; + return _List_fromArray([ + author$project$Page$Home$yourFeed(cred), + author$project$Page$Home$globalFeed + ]); + } else { + return _List_fromArray([author$project$Page$Home$globalFeed]); + } + })(); + return A3( + author$project$Article$Feed$viewTabs, + otherTabs, + author$project$Page$Home$tagFeed(tag), + _List_Nil + ); + } + }); + var author$project$Page$Home$ClickedTag = function(a) { + return { $: "ClickedTag", a: a }; + }; + var author$project$Page$Home$viewTag = function(tagName) { + return A2( + elm$html$Html$a, + _List_fromArray([ + elm$html$Html$Attributes$class("tag-pill tag-default"), + elm$html$Html$Events$onClick( + author$project$Page$Home$ClickedTag(tagName) + ), + elm$html$Html$Attributes$href("") + ]), + _List_fromArray([ + elm$html$Html$text(author$project$Article$Tag$toString(tagName)) + ]) + ); + }; + var author$project$Page$Home$viewTags = function(tags) { + return A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("tag-list")]), + A2(elm$core$List$map, author$project$Page$Home$viewTag, tags) + ); + }; + var author$project$Page$Home$view = function(model) { + return { + content: A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("home-page")]), + _List_fromArray([ + author$project$Page$Home$viewBanner, + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("container page")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("row")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("col-md-9") + ]), + (function() { + var _n0 = model.feed; + switch (_n0.$) { + case "Loaded": + var feed = _n0.a; + return _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("feed-toggle") + ]), + elm$core$List$concat( + _List_fromArray([ + _List_fromArray([ + A2( + author$project$Page$Home$viewTabs, + author$project$Session$cred( + model.session + ), + model.feedTab + ) + ]), + A2( + elm$core$List$map, + elm$html$Html$map( + author$project$Page$Home$GotFeedMsg + ), + A2( + author$project$Article$Feed$viewArticles, + model.timeZone, + feed + ) + ), + _List_fromArray([ + A3( + author$project$Article$Feed$viewPagination, + author$project$Page$Home$ClickedFeedPage, + model.feedPage, + feed + ) + ]) + ]) + ) + ) + ]); + case "Loading": + return _List_Nil; + case "LoadingSlowly": + return _List_fromArray([author$project$Loading$icon]); + default: + return _List_fromArray([ + author$project$Loading$error("feed") + ]); + } + })() + ), + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("col-md-3") + ]), + (function() { + var _n1 = model.tags; + switch (_n1.$) { + case "Loaded": + var tags = _n1.a; + return _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("sidebar") + ]), + _List_fromArray([ + A2( + elm$html$Html$p, + _List_Nil, + _List_fromArray([ + elm$html$Html$text("Popular Tags") + ]) + ), + author$project$Page$Home$viewTags(tags) + ]) + ) + ]); + case "Loading": + return _List_Nil; + case "LoadingSlowly": + return _List_fromArray([author$project$Loading$icon]); + default: + return _List_fromArray([ + author$project$Loading$error("tags") + ]); + } + })() + ) + ]) + ) + ]) + ) + ]) + ), + title: "Conduit" + }; + }; + var author$project$Page$Login$EnteredEmail = function(a) { + return { $: "EnteredEmail", a: a }; + }; + var author$project$Page$Login$EnteredPassword = function(a) { + return { $: "EnteredPassword", a: a }; + }; + var author$project$Page$Login$SubmittedForm = { $: "SubmittedForm" }; + var elm$html$Html$Attributes$type_ = elm$html$Html$Attributes$stringProperty( + "type" + ); + var author$project$Page$Login$viewForm = function(form) { + return A2( + elm$html$Html$form, + _List_fromArray([ + elm$html$Html$Events$onSubmit(author$project$Page$Login$SubmittedForm) + ]), + _List_fromArray([ + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$input, + _List_fromArray([ + elm$html$Html$Attributes$class("form-control form-control-lg"), + elm$html$Html$Attributes$placeholder("Email"), + elm$html$Html$Events$onInput( + author$project$Page$Login$EnteredEmail + ), + elm$html$Html$Attributes$value(form.email) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$input, + _List_fromArray([ + elm$html$Html$Attributes$class("form-control form-control-lg"), + elm$html$Html$Attributes$type_("password"), + elm$html$Html$Attributes$placeholder("Password"), + elm$html$Html$Events$onInput( + author$project$Page$Login$EnteredPassword + ), + elm$html$Html$Attributes$value(form.password) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$button, + _List_fromArray([ + elm$html$Html$Attributes$class( + "btn btn-lg btn-primary pull-xs-right" + ) + ]), + _List_fromArray([elm$html$Html$text("Sign in")]) + ) + ]) + ); + }; + var author$project$Page$Login$viewProblem = function(problem) { + var errorMessage = (function() { + if (problem.$ === "InvalidEntry") { + var str = problem.b; + return str; + } else { + var str = problem.a; + return str; + } + })(); + return A2( + elm$html$Html$li, + _List_Nil, + _List_fromArray([elm$html$Html$text(errorMessage)]) + ); + }; + var author$project$Page$Login$view = function(model) { + return { + content: A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("cred-page")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("container page")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("row")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class( + "col-md-6 offset-md-3 col-xs-12" + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$h1, + _List_fromArray([ + elm$html$Html$Attributes$class("text-xs-center") + ]), + _List_fromArray([elm$html$Html$text("Sign in")]) + ), + A2( + elm$html$Html$p, + _List_fromArray([ + elm$html$Html$Attributes$class("text-xs-center") + ]), + _List_fromArray([ + A2( + elm$html$Html$a, + _List_fromArray([ + author$project$Route$href( + author$project$Route$Register + ) + ]), + _List_fromArray([ + elm$html$Html$text("Need an account?") + ]) + ) + ]) + ), + A2( + elm$html$Html$ul, + _List_fromArray([ + elm$html$Html$Attributes$class("error-messages") + ]), + A2( + elm$core$List$map, + author$project$Page$Login$viewProblem, + model.problems + ) + ), + author$project$Page$Login$viewForm(model.form) + ]) + ) + ]) + ) + ]) + ) + ]) + ), + title: "Login" + }; + }; + var author$project$Asset$error = author$project$Asset$image("error.jpg"); + var elm$html$Html$main_ = _VirtualDom_node("main"); + var elm$html$Html$Attributes$tabindex = function(n) { + return A2(_VirtualDom_attribute, "tabIndex", elm$core$String$fromInt(n)); + }; + var author$project$Page$NotFound$view = { + content: A2( + elm$html$Html$main_, + _List_fromArray([ + elm$html$Html$Attributes$id("content"), + elm$html$Html$Attributes$class("container"), + elm$html$Html$Attributes$tabindex(-1) + ]), + _List_fromArray([ + A2( + elm$html$Html$h1, + _List_Nil, + _List_fromArray([elm$html$Html$text("Not Found")]) + ), + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("row")]), + _List_fromArray([ + A2( + elm$html$Html$img, + _List_fromArray([ + author$project$Asset$src(author$project$Asset$error) + ]), + _List_Nil + ) + ]) + ) + ]) + ), + title: "Page Not Found" + }; + var author$project$Page$Profile$ClickedDismissErrors = { + $: "ClickedDismissErrors" + }; + var author$project$Page$Profile$ClickedFeedPage = function(a) { + return { $: "ClickedFeedPage", a: a }; + }; + var author$project$Page$Profile$ClickedFollow = F2(function(a, b) { + return { $: "ClickedFollow", a: a, b: b }; + }); + var author$project$Page$Profile$ClickedUnfollow = F2(function(a, b) { + return { $: "ClickedUnfollow", a: a, b: b }; + }); + var author$project$Page$Profile$myProfileTitle = "My Profile"; + var author$project$Page$Profile$defaultTitle = "Profile"; + var author$project$Page$Profile$titleForMe = F2(function( + maybeCred, + username + ) { + if (maybeCred.$ === "Just") { + var cred = maybeCred.a; + return _Utils_eq(username, author$project$Api$username(cred)) + ? author$project$Page$Profile$myProfileTitle + : author$project$Page$Profile$defaultTitle; + } else { + return author$project$Page$Profile$defaultTitle; + } + }); + var author$project$Page$Profile$titleForOther = function(otherUsername) { + return "Profile — " + author$project$Username$toString(otherUsername); + }; + var author$project$Page$Profile$ClickedTab = function(a) { + return { $: "ClickedTab", a: a }; + }; + var author$project$Page$Profile$FavoritedArticles = { + $: "FavoritedArticles" + }; + var author$project$Page$Profile$favoritedArticles = _Utils_Tuple2( + "Favorited Articles", + author$project$Page$Profile$ClickedTab( + author$project$Page$Profile$FavoritedArticles + ) + ); + var author$project$Page$Profile$myArticles = _Utils_Tuple2( + "My Articles", + author$project$Page$Profile$ClickedTab( + author$project$Page$Profile$MyArticles + ) + ); + var author$project$Page$Profile$viewTabs = function(tab) { + if (tab.$ === "MyArticles") { + return A3( + author$project$Article$Feed$viewTabs, + _List_Nil, + author$project$Page$Profile$myArticles, + _List_fromArray([author$project$Page$Profile$favoritedArticles]) + ); + } else { + return A3( + author$project$Article$Feed$viewTabs, + _List_fromArray([author$project$Page$Profile$myArticles]), + author$project$Page$Profile$favoritedArticles, + _List_Nil + ); + } + }; + var author$project$Profile$bio = function(_n0) { + var info = _n0.a; + return info.bio; + }; + var elm$html$Html$h4 = _VirtualDom_node("h4"); + var author$project$Page$Profile$view = function(model) { + var title = (function() { + var _n4 = model.author; + switch (_n4.$) { + case "Loaded": + switch (_n4.a.$) { + case "IsViewer": + var _n5 = _n4.a; + return author$project$Page$Profile$myProfileTitle; + case "IsFollowing": + var author = _n4.a; + var followedAuthor = author.a; + return author$project$Page$Profile$titleForOther( + author$project$Author$username(author) + ); + default: + var author = _n4.a; + var unfollowedAuthor = author.a; + return author$project$Page$Profile$titleForOther( + author$project$Author$username(author) + ); + } + case "Loading": + var username = _n4.a; + return A2( + author$project$Page$Profile$titleForMe, + author$project$Session$cred(model.session), + username + ); + case "LoadingSlowly": + var username = _n4.a; + return A2( + author$project$Page$Profile$titleForMe, + author$project$Session$cred(model.session), + username + ); + default: + var username = _n4.a; + return A2( + author$project$Page$Profile$titleForMe, + author$project$Session$cred(model.session), + username + ); + } + })(); + return { + content: (function() { + var _n0 = model.author; + switch (_n0.$) { + case "Loaded": + var author = _n0.a; + var username = author$project$Author$username(author); + var profile = author$project$Author$profile(author); + var followButton = (function() { + var _n2 = author$project$Session$cred(model.session); + if (_n2.$ === "Just") { + var cred = _n2.a; + switch (author.$) { + case "IsViewer": + return elm$html$Html$text(""); + case "IsFollowing": + var followedAuthor = author.a; + return A3( + author$project$Author$unfollowButton, + author$project$Page$Profile$ClickedUnfollow, + cred, + followedAuthor + ); + default: + var unfollowedAuthor = author.a; + return A3( + author$project$Author$followButton, + author$project$Page$Profile$ClickedFollow, + cred, + unfollowedAuthor + ); + } + } else { + return elm$html$Html$text(""); + } + })(); + return A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("profile-page")]), + _List_fromArray([ + A2( + author$project$Page$viewErrors, + author$project$Page$Profile$ClickedDismissErrors, + model.errors + ), + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("user-info") + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("container") + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("row") + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class( + "col-xs-12 col-md-10 offset-md-1" + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$img, + _List_fromArray([ + elm$html$Html$Attributes$class("user-img"), + author$project$Avatar$src( + author$project$Profile$avatar(profile) + ) + ]), + _List_Nil + ), + A2( + elm$html$Html$h4, + _List_Nil, + _List_fromArray([ + author$project$Username$toHtml(username) + ]) + ), + A2( + elm$html$Html$p, + _List_Nil, + _List_fromArray([ + elm$html$Html$text( + A2( + elm$core$Maybe$withDefault, + "", + author$project$Profile$bio(profile) + ) + ) + ]) + ), + followButton + ]) + ) + ]) + ) + ]) + ) + ]) + ), + (function() { + var _n1 = model.feed; + switch (_n1.$) { + case "Loaded": + var feed = _n1.a; + return A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("container") + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("row") + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class( + "col-xs-12 col-md-10 offset-md-1" + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class( + "articles-toggle" + ) + ]), + elm$core$List$concat( + _List_fromArray([ + _List_fromArray([ + author$project$Page$Profile$viewTabs( + model.feedTab + ) + ]), + A2( + elm$core$List$map, + elm$html$Html$map( + author$project$Page$Profile$GotFeedMsg + ), + A2( + author$project$Article$Feed$viewArticles, + model.timeZone, + feed + ) + ), + _List_fromArray([ + A3( + author$project$Article$Feed$viewPagination, + author$project$Page$Profile$ClickedFeedPage, + model.feedPage, + feed + ) + ]) + ]) + ) + ) + ]) + ) + ]) + ) + ]) + ); + case "Loading": + return elm$html$Html$text(""); + case "LoadingSlowly": + return author$project$Loading$icon; + default: + return author$project$Loading$error("feed"); + } + })() + ]) + ); + case "Loading": + return elm$html$Html$text(""); + case "LoadingSlowly": + return author$project$Loading$icon; + default: + return author$project$Loading$error("profile"); + } + })(), + title: title + }; + }; + var author$project$Page$Register$EnteredEmail = function(a) { + return { $: "EnteredEmail", a: a }; + }; + var author$project$Page$Register$EnteredPassword = function(a) { + return { $: "EnteredPassword", a: a }; + }; + var author$project$Page$Register$EnteredUsername = function(a) { + return { $: "EnteredUsername", a: a }; + }; + var author$project$Page$Register$SubmittedForm = { $: "SubmittedForm" }; + var author$project$Page$Register$viewForm = function(form) { + return A2( + elm$html$Html$form, + _List_fromArray([ + elm$html$Html$Events$onSubmit( + author$project$Page$Register$SubmittedForm + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$input, + _List_fromArray([ + elm$html$Html$Attributes$class("form-control form-control-lg"), + elm$html$Html$Attributes$placeholder("Username"), + elm$html$Html$Events$onInput( + author$project$Page$Register$EnteredUsername + ), + elm$html$Html$Attributes$value(form.username) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$input, + _List_fromArray([ + elm$html$Html$Attributes$class("form-control form-control-lg"), + elm$html$Html$Attributes$placeholder("Email"), + elm$html$Html$Events$onInput( + author$project$Page$Register$EnteredEmail + ), + elm$html$Html$Attributes$value(form.email) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$input, + _List_fromArray([ + elm$html$Html$Attributes$class("form-control form-control-lg"), + elm$html$Html$Attributes$type_("password"), + elm$html$Html$Attributes$placeholder("Password"), + elm$html$Html$Events$onInput( + author$project$Page$Register$EnteredPassword + ), + elm$html$Html$Attributes$value(form.password) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$button, + _List_fromArray([ + elm$html$Html$Attributes$class( + "btn btn-lg btn-primary pull-xs-right" + ) + ]), + _List_fromArray([elm$html$Html$text("Sign up")]) + ) + ]) + ); + }; + var author$project$Page$Register$viewProblem = function(problem) { + var errorMessage = (function() { + if (problem.$ === "InvalidEntry") { + var str = problem.b; + return str; + } else { + var str = problem.a; + return str; + } + })(); + return A2( + elm$html$Html$li, + _List_Nil, + _List_fromArray([elm$html$Html$text(errorMessage)]) + ); + }; + var author$project$Page$Register$view = function(model) { + return { + content: A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("cred-page")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("container page")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("row")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class( + "col-md-6 offset-md-3 col-xs-12" + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$h1, + _List_fromArray([ + elm$html$Html$Attributes$class("text-xs-center") + ]), + _List_fromArray([elm$html$Html$text("Sign up")]) + ), + A2( + elm$html$Html$p, + _List_fromArray([ + elm$html$Html$Attributes$class("text-xs-center") + ]), + _List_fromArray([ + A2( + elm$html$Html$a, + _List_fromArray([ + author$project$Route$href( + author$project$Route$Login + ) + ]), + _List_fromArray([ + elm$html$Html$text("Have an account?") + ]) + ) + ]) + ), + A2( + elm$html$Html$ul, + _List_fromArray([ + elm$html$Html$Attributes$class("error-messages") + ]), + A2( + elm$core$List$map, + author$project$Page$Register$viewProblem, + model.problems + ) + ), + author$project$Page$Register$viewForm(model.form) + ]) + ) + ]) + ) + ]) + ) + ]) + ), + title: "Register" + }; + }; + var author$project$Page$Settings$EnteredAvatar = function(a) { + return { $: "EnteredAvatar", a: a }; + }; + var author$project$Page$Settings$EnteredBio = function(a) { + return { $: "EnteredBio", a: a }; + }; + var author$project$Page$Settings$EnteredEmail = function(a) { + return { $: "EnteredEmail", a: a }; + }; + var author$project$Page$Settings$EnteredPassword = function(a) { + return { $: "EnteredPassword", a: a }; + }; + var author$project$Page$Settings$EnteredUsername = function(a) { + return { $: "EnteredUsername", a: a }; + }; + var author$project$Page$Settings$SubmittedForm = F2(function(a, b) { + return { $: "SubmittedForm", a: a, b: b }; + }); + var author$project$Page$Settings$viewForm = F2(function(cred, form) { + return A2( + elm$html$Html$form, + _List_fromArray([ + elm$html$Html$Events$onSubmit( + A2(author$project$Page$Settings$SubmittedForm, cred, form) + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$fieldset, + _List_Nil, + _List_fromArray([ + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$input, + _List_fromArray([ + elm$html$Html$Attributes$class("form-control"), + elm$html$Html$Attributes$placeholder( + "URL of profile picture" + ), + elm$html$Html$Attributes$value(form.avatar), + elm$html$Html$Events$onInput( + author$project$Page$Settings$EnteredAvatar + ) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$input, + _List_fromArray([ + elm$html$Html$Attributes$class( + "form-control form-control-lg" + ), + elm$html$Html$Attributes$placeholder("Username"), + elm$html$Html$Attributes$value(form.username), + elm$html$Html$Events$onInput( + author$project$Page$Settings$EnteredUsername + ) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$textarea, + _List_fromArray([ + elm$html$Html$Attributes$class( + "form-control form-control-lg" + ), + elm$html$Html$Attributes$placeholder("Short bio about you"), + A2(elm$html$Html$Attributes$attribute, "rows", "8"), + elm$html$Html$Attributes$value(form.bio), + elm$html$Html$Events$onInput( + author$project$Page$Settings$EnteredBio + ) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$input, + _List_fromArray([ + elm$html$Html$Attributes$class( + "form-control form-control-lg" + ), + elm$html$Html$Attributes$placeholder("Email"), + elm$html$Html$Attributes$value(form.email), + elm$html$Html$Events$onInput( + author$project$Page$Settings$EnteredEmail + ) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$fieldset, + _List_fromArray([elm$html$Html$Attributes$class("form-group")]), + _List_fromArray([ + A2( + elm$html$Html$input, + _List_fromArray([ + elm$html$Html$Attributes$class( + "form-control form-control-lg" + ), + elm$html$Html$Attributes$type_("password"), + elm$html$Html$Attributes$placeholder("Password"), + elm$html$Html$Attributes$value(form.password), + elm$html$Html$Events$onInput( + author$project$Page$Settings$EnteredPassword + ) + ]), + _List_Nil + ) + ]) + ), + A2( + elm$html$Html$button, + _List_fromArray([ + elm$html$Html$Attributes$class( + "btn btn-lg btn-primary pull-xs-right" + ) + ]), + _List_fromArray([elm$html$Html$text("Update Settings")]) + ) + ]) + ) + ]) + ); + }); + var author$project$Page$Settings$viewProblem = function(problem) { + var errorMessage = (function() { + if (problem.$ === "InvalidEntry") { + var message = problem.b; + return message; + } else { + var message = problem.a; + return message; + } + })(); + return A2( + elm$html$Html$li, + _List_Nil, + _List_fromArray([elm$html$Html$text(errorMessage)]) + ); + }; + var author$project$Page$Settings$view = function(model) { + return { + content: (function() { + var _n0 = author$project$Session$cred(model.session); + if (_n0.$ === "Just") { + var cred = _n0.a; + return A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("settings-page")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class("container page") + ]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([elm$html$Html$Attributes$class("row")]), + _List_fromArray([ + A2( + elm$html$Html$div, + _List_fromArray([ + elm$html$Html$Attributes$class( + "col-md-6 offset-md-3 col-xs-12" + ) + ]), + _List_fromArray([ + A2( + elm$html$Html$h1, + _List_fromArray([ + elm$html$Html$Attributes$class("text-xs-center") + ]), + _List_fromArray([ + elm$html$Html$text("Your Settings") + ]) + ), + A2( + elm$html$Html$ul, + _List_fromArray([ + elm$html$Html$Attributes$class("error-messages") + ]), + A2( + elm$core$List$map, + author$project$Page$Settings$viewProblem, + model.problems + ) + ), + (function() { + var _n1 = model.status; + switch (_n1.$) { + case "Loaded": + var form = _n1.a; + return A2( + author$project$Page$Settings$viewForm, + cred, + form + ); + case "Loading": + return elm$html$Html$text(""); + case "LoadingSlowly": + return author$project$Loading$icon; + default: + return elm$html$Html$text( + "Error loading page." + ); + } + })() + ]) + ) + ]) + ) + ]) + ) + ]) + ); + } else { + return elm$html$Html$text("Sign in to view your settings."); + } + })(), + title: "Settings" + }; + }; + var author$project$Main$view = function(model) { + var viewPage = F3(function(page, toMsg, config) { + var _n4 = A3( + author$project$Page$view, + author$project$Session$viewer(author$project$Main$toSession(model)), + page, + config + ); + var title = _n4.title; + var body = _n4.body; + return { + body: A2(elm$core$List$map, elm$html$Html$map(toMsg), body), + title: title + }; + }); + switch (model.$) { + case "Redirect": + return A3( + viewPage, + author$project$Page$Other, + function(_n1) { + return author$project$Main$Ignored; + }, + author$project$Page$Blank$view + ); + case "NotFound": + return A3( + viewPage, + author$project$Page$Other, + function(_n2) { + return author$project$Main$Ignored; + }, + author$project$Page$NotFound$view + ); + case "Settings": + var settings = model.a; + return A3( + viewPage, + author$project$Page$Other, + author$project$Main$GotSettingsMsg, + author$project$Page$Settings$view(settings) + ); + case "Home": + var home = model.a; + return A3( + viewPage, + author$project$Page$Home, + author$project$Main$GotHomeMsg, + author$project$Page$Home$view(home) + ); + case "Login": + var login = model.a; + return A3( + viewPage, + author$project$Page$Other, + author$project$Main$GotLoginMsg, + author$project$Page$Login$view(login) + ); + case "Register": + var register = model.a; + return A3( + viewPage, + author$project$Page$Other, + author$project$Main$GotRegisterMsg, + author$project$Page$Register$view(register) + ); + case "Profile": + var username = model.a; + var profile = model.b; + return A3( + viewPage, + author$project$Page$Profile(username), + author$project$Main$GotProfileMsg, + author$project$Page$Profile$view(profile) + ); + case "Article": + var article = model.a; + return A3( + viewPage, + author$project$Page$Other, + author$project$Main$GotArticleMsg, + author$project$Page$Article$view(article) + ); + default: + if (model.a.$ === "Nothing") { + var _n3 = model.a; + var editor = model.b; + return A3( + viewPage, + author$project$Page$NewArticle, + author$project$Main$GotEditorMsg, + author$project$Page$Article$Editor$view(editor) + ); + } else { + var editor = model.b; + return A3( + viewPage, + author$project$Page$Other, + author$project$Main$GotEditorMsg, + author$project$Page$Article$Editor$view(editor) + ); + } + } + }; + var author$project$Main$main = A2( + author$project$Api$application, + author$project$Viewer$decoder, + { + init: author$project$Main$init, + onUrlChange: author$project$Main$ChangedUrl, + onUrlRequest: author$project$Main$ClickedLink, + subscriptions: author$project$Main$subscriptions, + update: author$project$Main$update, + view: author$project$Main$view + } + ); + _Platform_export({ + Main: { + init: author$project$Main$main(elm$json$Json$Decode$value)({ + versions: { elm: "0.19.0" }, + types: { + message: "Main.Msg", + aliases: { + "Url.Url": { + args: [], + type: + "{ protocol : Url.Protocol, host : String.String, port_ : Maybe.Maybe Basics.Int, path : String.String, query : Maybe.Maybe String.String, fragment : Maybe.Maybe String.String }" + }, + "Page.Settings.Form": { + args: [], + type: + "{ avatar : String.String, bio : String.String, email : String.String, username : String.String, password : String.String }" + }, + "Article.Internals": { + args: [], + type: + "{ slug : Article.Slug.Slug, author : Author.Author, metadata : Article.Metadata }" + }, + "Article.Metadata": { + args: [], + type: + "{ description : String.String, title : String.String, tags : List.List String.String, createdAt : Time.Posix, favorited : Basics.Bool, favoritesCount : Basics.Int }" + }, + "Article.Body.MarkdownString": { args: [], type: "String.String" }, + "Article.Comment.Internals": { + args: [], + type: + "{ id : CommentId.CommentId, body : String.String, createdAt : Time.Posix, author : Author.Author }" + }, + "Article.Feed.Internals": { + args: [], + type: + "{ session : Session.Session, errors : List.List String.String, articles : PaginatedList.PaginatedList (Article.Article Article.Preview), isLoading : Basics.Bool }" + }, + "Http.Response": { + args: ["body"], + type: + "{ url : String.String, status : { code : Basics.Int, message : String.String }, headers : Dict.Dict String.String String.String, body : body }" + }, + "Time.Era": { + args: [], + type: "{ start : Basics.Int, offset : Basics.Int }" + }, + "Profile.Internals": { + args: [], + type: + "{ bio : Maybe.Maybe String.String, avatar : Avatar.Avatar }" + } + }, + unions: { + "Main.Msg": { + args: [], + tags: { + Ignored: [], + ChangedRoute: ["Maybe.Maybe Route.Route"], + ChangedUrl: ["Url.Url"], + ClickedLink: ["Browser.UrlRequest"], + GotHomeMsg: ["Page.Home.Msg"], + GotSettingsMsg: ["Page.Settings.Msg"], + GotLoginMsg: ["Page.Login.Msg"], + GotRegisterMsg: ["Page.Register.Msg"], + GotProfileMsg: ["Page.Profile.Msg"], + GotArticleMsg: ["Page.Article.Msg"], + GotEditorMsg: ["Page.Article.Editor.Msg"], + GotSession: ["Session.Session"] + } + }, + "Page.Article.Msg": { + args: [], + tags: { + ClickedDeleteArticle: ["Api.Cred", "Article.Slug.Slug"], + ClickedDeleteComment: [ + "Api.Cred", + "Article.Slug.Slug", + "CommentId.CommentId" + ], + ClickedDismissErrors: [], + ClickedFavorite: [ + "Api.Cred", + "Article.Slug.Slug", + "Article.Body.Body" + ], + ClickedUnfavorite: [ + "Api.Cred", + "Article.Slug.Slug", + "Article.Body.Body" + ], + ClickedFollow: ["Api.Cred", "Author.UnfollowedAuthor"], + ClickedUnfollow: ["Api.Cred", "Author.FollowedAuthor"], + ClickedPostComment: ["Api.Cred", "Article.Slug.Slug"], + EnteredCommentText: ["String.String"], + CompletedLoadArticle: [ + "Result.Result Http.Error (Article.Article Article.Full)" + ], + CompletedLoadComments: [ + "Result.Result Http.Error (List.List Article.Comment.Comment)" + ], + CompletedDeleteArticle: ["Result.Result Http.Error ()"], + CompletedDeleteComment: [ + "CommentId.CommentId", + "Result.Result Http.Error ()" + ], + CompletedFavoriteChange: [ + "Result.Result Http.Error (Article.Article Article.Full)" + ], + CompletedFollowChange: [ + "Result.Result Http.Error Author.Author" + ], + CompletedPostComment: [ + "Result.Result Http.Error Article.Comment.Comment" + ], + GotTimeZone: ["Time.Zone"], + GotSession: ["Session.Session"], + PassedSlowLoadThreshold: [] + } + }, + "Page.Article.Editor.Msg": { + args: [], + tags: { + ClickedSave: ["Api.Cred"], + EnteredBody: ["String.String"], + EnteredDescription: ["String.String"], + EnteredTags: ["String.String"], + EnteredTitle: ["String.String"], + CompletedCreate: [ + "Result.Result Http.Error (Article.Article Article.Full)" + ], + CompletedEdit: [ + "Result.Result Http.Error (Article.Article Article.Full)" + ], + CompletedArticleLoad: [ + "Result.Result ( Article.Slug.Slug, Http.Error ) (Article.Article Article.Full)" + ], + GotSession: ["Session.Session"], + PassedSlowLoadThreshold: [] + } + }, + "Page.Home.Msg": { + args: [], + tags: { + ClickedTag: ["Article.Tag.Tag"], + ClickedTab: ["Page.Home.FeedTab"], + ClickedFeedPage: ["Basics.Int"], + CompletedFeedLoad: [ + "Result.Result Http.Error Article.Feed.Model" + ], + CompletedTagsLoad: [ + "Result.Result Http.Error (List.List Article.Tag.Tag)" + ], + GotTimeZone: ["Time.Zone"], + GotFeedMsg: ["Article.Feed.Msg"], + GotSession: ["Session.Session"], + PassedSlowLoadThreshold: [] + } + }, + "Page.Login.Msg": { + args: [], + tags: { + SubmittedForm: [], + EnteredEmail: ["String.String"], + EnteredPassword: ["String.String"], + CompletedLogin: ["Result.Result Http.Error Viewer.Viewer"], + GotSession: ["Session.Session"] + } + }, + "Page.Profile.Msg": { + args: [], + tags: { + ClickedDismissErrors: [], + ClickedFollow: ["Api.Cred", "Author.UnfollowedAuthor"], + ClickedUnfollow: ["Api.Cred", "Author.FollowedAuthor"], + ClickedTab: ["Page.Profile.FeedTab"], + ClickedFeedPage: ["Basics.Int"], + CompletedFollowChange: [ + "Result.Result Http.Error Author.Author" + ], + CompletedAuthorLoad: [ + "Result.Result ( Username.Username, Http.Error ) Author.Author" + ], + CompletedFeedLoad: [ + "Result.Result ( Username.Username, Http.Error ) Article.Feed.Model" + ], + GotTimeZone: ["Time.Zone"], + GotFeedMsg: ["Article.Feed.Msg"], + GotSession: ["Session.Session"], + PassedSlowLoadThreshold: [] + } + }, + "Page.Register.Msg": { + args: [], + tags: { + SubmittedForm: [], + EnteredEmail: ["String.String"], + EnteredUsername: ["String.String"], + EnteredPassword: ["String.String"], + CompletedRegister: ["Result.Result Http.Error Viewer.Viewer"], + GotSession: ["Session.Session"] + } + }, + "Page.Settings.Msg": { + args: [], + tags: { + SubmittedForm: ["Api.Cred", "Page.Settings.Form"], + EnteredEmail: ["String.String"], + EnteredUsername: ["String.String"], + EnteredPassword: ["String.String"], + EnteredBio: ["String.String"], + EnteredAvatar: ["String.String"], + CompletedFormLoad: [ + "Result.Result Http.Error Page.Settings.Form" + ], + CompletedSave: ["Result.Result Http.Error Viewer.Viewer"], + GotSession: ["Session.Session"], + PassedSlowLoadThreshold: [] + } + }, + "Route.Route": { + args: [], + tags: { + Home: [], + Root: [], + Login: [], + Logout: [], + Register: [], + Settings: [], + Article: ["Article.Slug.Slug"], + Profile: ["Username.Username"], + NewArticle: [], + EditArticle: ["Article.Slug.Slug"] + } + }, + "Session.Session": { + args: [], + tags: { + LoggedIn: ["Browser.Navigation.Key", "Viewer.Viewer"], + Guest: ["Browser.Navigation.Key"] + } + }, + "Browser.UrlRequest": { + args: [], + tags: { Internal: ["Url.Url"], External: ["String.String"] } + }, + "Basics.Int": { args: [], tags: { Int: [] } }, + "Maybe.Maybe": { args: ["a"], tags: { Just: ["a"], Nothing: [] } }, + "String.String": { args: [], tags: { String: [] } }, + "Url.Protocol": { args: [], tags: { Http: [], Https: [] } }, + "Api.Cred": { + args: [], + tags: { Cred: ["Username.Username", "String.String"] } + }, + "Article.Article": { + args: ["a"], + tags: { Article: ["Article.Internals", "a"] } + }, + "Article.Full": { args: [], tags: { Full: ["Article.Body.Body"] } }, + "Article.Body.Body": { + args: [], + tags: { Body: ["Article.Body.MarkdownString"] } + }, + "Article.Comment.Comment": { + args: [], + tags: { Comment: ["Article.Comment.Internals"] } + }, + "Article.Feed.Model": { + args: [], + tags: { Model: ["Article.Feed.Internals"] } + }, + "Article.Feed.Msg": { + args: [], + tags: { + ClickedDismissErrors: [], + ClickedFavorite: ["Api.Cred", "Article.Slug.Slug"], + ClickedUnfavorite: ["Api.Cred", "Article.Slug.Slug"], + CompletedFavorite: [ + "Result.Result Http.Error (Article.Article Article.Preview)" + ] + } + }, + "Article.Slug.Slug": { + args: [], + tags: { Slug: ["String.String"] } + }, + "Article.Tag.Tag": { args: [], tags: { Tag: ["String.String"] } }, + "Author.Author": { + args: [], + tags: { + IsFollowing: ["Author.FollowedAuthor"], + IsNotFollowing: ["Author.UnfollowedAuthor"], + IsViewer: ["Api.Cred", "Profile.Profile"] + } + }, + "Author.FollowedAuthor": { + args: [], + tags: { FollowedAuthor: ["Username.Username", "Profile.Profile"] } + }, + "Author.UnfollowedAuthor": { + args: [], + tags: { + UnfollowedAuthor: ["Username.Username", "Profile.Profile"] + } + }, + "CommentId.CommentId": { + args: [], + tags: { CommentId: ["Basics.Int"] } + }, + "Page.Home.FeedTab": { + args: [], + tags: { + YourFeed: ["Api.Cred"], + GlobalFeed: [], + TagFeed: ["Article.Tag.Tag"] + } + }, + "Page.Profile.FeedTab": { + args: [], + tags: { MyArticles: [], FavoritedArticles: [] } + }, + "Username.Username": { + args: [], + tags: { Username: ["String.String"] } + }, + "Viewer.Viewer": { + args: [], + tags: { Viewer: ["Avatar.Avatar", "Api.Cred"] } + }, + "Browser.Navigation.Key": { args: [], tags: { Key: [] } }, + "List.List": { args: ["a"], tags: {} }, + "Result.Result": { + args: ["error", "value"], + tags: { Ok: ["value"], Err: ["error"] } + }, + "Http.Error": { + args: [], + tags: { + BadUrl: ["String.String"], + Timeout: [], + NetworkError: [], + BadStatus: ["Http.Response String.String"], + BadPayload: ["String.String", "Http.Response String.String"] + } + }, + "Time.Zone": { + args: [], + tags: { Zone: ["Basics.Int", "List.List Time.Era"] } + }, + "Article.Preview": { args: [], tags: { Preview: [] } }, + "Avatar.Avatar": { + args: [], + tags: { Avatar: ["Maybe.Maybe String.String"] } + }, + "PaginatedList.PaginatedList": { + args: ["a"], + tags: { + PaginatedList: ["{ values : List.List a, total : Basics.Int }"] + } + }, + "Profile.Profile": { + args: [], + tags: { Profile: ["Profile.Internals"] } + }, + "Basics.Bool": { args: [], tags: { True: [], False: [] } }, + "Dict.Dict": { + args: ["k", "v"], + tags: { + RBNode_elm_builtin: [ + "Dict.NColor", + "k", + "v", + "Dict.Dict k v", + "Dict.Dict k v" + ], + RBEmpty_elm_builtin: [] + } + }, + "Time.Posix": { args: [], tags: { Posix: ["Basics.Int"] } }, + "Dict.NColor": { args: [], tags: { Red: [], Black: [] } } + } + } + }) + } + }); +})(this); diff --git a/example-0.19/elm.json b/example-0.19/elm.json new file mode 100644 index 0000000..96d6730 --- /dev/null +++ b/example-0.19/elm.json @@ -0,0 +1,31 @@ +{ + "type": "application", + "source-directories": ["src"], + "elm-version": "0.19.0", + "dependencies": { + "direct": { + "NoRedInk/elm-json-decode-pipeline": "1.0.0", + "elm/browser": "1.0.0", + "elm/core": "1.0.0", + "elm/html": "1.0.0", + "elm/http": "1.0.0", + "elm/json": "1.0.0", + "elm/time": "1.0.0", + "elm/url": "1.0.0", + "elm-explorations/markdown": "1.0.0", + "rtfeldman/elm-iso8601-date-strings": "1.1.0" + }, + "indirect": { + "elm/parser": "1.0.0", + "elm/virtual-dom": "1.0.0" + } + }, + "test-dependencies": { + "direct": { + "elm-explorations/test": "1.0.0" + }, + "indirect": { + "elm/random": "1.0.0" + } + } +} diff --git a/example-0.19/index.html b/example-0.19/index.html new file mode 100644 index 0000000..ff0bbab --- /dev/null +++ b/example-0.19/index.html @@ -0,0 +1,25 @@ + + + + + Conduit + + + + + + + + + + + + + + + + +
    + + + diff --git a/example-0.19/index.js b/example-0.19/index.js new file mode 100644 index 0000000..283015c --- /dev/null +++ b/example-0.19/index.js @@ -0,0 +1,53 @@ +import { Elm } from "./src/Main.elm"; + +import ElmRings from "../source/ElmRings"; + +var storageKey = "store"; +var flags = localStorage.getItem(storageKey); +var app = Elm.Main.init({ flags: flags }); + +app.ports.storeCache.subscribe(function(val) { + if (val === null) { + localStorage.removeItem(storageKey); + } else { + localStorage.setItem(storageKey, JSON.stringify(val)); + } + + // Report that the new session was stored succesfully. + setTimeout(function() { + app.ports.onStoreChange.send(val); + }, 0); +}); + +// Whenever localStorage changes in another tab, report it if necessary. +window.addEventListener( + "storage", + function(event) { + if (event.storageArea === localStorage && event.key === storageKey) { + app.ports.onStoreChange.send(event.newValue); + } + }, + false +); + +const elmHistoryRecorder = new ElmRings({ + allowDownload: true, + trackingFrequency: 5000, + storeHistory: historyDataAsJsonString => { + console.log("New history is", JSON.parse(historyDataAsJsonString)); + }, + watchWords: ["ClickedTag"], + historySanitizer: elmObjectOrRecord => { + // in 0.18, $ => ctor and a: => _0: + if (elmObjectOrRecord.$ == "ClickedTag") { + return Object.assign({}, elmObjectOrRecord, { + a: "[HIDDEN FROM YOUR PRYING EYES]" + }); + } + } +}); + +// start tracking history +elmHistoryRecorder.startTracking(); + +setTimeout(elmHistoryRecorder.exportHistory, 1000); diff --git a/example-0.19/package.json b/example-0.19/package.json new file mode 100644 index 0000000..a37a7f7 --- /dev/null +++ b/example-0.19/package.json @@ -0,0 +1,48 @@ +{ + "name": "elm-spa-example-webpack", + "version": "0.2.0", + "description": "", + "scripts": { + "build": "babel source --out-dir distribution", + "server": "yarn run webpack-dev-server --config webpack.config.js --watch" + }, + "devDependencies": { + "@babel/cli": "^7.0.0-beta.42", + "@babel/core": "^7.0.0-beta.40", + "@babel/plugin-proposal-object-rest-spread": "^7.0.0-beta.40", + "@babel/plugin-transform-async-to-generator": "^7.0.0-beta.40", + "@babel/preset-env": "^7.0.0-beta.40", + "autoprefixer": "^8.1.0", + "babel-core": "^7.0.0-0", + "babel-jest": "^22.4.1", + "babel-loader": "^8.0.0-beta.2", + "css-loader": "^0.28.10", + "elm": "0.19", + "elm-assets-loader": "^0.3.0", + "elm-webpack-loader": "elm-community/elm-webpack-loader#master", + "extract-text-webpack-plugin": "^4.0.0-beta.0", + "file-loader": "^1.1.11", + "html-webpack-plugin": "^3.1.0", + "husky": "^0.14.3", + "jest": "^22.4.0", + "jest-webpack-resolver": "^0.3.0", + "json-formatter-js": "^2.2.1", + "prettier": "^1.10.2", + "pretty-quick": "^1.2.0", + "simple-progress-webpack-plugin": "^1.0.4", + "url-loader": "^1.0.1", + "webpack": "^4.1.1", + "webpack-cli": "^2.0.10", + "webpack-dev-server": "^3.1.1", + "webpack-manifest-plugin": "^2.0.0-rc.2", + "webpack-merge": "^4.1.2" + }, + "engines": { + "node": ">= 6" + }, + "dependencies": { + "elm-format": "0.8.0", + "elm-rings": "../elm-rings", + "elm-upgrade": "^0.19.1" + } +} diff --git a/example-0.19/src/Api.elm b/example-0.19/src/Api.elm new file mode 100644 index 0000000..484b255 --- /dev/null +++ b/example-0.19/src/Api.elm @@ -0,0 +1,300 @@ +port module Api exposing (Cred, addServerError, application, decodeErrors, delete, get, login, logout, post, put, register, settings, storeCredWith, username, viewerChanges) + +{-| This module is responsible for communicating to the Conduit API. + +It exposes an opaque Endpoint type which is guaranteed to point to the correct URL. + +-} + +import Api.Endpoint as Endpoint exposing (Endpoint) +import Avatar exposing (Avatar) +import Browser +import Browser.Navigation as Nav +import Http exposing (Body, Expect) +import Json.Decode as Decode exposing (Decoder, Value, decodeString, field, string) +import Json.Decode.Pipeline as Pipeline exposing (optional, required) +import Json.Encode as Encode +import Url exposing (Url) +import Username exposing (Username) + + + +-- CRED + + +{-| The authentication credentials for the Viewer (that is, the currently logged-in user.) + +This includes: + + - The cred's Username + - The cred's authentication token + +By design, there is no way to access the token directly as a String. +It can be encoded for persistence, and it can be added to a header +to a HttpBuilder for a request, but that's it. + +This token should never be rendered to the end user, and with this API, it +can't be! + +-} +type Cred + = Cred Username String + + +username : Cred -> Username +username (Cred val _) = + val + + +credHeader : Cred -> Http.Header +credHeader (Cred _ str) = + Http.header "authorization" ("Token " ++ str) + + +{-| It's important that this is never exposed! + +We epxose `login` and `application` instead, so we can be certain that if anyone +ever has access to a `Cred` value, it came from either the login API endpoint +or was passed in via flags. + +-} +credDecoder : Decoder Cred +credDecoder = + Decode.succeed Cred + |> required "username" Username.decoder + |> required "token" Decode.string + + + +-- PERSISTENCE + + +decode : Decoder (Cred -> viewer) -> Value -> Result Decode.Error viewer +decode decoder value = + -- It's stored in localStorage as a JSON String; + -- first decode the Value as a String, then + -- decode that String as JSON. + Decode.decodeValue Decode.string value + |> Result.andThen (\str -> Decode.decodeString (Decode.field "user" (decoderFromCred decoder)) str) + + +port onStoreChange : (Value -> msg) -> Sub msg + + +viewerChanges : (Maybe viewer -> msg) -> Decoder (Cred -> viewer) -> Sub msg +viewerChanges toMsg decoder = + onStoreChange (\value -> toMsg (decodeFromChange decoder value)) + + +decodeFromChange : Decoder (Cred -> viewer) -> Value -> Maybe viewer +decodeFromChange viewerDecoder val = + -- It's stored in localStorage as a JSON String; + -- first decode the Value as a String, then + -- decode that String as JSON. + Decode.decodeValue (storageDecoder viewerDecoder) val + |> Result.toMaybe + + +storeCredWith : Cred -> Avatar -> Cmd msg +storeCredWith (Cred uname token) avatar = + let + json = + Encode.object + [ ( "user" + , Encode.object + [ ( "username", Username.encode uname ) + , ( "token", Encode.string token ) + , ( "image", Avatar.encode avatar ) + ] + ) + ] + in + storeCache (Just json) + + +logout : Cmd msg +logout = + storeCache Nothing + + +port storeCache : Maybe Value -> Cmd msg + + + +-- SERIALIZATION +-- APPLICATION + + +application : + Decoder (Cred -> viewer) + -> + { init : Maybe viewer -> Url -> Nav.Key -> ( model, Cmd msg ) + , onUrlChange : Url -> msg + , onUrlRequest : Browser.UrlRequest -> msg + , subscriptions : model -> Sub msg + , update : msg -> model -> ( model, Cmd msg ) + , view : model -> Browser.Document msg + } + -> Program Value model msg +application viewerDecoder config = + let + init flags url navKey = + let + maybeViewer = + Decode.decodeValue Decode.string flags + |> Result.andThen (Decode.decodeString (storageDecoder viewerDecoder)) + |> Result.toMaybe + in + config.init maybeViewer url navKey + in + Browser.application + { init = init + , onUrlChange = config.onUrlChange + , onUrlRequest = config.onUrlRequest + , subscriptions = config.subscriptions + , update = config.update + , view = config.view + } + + +storageDecoder : Decoder (Cred -> viewer) -> Decoder viewer +storageDecoder viewerDecoder = + Decode.field "user" (decoderFromCred viewerDecoder) + + + +-- HTTP + + +get : Endpoint -> Maybe Cred -> Decoder a -> Http.Request a +get url maybeCred decoder = + Endpoint.request + { method = "GET" + , url = url + , expect = Http.expectJson decoder + , headers = + case maybeCred of + Just cred -> + [ credHeader cred ] + + Nothing -> + [] + , body = Http.emptyBody + , timeout = Nothing + , withCredentials = False + } + + +put : Endpoint -> Cred -> Body -> Decoder a -> Http.Request a +put url cred body decoder = + Endpoint.request + { method = "PUT" + , url = url + , expect = Http.expectJson decoder + , headers = [ credHeader cred ] + , body = body + , timeout = Nothing + , withCredentials = False + } + + +post : Endpoint -> Maybe Cred -> Body -> Decoder a -> Http.Request a +post url maybeCred body decoder = + Endpoint.request + { method = "POST" + , url = url + , expect = Http.expectJson decoder + , headers = + case maybeCred of + Just cred -> + [ credHeader cred ] + + Nothing -> + [] + , body = body + , timeout = Nothing + , withCredentials = False + } + + +delete : Endpoint -> Cred -> Body -> Decoder a -> Http.Request a +delete url cred body decoder = + Endpoint.request + { method = "DELETE" + , url = url + , expect = Http.expectJson decoder + , headers = [ credHeader cred ] + , body = body + , timeout = Nothing + , withCredentials = False + } + + +login : Http.Body -> Decoder (Cred -> a) -> Http.Request a +login body decoder = + post Endpoint.login Nothing body (Decode.field "user" (decoderFromCred decoder)) + + +register : Http.Body -> Decoder (Cred -> a) -> Http.Request a +register body decoder = + post Endpoint.users Nothing body (Decode.field "user" (decoderFromCred decoder)) + + +settings : Cred -> Http.Body -> Decoder (Cred -> a) -> Http.Request a +settings cred body decoder = + put Endpoint.user cred body (Decode.field "user" (decoderFromCred decoder)) + + +decoderFromCred : Decoder (Cred -> a) -> Decoder a +decoderFromCred decoder = + Decode.map2 (\fromCred cred -> fromCred cred) + decoder + credDecoder + + + +-- ERRORS + + +addServerError : List String -> List String +addServerError list = + "Server error" :: list + + +{-| Many API endpoints include an "errors" field in their BadStatus responses. +-} +decodeErrors : Http.Error -> List String +decodeErrors error = + case error of + Http.BadStatus response -> + response.body + |> decodeString (field "errors" errorsDecoder) + |> Result.withDefault [ "Server error" ] + + err -> + [ "Server error" ] + + +errorsDecoder : Decoder (List String) +errorsDecoder = + Decode.keyValuePairs (Decode.list Decode.string) + |> Decode.map (List.concatMap fromPair) + + +fromPair : ( String, List String ) -> List String +fromPair ( field, errors ) = + List.map (\error -> field ++ " " ++ error) errors + + + +-- LOCALSTORAGE KEYS + + +cacheStorageKey : String +cacheStorageKey = + "cache" + + +credStorageKey : String +credStorageKey = + "cred" diff --git a/example-0.19/src/Api/Endpoint.elm b/example-0.19/src/Api/Endpoint.elm new file mode 100644 index 0000000..7812fdb --- /dev/null +++ b/example-0.19/src/Api/Endpoint.elm @@ -0,0 +1,127 @@ +module Api.Endpoint exposing (Endpoint, article, articles, comment, comments, favorite, feed, follow, login, profiles, request, tags, user, users) + +import Article.Slug as Slug exposing (Slug) +import CommentId exposing (CommentId) +import Http +import Url.Builder exposing (QueryParameter) +import Username exposing (Username) + + +{-| Http.request, except it takes an Endpoint instead of a Url. +-} +request : + { body : Http.Body + , expect : Http.Expect a + , headers : List Http.Header + , method : String + , timeout : Maybe Float + , url : Endpoint + , withCredentials : Bool + } + -> Http.Request a +request config = + Http.request + { body = config.body + , expect = config.expect + , headers = config.headers + , method = config.method + , timeout = config.timeout + , url = unwrap config.url + , withCredentials = config.withCredentials + } + + + +-- TYPES + + +{-| Get a URL to the Conduit API. + +This is not publicly exposed, because we want to make sure the only way to get one of these URLs is from this module. + +-} +type Endpoint + = Endpoint String + + +unwrap : Endpoint -> String +unwrap (Endpoint str) = + str + + +url : List String -> List QueryParameter -> Endpoint +url paths queryParams = + -- NOTE: Url.Builder takes care of percent-encoding special URL characters. + -- See https://package.elm-lang.org/packages/elm/url/latest/Url#percentEncode + Url.Builder.crossOrigin "https://conduit.productionready.io" + ("api" :: paths) + queryParams + |> Endpoint + + + +-- ENDPOINTS + + +login : Endpoint +login = + url [ "users", "login" ] [] + + +user : Endpoint +user = + url [ "user" ] [] + + +users : Endpoint +users = + url [ "users" ] [] + + +follow : Username -> Endpoint +follow uname = + url [ "profiles", Username.toString uname, "follow" ] [] + + + +-- ARTICLE ENDPOINTS + + +article : Slug -> Endpoint +article slug = + url [ "articles", Slug.toString slug ] [] + + +comments : Slug -> Endpoint +comments slug = + url [ "articles", Slug.toString slug, "comments" ] [] + + +comment : Slug -> CommentId -> Endpoint +comment slug commentId = + url [ "articles", Slug.toString slug, "comments", CommentId.toString commentId ] [] + + +favorite : Slug -> Endpoint +favorite slug = + url [ "articles", Slug.toString slug, "favorite" ] [] + + +articles : List QueryParameter -> Endpoint +articles params = + url [ "articles" ] params + + +profiles : Username -> Endpoint +profiles uname = + url [ "profiles", Username.toString uname ] [] + + +feed : List QueryParameter -> Endpoint +feed params = + url [ "articles", "feed" ] params + + +tags : Endpoint +tags = + url [ "tags" ] [] diff --git a/example-0.19/src/Article.elm b/example-0.19/src/Article.elm new file mode 100644 index 0000000..fc65faa --- /dev/null +++ b/example-0.19/src/Article.elm @@ -0,0 +1,274 @@ +module Article exposing (Article, Full, Preview, author, body, favorite, favoriteButton, fetch, fromPreview, fullDecoder, mapAuthor, metadata, previewDecoder, slug, unfavorite, unfavoriteButton) + +{-| The interface to the Article data structure. + +This includes: + + - The Article type itself + - Ways to make HTTP requests to retrieve and modify articles + - Ways to access information about an article + - Converting between various types + +-} + +import Api exposing (Cred) +import Api.Endpoint as Endpoint +import Article.Body as Body exposing (Body) +import Article.Slug as Slug exposing (Slug) +import Article.Tag as Tag exposing (Tag) +import Author exposing (Author) +import Html exposing (Attribute, Html, i) +import Html.Attributes exposing (class) +import Html.Events exposing (stopPropagationOn) +import Http +import Iso8601 +import Json.Decode as Decode exposing (Decoder) +import Json.Decode.Pipeline exposing (custom, hardcoded, required) +import Json.Encode as Encode +import Markdown +import Profile exposing (Profile) +import Time +import Username as Username exposing (Username) +import Viewer exposing (Viewer) + + + +-- TYPES + + +{-| An article, optionally with an article body. + +To see the difference between { extraInfo : a } and { extraInfo : Maybe Body }, +consider the difference between the "view individual article" page (which +renders one article, including its body) and the "article feed" - +which displays multiple articles, but without bodies. + +This definition for `Article` means we can write: + +viewArticle : Article Full -> Html msg +viewFeed : List (Article Preview) -> Html msg + +This indicates that `viewArticle` requires an article _with a `body` present_, +wereas `viewFeed` accepts articles with no bodies. (We could also have written +it as `List (Article a)` to specify that feeds can accept either articles that +have `body` present or not. Either work, given that feeds do not attempt to +read the `body` field from articles.) + +This is an important distinction, because in Request.Article, the `feed` +function produces `List (Article Preview)` because the API does not return bodies. +Those articles are useful to the feed, but not to the individual article view. + +-} +type Article a + = Article Internals a + + +{-| Metadata about the article - its title, description, and so on. + +Importantly, this module's public API exposes a way to read this metadata, but +not to alter it. This is read-only information! + +If we find ourselves using any particular piece of metadata often, +for example `title`, we could expose a convenience function like this: + +Article.title : Article a -> String + +If you like, it's totally reasonable to expose a function like that for every one +of these fields! + +(Okay, to be completely honest, exposing one function per field is how I prefer +to do it, and that's how I originally wrote this module. However, I'm aware that +this code base has become a common reference point for beginners, and I think it +is _extremely important_ that slapping some "getters and setters" on a record +does not become a habit for anyone who is getting started with Elm. The whole +point of making the Article type opaque is to create guarantees through +_selectively choosing boundaries_ around it. If you aren't selective about +where those boundaries are, and instead expose a "getter and setter" for every +field in the record, the result is an API with no more guarantees than if you'd +exposed the entire record directly! It is so important to me that beginners not +fall into the terrible "getters and setters" trap that I've exposed this +Metadata record instead of exposing a single function for each of its fields, +as I did originally. This record is not a bad way to do it, by any means, +but if this seems at odds with - now you know why! +) + +-} +type alias Metadata = + { description : String + , title : String + , tags : List String + , createdAt : Time.Posix + , favorited : Bool + , favoritesCount : Int + } + + +type alias Internals = + { slug : Slug + , author : Author + , metadata : Metadata + } + + +type Preview + = Preview + + +type Full + = Full Body + + + +-- INFO + + +author : Article a -> Author +author (Article internals _) = + internals.author + + +metadata : Article a -> Metadata +metadata (Article internals _) = + internals.metadata + + +slug : Article a -> Slug +slug (Article internals _) = + internals.slug + + +body : Article Full -> Body +body (Article _ (Full extraInfo)) = + extraInfo + + + +-- TRANSFORM + + +{-| This is the only way you can transform an existing article: +you can change its author (e.g. to follow or unfollow them). +All other article data necessarily comes from the server! + +We can tell this for sure by looking at the types of the exposed functions +in this module. + +-} +mapAuthor : (Author -> Author) -> Article a -> Article a +mapAuthor transform (Article info extras) = + Article { info | author = transform info.author } extras + + +fromPreview : Body -> Article Preview -> Article Full +fromPreview newBody (Article info Preview) = + Article info (Full newBody) + + + +-- SERIALIZATION + + +previewDecoder : Maybe Cred -> Decoder (Article Preview) +previewDecoder maybeCred = + Decode.succeed Article + |> custom (internalsDecoder maybeCred) + |> hardcoded Preview + + +fullDecoder : Maybe Cred -> Decoder (Article Full) +fullDecoder maybeCred = + Decode.succeed Article + |> custom (internalsDecoder maybeCred) + |> required "body" (Decode.map Full Body.decoder) + + +internalsDecoder : Maybe Cred -> Decoder Internals +internalsDecoder maybeCred = + Decode.succeed Internals + |> required "slug" Slug.decoder + |> required "author" (Author.decoder maybeCred) + |> custom metadataDecoder + + +metadataDecoder : Decoder Metadata +metadataDecoder = + Decode.succeed Metadata + |> required "description" (Decode.map (Maybe.withDefault "") (Decode.nullable Decode.string)) + |> required "title" Decode.string + |> required "tagList" (Decode.list Decode.string) + |> required "createdAt" Iso8601.decoder + |> required "favorited" Decode.bool + |> required "favoritesCount" Decode.int + + + +-- SINGLE + + +fetch : Maybe Cred -> Slug -> Http.Request (Article Full) +fetch maybeCred articleSlug = + Decode.field "article" (fullDecoder maybeCred) + |> Api.get (Endpoint.article articleSlug) maybeCred + + + +-- FAVORITE + + +favorite : Slug -> Cred -> Http.Request (Article Preview) +favorite articleSlug cred = + Api.post (Endpoint.favorite articleSlug) (Just cred) Http.emptyBody (faveDecoder cred) + + +unfavorite : Slug -> Cred -> Http.Request (Article Preview) +unfavorite articleSlug cred = + Api.delete (Endpoint.favorite articleSlug) cred Http.emptyBody (faveDecoder cred) + + +faveDecoder : Cred -> Decoder (Article Preview) +faveDecoder cred = + Decode.field "article" (previewDecoder (Just cred)) + + +{-| This is a "build your own element" API. + +You pass it some configuration, followed by a `List (Attribute msg)` and a +`List (Html msg)`, just like any standard Html element. + +-} +favoriteButton : + Cred + -> msg + -> List (Attribute msg) + -> List (Html msg) + -> Html msg +favoriteButton _ msg attrs kids = + toggleFavoriteButton "btn btn-sm btn-outline-primary" msg attrs kids + + +unfavoriteButton : + Cred + -> msg + -> List (Attribute msg) + -> List (Html msg) + -> Html msg +unfavoriteButton _ msg attrs kids = + toggleFavoriteButton "btn btn-sm btn-primary" msg attrs kids + + +toggleFavoriteButton : + String + -> msg + -> List (Attribute msg) + -> List (Html msg) + -> Html msg +toggleFavoriteButton classStr msg attrs kids = + Html.button + (class classStr :: onClickStopPropagation msg :: attrs) + (i [ class "ion-heart" ] [] :: kids) + + +onClickStopPropagation : msg -> Attribute msg +onClickStopPropagation msg = + stopPropagationOn "click" + (Decode.succeed ( msg, True )) diff --git a/example-0.19/src/Article/Body.elm b/example-0.19/src/Article/Body.elm new file mode 100644 index 0000000..b1c55f1 --- /dev/null +++ b/example-0.19/src/Article/Body.elm @@ -0,0 +1,38 @@ +module Article.Body exposing (Body, MarkdownString, decoder, toHtml, toMarkdownString) + +import Html exposing (Attribute, Html) +import Json.Decode as Decode exposing (Decoder) +import Markdown + + + +-- TYPES + + +type Body + = Body MarkdownString + + +{-| Internal use only. I want to remind myself that the string inside Body contains markdown. +-} +type alias MarkdownString = + String + + + +-- CONVERSIONS + + +toHtml : Body -> List (Attribute msg) -> Html msg +toHtml (Body markdown) attributes = + Markdown.toHtml attributes markdown + + +toMarkdownString : Body -> MarkdownString +toMarkdownString (Body markdown) = + markdown + + +decoder : Decoder Body +decoder = + Decode.map Body Decode.string diff --git a/example-0.19/src/Article/Comment.elm b/example-0.19/src/Article/Comment.elm new file mode 100644 index 0000000..301799d --- /dev/null +++ b/example-0.19/src/Article/Comment.elm @@ -0,0 +1,108 @@ +module Article.Comment exposing (Comment, author, body, createdAt, delete, id, list, post) + +import Api exposing (Cred) +import Api.Endpoint as Endpoint +import Article exposing (Article) +import Article.Slug as Slug exposing (Slug) +import Author exposing (Author) +import CommentId exposing (CommentId) +import Http +import Iso8601 +import Json.Decode as Decode exposing (Decoder) +import Json.Decode.Pipeline exposing (custom, required) +import Json.Encode as Encode exposing (Value) +import Profile exposing (Profile) +import Time + + + +-- TYPES + + +type Comment + = Comment Internals + + +type alias Internals = + { id : CommentId + , body : String + , createdAt : Time.Posix + , author : Author + } + + + +-- INFO + + +id : Comment -> CommentId +id (Comment comment) = + comment.id + + +body : Comment -> String +body (Comment comment) = + comment.body + + +createdAt : Comment -> Time.Posix +createdAt (Comment comment) = + comment.createdAt + + +author : Comment -> Author +author (Comment comment) = + comment.author + + + +-- LIST + + +list : Maybe Cred -> Slug -> Http.Request (List Comment) +list maybeCred articleSlug = + Decode.field "comments" (Decode.list (decoder maybeCred)) + |> Api.get (Endpoint.comments articleSlug) maybeCred + + + +-- POST + + +post : Slug -> String -> Cred -> Http.Request Comment +post articleSlug commentBody cred = + let + bod = + encodeCommentBody commentBody + |> Http.jsonBody + in + Decode.field "comment" (decoder (Just cred)) + |> Api.post (Endpoint.comments articleSlug) (Just cred) bod + + +encodeCommentBody : String -> Value +encodeCommentBody str = + Encode.object [ ( "comment", Encode.object [ ( "body", Encode.string str ) ] ) ] + + + +-- DELETE + + +delete : Slug -> CommentId -> Cred -> Http.Request () +delete articleSlug commentId cred = + Api.delete (Endpoint.comment articleSlug commentId) cred Http.emptyBody (Decode.succeed ()) + + + +-- SERIALIZATION + + +decoder : Maybe Cred -> Decoder Comment +decoder maybeCred = + Decode.succeed Internals + |> required "id" CommentId.decoder + |> required "body" Decode.string + |> required "createdAt" Iso8601.decoder + |> required "author" (Author.decoder maybeCred) + |> Decode.map Comment diff --git a/example-0.19/src/Article/Feed.elm b/example-0.19/src/Article/Feed.elm new file mode 100644 index 0000000..8e4f4bd --- /dev/null +++ b/example-0.19/src/Article/Feed.elm @@ -0,0 +1,279 @@ +module Article.Feed exposing (Model, Msg, decoder, init, update, viewArticles, viewPagination, viewTabs) + +import Api exposing (Cred) +import Article exposing (Article, Preview) +import Article.Slug as ArticleSlug exposing (Slug) +import Article.Tag as Tag exposing (Tag) +import Author +import Avatar exposing (Avatar) +import Html exposing (..) +import Html.Attributes exposing (attribute, class, classList, href, id, placeholder, src) +import Html.Events exposing (onClick) +import Http +import Json.Decode as Decode exposing (Decoder) +import Json.Decode.Pipeline exposing (required) +import Page +import PaginatedList exposing (PaginatedList) +import Profile +import Route exposing (Route) +import Session exposing (Session) +import Task exposing (Task) +import Time +import Timestamp +import Url exposing (Url) +import Username exposing (Username) + + +{-| NOTE: This module has its own Model, view, and update. This is not normal! +If you find yourself doing this often, please watch + +This is the reusable Article Feed that appears on both the Home page as well as +on the Profile page. There's a lot of logic here, so it's more convenient to use +the heavyweight approach of giving this its own Model, view, and update. + +This means callers must use Html.map and Cmd.map to use this thing, but in +this case that's totally worth it because of the amount of logic wrapped up +in this thing. + +For every other reusable view in this application, this API would be totally +overkill, so we use simpler APIs instead. + +-} + + + +-- MODEL + + +type Model + = Model Internals + + +{-| This should not be exposed! We want to benefit from the guarantee that only +this module can create or alter this model. This way if it ever ends up in +a surprising state, we know exactly where to look: this module. +-} +type alias Internals = + { session : Session + , errors : List String + , articles : PaginatedList (Article Preview) + , isLoading : Bool + } + + +init : Session -> PaginatedList (Article Preview) -> Model +init session articles = + Model + { session = session + , errors = [] + , articles = articles + , isLoading = False + } + + + +-- VIEW + + +viewArticles : Time.Zone -> Model -> List (Html Msg) +viewArticles timeZone (Model { articles, session, errors }) = + let + maybeCred = + Session.cred session + + articlesHtml = + PaginatedList.values articles + |> List.map (viewPreview maybeCred timeZone) + in + Page.viewErrors ClickedDismissErrors errors :: articlesHtml + + +viewPreview : Maybe Cred -> Time.Zone -> Article Preview -> Html Msg +viewPreview maybeCred timeZone article = + let + slug = + Article.slug article + + { title, description, createdAt } = + Article.metadata article + + author = + Article.author article + + profile = + Author.profile author + + username = + Author.username author + + faveButton = + case maybeCred of + Just cred -> + let + { favoritesCount, favorited } = + Article.metadata article + + viewButton = + if favorited then + Article.unfavoriteButton cred (ClickedUnfavorite cred slug) + + else + Article.favoriteButton cred (ClickedFavorite cred slug) + in + viewButton [ class "pull-xs-right" ] + [ text (" " ++ String.fromInt favoritesCount) ] + + Nothing -> + text "" + in + div [ class "article-preview" ] + [ div [ class "article-meta" ] + [ a [ Route.href (Route.Profile username) ] + [ img [ Avatar.src (Profile.avatar profile) ] [] ] + , div [ class "info" ] + [ Author.view username + , Timestamp.view timeZone createdAt + ] + , faveButton + ] + , a [ class "preview-link", Route.href (Route.Article (Article.slug article)) ] + [ h1 [] [ text title ] + , p [] [ text description ] + , span [] [ text "Read more..." ] + , ul [ class "tag-list" ] + (List.map viewTag (Article.metadata article).tags) + ] + ] + + +viewTabs : + List ( String, msg ) + -> ( String, msg ) + -> List ( String, msg ) + -> Html msg +viewTabs before selected after = + ul [ class "nav nav-pills outline-active" ] <| + List.concat + [ List.map (viewTab []) before + , [ viewTab [ class "active" ] selected ] + , List.map (viewTab []) after + ] + + +viewTab : List (Attribute msg) -> ( String, msg ) -> Html msg +viewTab attrs ( name, msg ) = + li [ class "nav-item" ] + [ -- Note: The RealWorld CSS requires an href to work properly. + a (class "nav-link" :: onClick msg :: href "" :: attrs) + [ text name ] + ] + + +viewPagination : (Int -> msg) -> Int -> Model -> Html msg +viewPagination toMsg page (Model feed) = + let + viewPageLink currentPage = + pageLink toMsg currentPage (currentPage == page) + + totalPages = + PaginatedList.total feed.articles + in + if totalPages > 1 then + List.range 1 totalPages + |> List.map viewPageLink + |> ul [ class "pagination" ] + + else + Html.text "" + + +pageLink : (Int -> msg) -> Int -> Bool -> Html msg +pageLink toMsg targetPage isActive = + li [ classList [ ( "page-item", True ), ( "active", isActive ) ] ] + [ a + [ class "page-link" + , onClick (toMsg targetPage) + + -- The RealWorld CSS requires an href to work properly. + , href "" + ] + [ text (String.fromInt targetPage) ] + ] + + +viewTag : String -> Html msg +viewTag tagName = + li [ class "tag-default tag-pill tag-outline" ] [ text tagName ] + + + +-- UPDATE + + +type Msg + = ClickedDismissErrors + | ClickedFavorite Cred Slug + | ClickedUnfavorite Cred Slug + | CompletedFavorite (Result Http.Error (Article Preview)) + + +update : Maybe Cred -> Msg -> Model -> ( Model, Cmd Msg ) +update maybeCred msg (Model model) = + case msg of + ClickedDismissErrors -> + ( Model { model | errors = [] }, Cmd.none ) + + ClickedFavorite cred slug -> + fave Article.favorite cred slug model + + ClickedUnfavorite cred slug -> + fave Article.unfavorite cred slug model + + CompletedFavorite (Ok article) -> + ( Model { model | articles = PaginatedList.map (replaceArticle article) model.articles } + , Cmd.none + ) + + CompletedFavorite (Err error) -> + ( Model { model | errors = Api.addServerError model.errors } + , Cmd.none + ) + + +replaceArticle : Article a -> Article a -> Article a +replaceArticle newArticle oldArticle = + if Article.slug newArticle == Article.slug oldArticle then + newArticle + + else + oldArticle + + + +-- SERIALIZATION + + +decoder : Maybe Cred -> Int -> Decoder (PaginatedList (Article Preview)) +decoder maybeCred resultsPerPage = + Decode.succeed PaginatedList.fromList + |> required "articlesCount" (pageCountDecoder resultsPerPage) + |> required "articles" (Decode.list (Article.previewDecoder maybeCred)) + + +pageCountDecoder : Int -> Decoder Int +pageCountDecoder resultsPerPage = + Decode.int + |> Decode.map (\total -> ceiling (toFloat total / toFloat resultsPerPage)) + + + +-- INTERNAL + + +fave : (Slug -> Cred -> Http.Request (Article Preview)) -> Cred -> Slug -> Internals -> ( Model, Cmd Msg ) +fave toRequest cred slug model = + ( Model model + , toRequest slug cred + |> Http.toTask + |> Task.attempt CompletedFavorite + ) diff --git a/example-0.19/src/Article/Slug.elm b/example-0.19/src/Article/Slug.elm new file mode 100644 index 0000000..723f5f9 --- /dev/null +++ b/example-0.19/src/Article/Slug.elm @@ -0,0 +1,35 @@ +module Article.Slug exposing (Slug, decoder, toString, urlParser) + +import Json.Decode as Decode exposing (Decoder) +import Url.Parser exposing (Parser) + + + +-- TYPES + + +type Slug + = Slug String + + + +-- CREATE + + +urlParser : Parser (Slug -> a) a +urlParser = + Url.Parser.custom "SLUG" (\str -> Just (Slug str)) + + +decoder : Decoder Slug +decoder = + Decode.map Slug Decode.string + + + +-- TRANSFORM + + +toString : Slug -> String +toString (Slug str) = + str diff --git a/example-0.19/src/Article/Tag.elm b/example-0.19/src/Article/Tag.elm new file mode 100644 index 0000000..2d2c713 --- /dev/null +++ b/example-0.19/src/Article/Tag.elm @@ -0,0 +1,42 @@ +module Article.Tag exposing (Tag, list, toString) + +import Api exposing (Cred) +import Api.Endpoint as Endpoint +import Http +import Json.Decode as Decode exposing (Decoder) + + + +-- TYPES + + +type Tag + = Tag String + + + +-- TRANSFORM + + +toString : Tag -> String +toString (Tag slug) = + slug + + + +-- LIST + + +list : Http.Request (List Tag) +list = + Decode.field "tags" (Decode.list decoder) + |> Api.get Endpoint.tags Nothing + + + +-- SERIALIZATION + + +decoder : Decoder Tag +decoder = + Decode.map Tag Decode.string diff --git a/example-0.19/src/Asset.elm b/example-0.19/src/Asset.elm new file mode 100644 index 0000000..72b396d --- /dev/null +++ b/example-0.19/src/Asset.elm @@ -0,0 +1,48 @@ +module Asset exposing (Image, defaultAvatar, error, loading, src) + +{-| Assets, such as images, videos, and audio. (We only have images for now.) + +We should never expose asset URLs directly; this module should be in charge of +all of them. One source of truth! + +-} + +import Html exposing (Attribute, Html) +import Html.Attributes as Attr + + +type Image + = Image String + + + +-- IMAGES + + +error : Image +error = + image "error.jpg" + + +loading : Image +loading = + image "loading.svg" + + +defaultAvatar : Image +defaultAvatar = + image "smiley-cyrus.jpg" + + +image : String -> Image +image filename = + Image ("/assets/images/" ++ filename) + + + +-- USING IMAGES + + +src : Image -> Attribute msg +src (Image url) = + Attr.src url diff --git a/example-0.19/src/Author.elm b/example-0.19/src/Author.elm new file mode 100644 index 0000000..5a19fd9 --- /dev/null +++ b/example-0.19/src/Author.elm @@ -0,0 +1,234 @@ +module Author exposing (Author(..), FollowedAuthor, UnfollowedAuthor, decoder, fetch, follow, followButton, profile, requestFollow, requestUnfollow, unfollow, unfollowButton, username, view) + +{-| The author of an Article. It includes a Profile. + +I designed this to make sure the compiler would help me keep these three +possibilities straight when displaying follow buttons and such: + + - I'm following this author. + - I'm not following this author. + - I _can't_ follow this author, because it's me! + +To do this, I defined `Author` a custom type with three variants, one for each +of those possibilities. + +I also made separate types for FollowedAuthor and UnfollowedAuthor. +They are custom type wrappers around Profile, and thier sole purpose is to +help me keep track of which operations are supported. + +For example, consider these functions: + +requestFollow : UnfollowedAuthor -> Cred -> Http.Request Author +requestUnfollow : FollowedAuthor -> Cred -> Http.Request Author + +These types help the compiler prevent several mistakes: + + - Displaying a Follow button for an author the user already follows. + - Displaying an Unfollow button for an author the user already doesn't follow. + - Displaying either button when the author is ourself. + +There are still ways we could mess things up (e.g. make a button that calls Author.unfollow when you click it, but which displays "Follow" to the user) - but this rules out a bunch of potential problems. + +-} + +import Api exposing (Cred) +import Api.Endpoint as Endpoint +import Html exposing (Html, a, i, text) +import Html.Attributes exposing (attribute, class, href, id, placeholder) +import Html.Events exposing (onClick) +import Http +import Json.Decode as Decode exposing (Decoder) +import Json.Decode.Pipeline exposing (custom, optional, required) +import Json.Encode as Encode exposing (Value) +import Profile exposing (Profile) +import Route exposing (Route) +import Username exposing (Username) +import Viewer exposing (Viewer) + + +{-| An author - either the current user, another user we're following, or +another user we aren't following. + +These distinctions matter because we can only perform "follow" requests for +users we aren't following, we can only perform "unfollow" requests for +users we _are_ following, and we can't perform either for ourselves. + +-} +type Author + = IsFollowing FollowedAuthor + | IsNotFollowing UnfollowedAuthor + | IsViewer Cred Profile + + +{-| An author we're following. +-} +type FollowedAuthor + = FollowedAuthor Username Profile + + +{-| An author we're not following. +-} +type UnfollowedAuthor + = UnfollowedAuthor Username Profile + + +{-| Return an Author's username. +-} +username : Author -> Username +username author = + case author of + IsViewer cred _ -> + Api.username cred + + IsFollowing (FollowedAuthor val _) -> + val + + IsNotFollowing (UnfollowedAuthor val _) -> + val + + +{-| Return an Author's profile. +-} +profile : Author -> Profile +profile author = + case author of + IsViewer _ val -> + val + + IsFollowing (FollowedAuthor _ val) -> + val + + IsNotFollowing (UnfollowedAuthor _ val) -> + val + + + +-- FETCH + + +fetch : Username -> Maybe Cred -> Http.Request Author +fetch uname maybeCred = + Decode.field "profile" (decoder maybeCred) + |> Api.get (Endpoint.profiles uname) maybeCred + + + +-- FOLLOWING + + +follow : UnfollowedAuthor -> FollowedAuthor +follow (UnfollowedAuthor uname prof) = + FollowedAuthor uname prof + + +unfollow : FollowedAuthor -> UnfollowedAuthor +unfollow (FollowedAuthor uname prof) = + UnfollowedAuthor uname prof + + +requestFollow : UnfollowedAuthor -> Cred -> Http.Request Author +requestFollow (UnfollowedAuthor uname _) cred = + Api.post (Endpoint.follow uname) (Just cred) Http.emptyBody (followDecoder cred) + + +requestUnfollow : FollowedAuthor -> Cred -> Http.Request Author +requestUnfollow (FollowedAuthor uname _) cred = + Api.delete (Endpoint.follow uname) + cred + Http.emptyBody + (followDecoder cred) + + +followDecoder : Cred -> Decoder Author +followDecoder cred = + Decode.field "profile" (decoder (Just cred)) + + +followButton : + (Cred -> UnfollowedAuthor -> msg) + -> Cred + -> UnfollowedAuthor + -> Html msg +followButton toMsg cred ((UnfollowedAuthor uname _) as author) = + toggleFollowButton "Follow" + [ "btn-outline-secondary" ] + (toMsg cred author) + uname + + +unfollowButton : + (Cred -> FollowedAuthor -> msg) + -> Cred + -> FollowedAuthor + -> Html msg +unfollowButton toMsg cred ((FollowedAuthor uname _) as author) = + toggleFollowButton "Unfollow" + [ "btn-secondary" ] + (toMsg cred author) + uname + + +toggleFollowButton : String -> List String -> msg -> Username -> Html msg +toggleFollowButton txt extraClasses msgWhenClicked uname = + let + classStr = + "btn btn-sm " ++ String.join " " extraClasses ++ " action-btn" + + caption = + "\u{00A0}" ++ txt ++ " " ++ Username.toString uname + in + Html.button [ class classStr, onClick msgWhenClicked ] + [ i [ class "ion-plus-round" ] [] + , text caption + ] + + + +-- SERIALIZATION + + +decoder : Maybe Cred -> Decoder Author +decoder maybeCred = + Decode.succeed Tuple.pair + |> custom Profile.decoder + |> required "username" Username.decoder + |> Decode.andThen (decodeFromPair maybeCred) + + +decodeFromPair : Maybe Cred -> ( Profile, Username ) -> Decoder Author +decodeFromPair maybeCred ( prof, uname ) = + case maybeCred of + Nothing -> + -- If you're logged out, you can't be following anyone! + Decode.succeed (IsNotFollowing (UnfollowedAuthor uname prof)) + + Just cred -> + if uname == Api.username cred then + Decode.succeed (IsViewer cred prof) + + else + nonViewerDecoder prof uname + + +nonViewerDecoder : Profile -> Username -> Decoder Author +nonViewerDecoder prof uname = + Decode.succeed (authorFromFollowing prof uname) + |> optional "following" Decode.bool False + + +authorFromFollowing : Profile -> Username -> Bool -> Author +authorFromFollowing prof uname isFollowing = + if isFollowing then + IsFollowing (FollowedAuthor uname prof) + + else + IsNotFollowing (UnfollowedAuthor uname prof) + + +{-| View an author. We basically render their username and a link to their +profile, and that's it. +-} +view : Username -> Html msg +view uname = + a [ class "author", Route.href (Route.Profile uname) ] + [ Username.toHtml uname ] diff --git a/example-0.19/src/Avatar.elm b/example-0.19/src/Avatar.elm new file mode 100644 index 0000000..7ecafb3 --- /dev/null +++ b/example-0.19/src/Avatar.elm @@ -0,0 +1,56 @@ +module Avatar exposing (Avatar, decoder, encode, src, toMaybeString) + +import Asset +import Html exposing (Attribute) +import Html.Attributes +import Json.Decode as Decode exposing (Decoder) +import Json.Encode as Encode exposing (Value) + + + +-- TYPES + + +type Avatar + = Avatar (Maybe String) + + + +-- CREATE + + +decoder : Decoder Avatar +decoder = + Decode.map Avatar (Decode.nullable Decode.string) + + + +-- TRANSFORM + + +encode : Avatar -> Value +encode (Avatar maybeUrl) = + case maybeUrl of + Just url -> + Encode.string url + + Nothing -> + Encode.null + + +src : Avatar -> Attribute msg +src (Avatar maybeUrl) = + case maybeUrl of + Nothing -> + Asset.src Asset.defaultAvatar + + Just "" -> + Asset.src Asset.defaultAvatar + + Just url -> + Html.Attributes.src url + + +toMaybeString : Avatar -> Maybe String +toMaybeString (Avatar maybeUrl) = + maybeUrl diff --git a/example-0.19/src/CommentId.elm b/example-0.19/src/CommentId.elm new file mode 100644 index 0000000..f136e1b --- /dev/null +++ b/example-0.19/src/CommentId.elm @@ -0,0 +1,29 @@ +module CommentId exposing (CommentId, decoder, toString) + +import Json.Decode as Decode exposing (Decoder) + + + +-- TYPES + + +type CommentId + = CommentId Int + + + +-- CREATE + + +decoder : Decoder CommentId +decoder = + Decode.map CommentId Decode.int + + + +-- TRANSFORM + + +toString : CommentId -> String +toString (CommentId id) = + String.fromInt id diff --git a/example-0.19/src/Email.elm b/example-0.19/src/Email.elm new file mode 100644 index 0000000..f696c01 --- /dev/null +++ b/example-0.19/src/Email.elm @@ -0,0 +1,45 @@ +module Email exposing (Email, decoder, encode, toString) + +import Json.Decode as Decode exposing (Decoder) +import Json.Encode as Encode exposing (Value) + + +{-| An email address. + +Having this as a custom type that's separate from String makes certain +mistakes impossible. Consider this function: + +updateEmailAddress : Email -> String -> Http.Request +updateEmailAddress email password = ... + +(The server needs your password to confirm that you should be allowed +to update the email address.) + +Because Email is not a type alias for String, but is instead a separate +custom type, it is now impossible to mix up the argument order of the +email and the password. If we do, it won't compile! + +If Email were instead defined as `type alias Email = String`, we could +call updateEmailAddress password email and it would compile (and never +work properly). + +This way, we make it impossible for a bug like that to compile! + +-} +type Email + = Email String + + +toString : Email -> String +toString (Email str) = + str + + +encode : Email -> Value +encode (Email str) = + Encode.string str + + +decoder : Decoder Email +decoder = + Decode.map Email Decode.string diff --git a/example-0.19/src/Loading.elm b/example-0.19/src/Loading.elm new file mode 100644 index 0000000..2eba301 --- /dev/null +++ b/example-0.19/src/Loading.elm @@ -0,0 +1,31 @@ +module Loading exposing (error, icon, slowThreshold) + +{-| A loading spinner icon. +-} + +import Asset +import Html exposing (Attribute, Html) +import Html.Attributes exposing (alt, height, src, width) +import Process +import Task exposing (Task) + + +icon : Html msg +icon = + Html.img + [ Asset.src Asset.loading + , width 64 + , height 64 + , alt "Loading..." + ] + [] + + +error : String -> Html msg +error str = + Html.text ("Error loading " ++ str ++ ".") + + +slowThreshold : Task x () +slowThreshold = + Process.sleep 500 diff --git a/example-0.19/src/Log.elm b/example-0.19/src/Log.elm new file mode 100644 index 0000000..fe6111e --- /dev/null +++ b/example-0.19/src/Log.elm @@ -0,0 +1,20 @@ +module Log exposing (error) + +{-| This is a placeholder API for how we might do logging through +some service like (which is what we use at work). + +Whenever you see Log.error used in this code base, it means +"Something unexpected happened. This is where we would log an +error to our server with some diagnostic info so we could investigate +what happened later." + +(Since this is outside the scope of the RealWorld spec, and is only +a placeholder anyway, I didn't bother making this function accept actual +diagnostic info, authentication tokens, etc.) + +-} + + +error : Cmd msg +error = + Cmd.none diff --git a/example-0.19/src/Main.elm b/example-0.19/src/Main.elm new file mode 100644 index 0000000..8930187 --- /dev/null +++ b/example-0.19/src/Main.elm @@ -0,0 +1,336 @@ +module Main exposing (main) + +import Api exposing (Cred) +import Article.Slug exposing (Slug) +import Avatar exposing (Avatar) +import Browser exposing (Document) +import Browser.Navigation as Nav +import Html exposing (..) +import Json.Decode as Decode exposing (Value) +import Page exposing (Page) +import Page.Article as Article +import Page.Article.Editor as Editor +import Page.Blank as Blank +import Page.Home as Home +import Page.Login as Login +import Page.NotFound as NotFound +import Page.Profile as Profile +import Page.Register as Register +import Page.Settings as Settings +import Route exposing (Route) +import Session exposing (Session) +import Task +import Time +import Url exposing (Url) +import Username exposing (Username) +import Viewer exposing (Viewer) + + + +-- NOTE: Based on discussions around how asset management features +-- like code splitting and lazy loading have been shaping up, it's possible +-- that most of this file may become unnecessary in a future release of Elm. +-- Avoid putting things in this module unless there is no alternative! +-- See https://discourse.elm-lang.org/t/elm-spa-in-0-19/1800/2 for more. + + +type Model + = Redirect Session + | NotFound Session + | Home Home.Model + | Settings Settings.Model + | Login Login.Model + | Register Register.Model + | Profile Username Profile.Model + | Article Article.Model + | Editor (Maybe Slug) Editor.Model + + + +-- MODEL + + +init : Maybe Viewer -> Url -> Nav.Key -> ( Model, Cmd Msg ) +init maybeViewer url navKey = + changeRouteTo (Route.fromUrl url) + (Redirect (Session.fromViewer navKey maybeViewer)) + + + +-- VIEW + + +view : Model -> Document Msg +view model = + let + viewPage page toMsg config = + let + { title, body } = + Page.view (Session.viewer (toSession model)) page config + in + { title = title + , body = List.map (Html.map toMsg) body + } + in + case model of + Redirect _ -> + viewPage Page.Other (\_ -> Ignored) Blank.view + + NotFound _ -> + viewPage Page.Other (\_ -> Ignored) NotFound.view + + Settings settings -> + viewPage Page.Other GotSettingsMsg (Settings.view settings) + + Home home -> + viewPage Page.Home GotHomeMsg (Home.view home) + + Login login -> + viewPage Page.Other GotLoginMsg (Login.view login) + + Register register -> + viewPage Page.Other GotRegisterMsg (Register.view register) + + Profile username profile -> + viewPage (Page.Profile username) GotProfileMsg (Profile.view profile) + + Article article -> + viewPage Page.Other GotArticleMsg (Article.view article) + + Editor Nothing editor -> + viewPage Page.NewArticle GotEditorMsg (Editor.view editor) + + Editor (Just _) editor -> + viewPage Page.Other GotEditorMsg (Editor.view editor) + + + +-- UPDATE + + +type Msg + = Ignored + | ChangedRoute (Maybe Route) + | ChangedUrl Url + | ClickedLink Browser.UrlRequest + | GotHomeMsg Home.Msg + | GotSettingsMsg Settings.Msg + | GotLoginMsg Login.Msg + | GotRegisterMsg Register.Msg + | GotProfileMsg Profile.Msg + | GotArticleMsg Article.Msg + | GotEditorMsg Editor.Msg + | GotSession Session + + +toSession : Model -> Session +toSession page = + case page of + Redirect session -> + session + + NotFound session -> + session + + Home home -> + Home.toSession home + + Settings settings -> + Settings.toSession settings + + Login login -> + Login.toSession login + + Register register -> + Register.toSession register + + Profile _ profile -> + Profile.toSession profile + + Article article -> + Article.toSession article + + Editor _ editor -> + Editor.toSession editor + + +changeRouteTo : Maybe Route -> Model -> ( Model, Cmd Msg ) +changeRouteTo maybeRoute model = + let + session = + toSession model + in + case maybeRoute of + Nothing -> + ( NotFound session, Cmd.none ) + + Just Route.Root -> + ( model, Route.replaceUrl (Session.navKey session) Route.Home ) + + Just Route.Logout -> + ( model, Api.logout ) + + Just Route.NewArticle -> + Editor.initNew session + |> updateWith (Editor Nothing) GotEditorMsg model + + Just (Route.EditArticle slug) -> + Editor.initEdit session slug + |> updateWith (Editor (Just slug)) GotEditorMsg model + + Just Route.Settings -> + Settings.init session + |> updateWith Settings GotSettingsMsg model + + Just Route.Home -> + Home.init session + |> updateWith Home GotHomeMsg model + + Just Route.Login -> + Login.init session + |> updateWith Login GotLoginMsg model + + Just Route.Register -> + Register.init session + |> updateWith Register GotRegisterMsg model + + Just (Route.Profile username) -> + Profile.init session username + |> updateWith (Profile username) GotProfileMsg model + + Just (Route.Article slug) -> + Article.init session slug + |> updateWith Article GotArticleMsg model + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case ( msg, model ) of + ( Ignored, _ ) -> + ( model, Cmd.none ) + + ( ClickedLink urlRequest, _ ) -> + case urlRequest of + Browser.Internal url -> + case url.fragment of + Nothing -> + -- If we got a link that didn't include a fragment, + -- it's from one of those (href "") attributes that + -- we have to include to make the RealWorld CSS work. + -- + -- In an application doing path routing instead of + -- fragment-based routing, this entire + -- `case url.fragment of` expression this comment + -- is inside would be unnecessary. + ( model, Cmd.none ) + + Just _ -> + ( model + , Nav.pushUrl (Session.navKey (toSession model)) (Url.toString url) + ) + + Browser.External href -> + ( model + , Nav.load href + ) + + ( ChangedUrl url, _ ) -> + changeRouteTo (Route.fromUrl url) model + + ( ChangedRoute route, _ ) -> + changeRouteTo route model + + ( GotSettingsMsg subMsg, Settings settings ) -> + Settings.update subMsg settings + |> updateWith Settings GotSettingsMsg model + + ( GotLoginMsg subMsg, Login login ) -> + Login.update subMsg login + |> updateWith Login GotLoginMsg model + + ( GotRegisterMsg subMsg, Register register ) -> + Register.update subMsg register + |> updateWith Register GotRegisterMsg model + + ( GotHomeMsg subMsg, Home home ) -> + Home.update subMsg home + |> updateWith Home GotHomeMsg model + + ( GotProfileMsg subMsg, Profile username profile ) -> + Profile.update subMsg profile + |> updateWith (Profile username) GotProfileMsg model + + ( GotArticleMsg subMsg, Article article ) -> + Article.update subMsg article + |> updateWith Article GotArticleMsg model + + ( GotEditorMsg subMsg, Editor slug editor ) -> + Editor.update subMsg editor + |> updateWith (Editor slug) GotEditorMsg model + + ( GotSession session, Redirect _ ) -> + ( Redirect session + , Route.replaceUrl (Session.navKey session) Route.Home + ) + + ( _, _ ) -> + -- Disregard messages that arrived for the wrong page. + ( model, Cmd.none ) + + +updateWith : (subModel -> Model) -> (subMsg -> Msg) -> Model -> ( subModel, Cmd subMsg ) -> ( Model, Cmd Msg ) +updateWith toModel toMsg model ( subModel, subCmd ) = + ( toModel subModel + , Cmd.map toMsg subCmd + ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + case model of + NotFound _ -> + Sub.none + + Redirect _ -> + Session.changes GotSession (Session.navKey (toSession model)) + + Settings settings -> + Sub.map GotSettingsMsg (Settings.subscriptions settings) + + Home home -> + Sub.map GotHomeMsg (Home.subscriptions home) + + Login login -> + Sub.map GotLoginMsg (Login.subscriptions login) + + Register register -> + Sub.map GotRegisterMsg (Register.subscriptions register) + + Profile _ profile -> + Sub.map GotProfileMsg (Profile.subscriptions profile) + + Article article -> + Sub.map GotArticleMsg (Article.subscriptions article) + + Editor _ editor -> + Sub.map GotEditorMsg (Editor.subscriptions editor) + + + +-- MAIN + + +main : Program Value Model Msg +main = + Api.application Viewer.decoder + { init = init + , onUrlChange = ChangedUrl + , onUrlRequest = ClickedLink + , subscriptions = subscriptions + , update = update + , view = view + } diff --git a/example-0.19/src/Page.elm b/example-0.19/src/Page.elm new file mode 100644 index 0000000..f1790bf --- /dev/null +++ b/example-0.19/src/Page.elm @@ -0,0 +1,156 @@ +module Page exposing (Page(..), view, viewErrors) + +import Api exposing (Cred) +import Avatar +import Browser exposing (Document) +import Html exposing (Html, a, button, div, footer, i, img, li, nav, p, span, text, ul) +import Html.Attributes exposing (class, classList, href, style) +import Html.Events exposing (onClick) +import Profile +import Route exposing (Route) +import Session exposing (Session) +import Username exposing (Username) +import Viewer exposing (Viewer) + + +{-| Determines which navbar link (if any) will be rendered as active. + +Note that we don't enumerate every page here, because the navbar doesn't +have links for every page. Anything that's not part of the navbar falls +under Other. + +-} +type Page + = Other + | Home + | Login + | Register + | Settings + | Profile Username + | NewArticle + + +{-| Take a page's Html and frames it with a header and footer. + +The caller provides the current user, so we can display in either +"signed in" (rendering username) or "signed out" mode. + +isLoading is for determining whether we should show a loading spinner +in the header. (This comes up during slow page transitions.) + +-} +view : Maybe Viewer -> Page -> { title : String, content : Html msg } -> Document msg +view maybeViewer page { title, content } = + { title = title ++ " - Conduit" + , body = viewHeader page maybeViewer :: content :: [ viewFooter ] + } + + +viewHeader : Page -> Maybe Viewer -> Html msg +viewHeader page maybeViewer = + nav [ class "navbar navbar-light" ] + [ div [ class "container" ] + [ a [ class "navbar-brand", Route.href Route.Home ] + [ text "conduit" ] + , ul [ class "nav navbar-nav pull-xs-right" ] <| + navbarLink page Route.Home [ text "Home" ] + :: viewMenu page maybeViewer + ] + ] + + +viewMenu : Page -> Maybe Viewer -> List (Html msg) +viewMenu page maybeViewer = + let + linkTo = + navbarLink page + in + case maybeViewer of + Just viewer -> + let + username = + Viewer.username viewer + + avatar = + Viewer.avatar viewer + in + [ linkTo Route.NewArticle [ i [ class "ion-compose" ] [], text "\u{00A0}New Post" ] + , linkTo Route.Settings [ i [ class "ion-gear-a" ] [], text "\u{00A0}Settings" ] + , linkTo + (Route.Profile username) + [ img [ class "user-pic", Avatar.src avatar ] [] + , Username.toHtml username + ] + , linkTo Route.Logout [ text "Sign out" ] + ] + + Nothing -> + [ linkTo Route.Login [ text "Sign in" ] + , linkTo Route.Register [ text "Sign up" ] + ] + + +viewFooter : Html msg +viewFooter = + footer [] + [ div [ class "container" ] + [ a [ class "logo-font", href "/" ] [ text "conduit" ] + , span [ class "attribution" ] + [ text "An interactive learning project from " + , a [ href "https://thinkster.io" ] [ text "Thinkster" ] + , text ". Code & design licensed under MIT." + ] + ] + ] + + +navbarLink : Page -> Route -> List (Html msg) -> Html msg +navbarLink page route linkContent = + li [ classList [ ( "nav-item", True ), ( "active", isActive page route ) ] ] + [ a [ class "nav-link", Route.href route ] linkContent ] + + +isActive : Page -> Route -> Bool +isActive page route = + case ( page, route ) of + ( Home, Route.Home ) -> + True + + ( Login, Route.Login ) -> + True + + ( Register, Route.Register ) -> + True + + ( Settings, Route.Settings ) -> + True + + ( Profile pageUsername, Route.Profile routeUsername ) -> + pageUsername == routeUsername + + ( NewArticle, Route.NewArticle ) -> + True + + _ -> + False + + +{-| Render dismissable errors. We use this all over the place! +-} +viewErrors : msg -> List String -> Html msg +viewErrors dismissErrors errors = + if List.isEmpty errors then + Html.text "" + + else + div + [ class "error-messages" + , style "position" "fixed" + , style "top" "0" + , style "background" "rgb(250, 250, 250)" + , style "padding" "20px" + , style "border" "1px solid" + ] + <| + List.map (\error -> p [] [ text error ]) errors + ++ [ button [ onClick dismissErrors ] [ text "Ok" ] ] diff --git a/example-0.19/src/Page/Article.elm b/example-0.19/src/Page/Article.elm new file mode 100644 index 0000000..1ef0d6e --- /dev/null +++ b/example-0.19/src/Page/Article.elm @@ -0,0 +1,586 @@ +module Page.Article exposing (Model, Msg, init, subscriptions, toSession, update, view) + +{-| Viewing an individual article. +-} + +import Api exposing (Cred) +import Api.Endpoint as Endpoint +import Article exposing (Article, Full, Preview) +import Article.Body exposing (Body) +import Article.Comment as Comment exposing (Comment) +import Article.Slug as Slug exposing (Slug) +import Author exposing (Author(..), FollowedAuthor, UnfollowedAuthor) +import Avatar +import Browser.Navigation as Nav +import CommentId exposing (CommentId) +import Html exposing (..) +import Html.Attributes exposing (attribute, class, disabled, href, id, placeholder, value) +import Html.Events exposing (onClick, onInput, onSubmit) +import Http +import Json.Decode as Decode +import Loading +import Log +import Page +import Profile exposing (Profile) +import Route +import Session exposing (Session) +import Task exposing (Task) +import Time +import Timestamp +import Username exposing (Username) +import Viewer exposing (Viewer) + + + +-- MODEL + + +type alias Model = + { session : Session + , timeZone : Time.Zone + , errors : List String + + -- Loaded independently from server + , comments : Status ( CommentText, List Comment ) + , article : Status (Article Full) + } + + +type Status a + = Loading + | LoadingSlowly + | Loaded a + | Failed + + +type CommentText + = Editing String + | Sending String + + +init : Session -> Slug -> ( Model, Cmd Msg ) +init session slug = + let + maybeCred = + Session.cred session + in + ( { session = session + , timeZone = Time.utc + , errors = [] + , comments = Loading + , article = Loading + } + , Cmd.batch + [ Article.fetch maybeCred slug + |> Http.send CompletedLoadArticle + , Comment.list maybeCred slug + |> Http.send CompletedLoadComments + , Task.perform GotTimeZone Time.here + , Task.perform (\_ -> PassedSlowLoadThreshold) Loading.slowThreshold + ] + ) + + + +-- VIEW + + +view : Model -> { title : String, content : Html Msg } +view model = + case model.article of + Loaded article -> + let + { title } = + Article.metadata article + + author = + Article.author article + + avatar = + Profile.avatar (Author.profile author) + + slug = + Article.slug article + + profile = + Author.profile author + + buttons = + case Session.cred model.session of + Just cred -> + viewButtons cred article author + + Nothing -> + [] + in + { title = title + , content = + div [ class "article-page" ] + [ div [ class "banner" ] + [ div [ class "container" ] + [ h1 [] [ text title ] + , div [ class "article-meta" ] <| + List.append + [ a [ Route.href (Route.Profile (Author.username author)) ] + [ img [ Avatar.src (Profile.avatar profile) ] [] ] + , div [ class "info" ] + [ Author.view (Author.username author) + , Timestamp.view model.timeZone (Article.metadata article).createdAt + ] + ] + buttons + , Page.viewErrors ClickedDismissErrors model.errors + ] + ] + , div [ class "container page" ] + [ div [ class "row article-content" ] + [ div [ class "col-md-12" ] + [ Article.Body.toHtml (Article.body article) [] ] + ] + , hr [] [] + , div [ class "article-actions" ] + [ div [ class "article-meta" ] <| + List.append + [ a [ Route.href (Route.Profile (Author.username author)) ] + [ img [ Avatar.src avatar ] [] ] + , div [ class "info" ] + [ Author.view (Author.username author) + , Timestamp.view model.timeZone (Article.metadata article).createdAt + ] + ] + buttons + ] + , div [ class "row" ] + [ div [ class "col-xs-12 col-md-8 offset-md-2" ] <| + -- Don't render the comments until the article has loaded! + case model.comments of + Loading -> + [] + + LoadingSlowly -> + [ Loading.icon ] + + Loaded ( commentText, comments ) -> + -- Don't let users add comments until they can + -- see the existing comments! Otherwise you + -- may be about to repeat something that's + -- already been said. + viewAddComment slug commentText (Session.viewer model.session) + :: List.map (viewComment model.timeZone slug) comments + + Failed -> + [ Loading.error "comments" ] + ] + ] + ] + } + + Loading -> + { title = "Article", content = text "" } + + LoadingSlowly -> + { title = "Article", content = Loading.icon } + + Failed -> + { title = "Article", content = Loading.error "article" } + + +viewAddComment : Slug -> CommentText -> Maybe Viewer -> Html Msg +viewAddComment slug commentText maybeViewer = + case maybeViewer of + Just viewer -> + let + avatar = + Viewer.avatar viewer + + cred = + Viewer.cred viewer + + ( commentStr, buttonAttrs ) = + case commentText of + Editing str -> + ( str, [] ) + + Sending str -> + ( str, [ disabled True ] ) + in + Html.form [ class "card comment-form", onSubmit (ClickedPostComment cred slug) ] + [ div [ class "card-block" ] + [ textarea + [ class "form-control" + , placeholder "Write a comment..." + , attribute "rows" "3" + , onInput EnteredCommentText + , value commentStr + ] + [] + ] + , div [ class "card-footer" ] + [ img [ class "comment-author-img", Avatar.src avatar ] [] + , button + (class "btn btn-sm btn-primary" :: buttonAttrs) + [ text "Post Comment" ] + ] + ] + + Nothing -> + p [] + [ a [ Route.href Route.Login ] [ text "Sign in" ] + , text " or " + , a [ Route.href Route.Register ] [ text "sign up" ] + , text " to comment." + ] + + +viewButtons : Cred -> Article Full -> Author -> List (Html Msg) +viewButtons cred article author = + case author of + IsFollowing followedAuthor -> + [ Author.unfollowButton ClickedUnfollow cred followedAuthor + , text " " + , favoriteButton cred article + ] + + IsNotFollowing unfollowedAuthor -> + [ Author.followButton ClickedFollow cred unfollowedAuthor + , text " " + , favoriteButton cred article + ] + + IsViewer _ _ -> + [ editButton article + , text " " + , deleteButton cred article + ] + + +viewComment : Time.Zone -> Slug -> Comment -> Html Msg +viewComment timeZone slug comment = + let + author = + Comment.author comment + + profile = + Author.profile author + + authorUsername = + Author.username author + + deleteCommentButton = + case author of + IsViewer cred _ -> + let + msg = + ClickedDeleteComment cred slug (Comment.id comment) + in + span + [ class "mod-options" + , onClick msg + ] + [ i [ class "ion-trash-a" ] [] ] + + _ -> + -- You can't delete other peoples' comments! + text "" + + timestamp = + Timestamp.format timeZone (Comment.createdAt comment) + in + div [ class "card" ] + [ div [ class "card-block" ] + [ p [ class "card-text" ] [ text (Comment.body comment) ] ] + , div [ class "card-footer" ] + [ a [ class "comment-author", href "" ] + [ img [ class "comment-author-img", Avatar.src (Profile.avatar profile) ] [] + , text " " + ] + , text " " + , a [ class "comment-author", Route.href (Route.Profile authorUsername) ] + [ text (Username.toString authorUsername) ] + , span [ class "date-posted" ] [ text timestamp ] + , deleteCommentButton + ] + ] + + + +-- UPDATE + + +type Msg + = ClickedDeleteArticle Cred Slug + | ClickedDeleteComment Cred Slug CommentId + | ClickedDismissErrors + | ClickedFavorite Cred Slug Body + | ClickedUnfavorite Cred Slug Body + | ClickedFollow Cred UnfollowedAuthor + | ClickedUnfollow Cred FollowedAuthor + | ClickedPostComment Cred Slug + | EnteredCommentText String + | CompletedLoadArticle (Result Http.Error (Article Full)) + | CompletedLoadComments (Result Http.Error (List Comment)) + | CompletedDeleteArticle (Result Http.Error ()) + | CompletedDeleteComment CommentId (Result Http.Error ()) + | CompletedFavoriteChange (Result Http.Error (Article Full)) + | CompletedFollowChange (Result Http.Error Author) + | CompletedPostComment (Result Http.Error Comment) + | GotTimeZone Time.Zone + | GotSession Session + | PassedSlowLoadThreshold + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + ClickedDismissErrors -> + ( { model | errors = [] }, Cmd.none ) + + ClickedFavorite cred slug body -> + ( model, fave Article.favorite cred slug body ) + + ClickedUnfavorite cred slug body -> + ( model, fave Article.unfavorite cred slug body ) + + CompletedLoadArticle (Ok article) -> + ( { model | article = Loaded article }, Cmd.none ) + + CompletedLoadArticle (Err error) -> + ( { model | article = Failed } + , Log.error + ) + + CompletedLoadComments (Ok comments) -> + ( { model | comments = Loaded ( Editing "", comments ) }, Cmd.none ) + + CompletedLoadComments (Err error) -> + ( { model | article = Failed }, Log.error ) + + CompletedFavoriteChange (Ok newArticle) -> + ( { model | article = Loaded newArticle }, Cmd.none ) + + CompletedFavoriteChange (Err error) -> + ( { model | errors = Api.addServerError model.errors } + , Log.error + ) + + ClickedUnfollow cred followedAuthor -> + ( model + , Author.requestUnfollow followedAuthor cred + |> Http.send CompletedFollowChange + ) + + ClickedFollow cred unfollowedAuthor -> + ( model + , Author.requestFollow unfollowedAuthor cred + |> Http.send CompletedFollowChange + ) + + CompletedFollowChange (Ok newAuthor) -> + case model.article of + Loaded article -> + ( { model | article = Loaded (Article.mapAuthor (\_ -> newAuthor) article) }, Cmd.none ) + + _ -> + ( model, Log.error ) + + CompletedFollowChange (Err error) -> + ( { model | errors = Api.addServerError model.errors } + , Log.error + ) + + EnteredCommentText str -> + case model.comments of + Loaded ( Editing _, comments ) -> + -- You can only edit comment text once comments have loaded + -- successfully, and when the comment is not currently + -- being submitted. + ( { model | comments = Loaded ( Editing str, comments ) } + , Cmd.none + ) + + _ -> + ( model, Log.error ) + + ClickedPostComment cred slug -> + case model.comments of + Loaded ( Editing "", comments ) -> + -- No posting empty comments! + -- We don't use Log.error here because this isn't an error, + -- it just doesn't do anything. + ( model, Cmd.none ) + + Loaded ( Editing str, comments ) -> + ( { model | comments = Loaded ( Sending str, comments ) } + , cred + |> Comment.post slug str + |> Http.send CompletedPostComment + ) + + _ -> + -- Either we have no comment to post, or there's already + -- one in the process of being posted, or we don't have + -- a valid article, in which case how did we post this? + ( model, Log.error ) + + CompletedPostComment (Ok comment) -> + case model.comments of + Loaded ( _, comments ) -> + ( { model | comments = Loaded ( Editing "", comment :: comments ) } + , Cmd.none + ) + + _ -> + ( model, Log.error ) + + CompletedPostComment (Err error) -> + ( { model | errors = Api.addServerError model.errors } + , Log.error + ) + + ClickedDeleteComment cred slug id -> + ( model + , cred + |> Comment.delete slug id + |> Http.send (CompletedDeleteComment id) + ) + + CompletedDeleteComment id (Ok ()) -> + case model.comments of + Loaded ( commentText, comments ) -> + ( { model | comments = Loaded ( commentText, withoutComment id comments ) } + , Cmd.none + ) + + _ -> + ( model, Log.error ) + + CompletedDeleteComment id (Err error) -> + ( { model | errors = Api.addServerError model.errors } + , Log.error + ) + + ClickedDeleteArticle cred slug -> + ( model + , delete slug cred + |> Http.send CompletedDeleteArticle + ) + + CompletedDeleteArticle (Ok ()) -> + ( model, Route.replaceUrl (Session.navKey model.session) Route.Home ) + + CompletedDeleteArticle (Err error) -> + ( { model | errors = Api.addServerError model.errors } + , Log.error + ) + + GotTimeZone tz -> + ( { model | timeZone = tz }, Cmd.none ) + + GotSession session -> + ( { model | session = session } + , Route.replaceUrl (Session.navKey session) Route.Home + ) + + PassedSlowLoadThreshold -> + let + -- If any data is still Loading, change it to LoadingSlowly + -- so `view` knows to render a spinner. + article = + case model.article of + Loading -> + LoadingSlowly + + other -> + other + + comments = + case model.comments of + Loading -> + LoadingSlowly + + other -> + other + in + ( { model | article = article, comments = comments }, Cmd.none ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Session.changes GotSession (Session.navKey model.session) + + + +-- HTTP + + +delete : Slug -> Cred -> Http.Request () +delete slug cred = + Api.delete (Endpoint.article slug) cred Http.emptyBody (Decode.succeed ()) + + + +-- EXPORT + + +toSession : Model -> Session +toSession model = + model.session + + + +-- INTERNAL + + +fave : (Slug -> Cred -> Http.Request (Article Preview)) -> Cred -> Slug -> Body -> Cmd Msg +fave toRequest cred slug body = + toRequest slug cred + |> Http.toTask + |> Task.map (Article.fromPreview body) + |> Task.attempt CompletedFavoriteChange + + +withoutComment : CommentId -> List Comment -> List Comment +withoutComment id list = + List.filter (\comment -> Comment.id comment /= id) list + + +favoriteButton : Cred -> Article Full -> Html Msg +favoriteButton cred article = + let + { favoritesCount, favorited } = + Article.metadata article + + slug = + Article.slug article + + body = + Article.body article + + kids = + [ text (" Favorite Article (" ++ String.fromInt favoritesCount ++ ")") ] + in + if favorited then + Article.unfavoriteButton cred (ClickedUnfavorite cred slug body) [] kids + + else + Article.favoriteButton cred (ClickedFavorite cred slug body) [] kids + + +deleteButton : Cred -> Article a -> Html Msg +deleteButton cred article = + let + msg = + ClickedDeleteArticle cred (Article.slug article) + in + button [ class "btn btn-outline-danger btn-sm", onClick msg ] + [ i [ class "ion-trash-a" ] [], text " Delete Article" ] + + +editButton : Article a -> Html Msg +editButton article = + a [ class "btn btn-outline-secondary btn-sm", Route.href (Route.EditArticle (Article.slug article)) ] + [ i [ class "ion-edit" ] [], text " Edit Article" ] diff --git a/example-0.19/src/Page/Article/Editor.elm b/example-0.19/src/Page/Article/Editor.elm new file mode 100644 index 0000000..d339cbf --- /dev/null +++ b/example-0.19/src/Page/Article/Editor.elm @@ -0,0 +1,600 @@ +module Page.Article.Editor exposing (Model, Msg, initEdit, initNew, subscriptions, toSession, update, view) + +import Api exposing (Cred) +import Api.Endpoint as Endpoint +import Article exposing (Article, Full) +import Article.Body exposing (Body) +import Article.Slug as Slug exposing (Slug) +import Browser.Navigation as Nav +import Html exposing (..) +import Html.Attributes exposing (attribute, class, disabled, href, id, placeholder, type_, value) +import Html.Events exposing (onInput, onSubmit) +import Http +import Json.Decode as Decode +import Json.Encode as Encode +import Loading +import Page +import Profile exposing (Profile) +import Route +import Session exposing (Session) +import Task exposing (Task) +import Time + + + +-- MODEL + + +type alias Model = + { session : Session + , status : Status + } + + +type + Status + -- Edit Article + = Loading Slug + | LoadingSlowly Slug + | LoadingFailed Slug + | Saving Slug Form + | Editing Slug (List Problem) Form + -- New Article + | EditingNew (List Problem) Form + | Creating Form + + +type Problem + = InvalidEntry ValidatedField String + | ServerError String + + +type alias Form = + { title : String + , body : String + , description : String + , tags : String + } + + +initNew : Session -> ( Model, Cmd msg ) +initNew session = + ( { session = session + , status = + EditingNew [] + { title = "" + , body = "" + , description = "" + , tags = "" + } + } + , Cmd.none + ) + + +initEdit : Session -> Slug -> ( Model, Cmd Msg ) +initEdit session slug = + ( { session = session + , status = Loading slug + } + , Cmd.batch + [ Article.fetch (Session.cred session) slug + |> Http.toTask + -- If init fails, store the slug that failed in the msg, so we can + -- at least have it later to display the page's title properly! + |> Task.mapError (\httpError -> ( slug, httpError )) + |> Task.attempt CompletedArticleLoad + , Task.perform (\_ -> PassedSlowLoadThreshold) Loading.slowThreshold + ] + ) + + + +-- VIEW + + +view : Model -> { title : String, content : Html Msg } +view model = + { title = + case getSlug model.status of + Just slug -> + "Edit Article - " ++ Slug.toString slug + + Nothing -> + "New Article" + , content = + case Session.cred model.session of + Just cred -> + viewAuthenticated cred model + + Nothing -> + text "Sign in to edit this article." + } + + +viewProblems : List Problem -> Html msg +viewProblems problems = + ul [ class "error-messages" ] + (List.map viewProblem problems) + + +viewProblem : Problem -> Html msg +viewProblem problem = + let + errorMessage = + case problem of + InvalidEntry _ message -> + message + + ServerError message -> + message + in + li [] [ text errorMessage ] + + +viewAuthenticated : Cred -> Model -> Html Msg +viewAuthenticated cred model = + let + formHtml = + case model.status of + Loading _ -> + [] + + LoadingSlowly _ -> + [ Loading.icon ] + + Saving slug form -> + [ viewForm cred form (editArticleSaveButton [ disabled True ]) ] + + Creating form -> + [ viewForm cred form (newArticleSaveButton [ disabled True ]) ] + + Editing slug problems form -> + [ viewProblems problems + , viewForm cred form (editArticleSaveButton []) + ] + + EditingNew problems form -> + [ viewProblems problems + , viewForm cred form (newArticleSaveButton []) + ] + + LoadingFailed _ -> + [ text "Article failed to load." ] + in + div [ class "editor-page" ] + [ div [ class "container page" ] + [ div [ class "row" ] + [ div [ class "col-md-10 offset-md-1 col-xs-12" ] + formHtml + ] + ] + ] + + +viewForm : Cred -> Form -> Html Msg -> Html Msg +viewForm cred fields saveButton = + Html.form [ onSubmit (ClickedSave cred) ] + [ fieldset [] + [ fieldset [ class "form-group" ] + [ input + [ class "form-control form-control-lg" + , placeholder "Article Title" + , onInput EnteredTitle + , value fields.title + ] + [] + ] + , fieldset [ class "form-group" ] + [ input + [ class "form-control" + , placeholder "What's this article about?" + , onInput EnteredDescription + , value fields.description + ] + [] + ] + , fieldset [ class "form-group" ] + [ textarea + [ class "form-control" + , placeholder "Write your article (in markdown)" + , attribute "rows" "8" + , onInput EnteredBody + , value fields.body + ] + [] + ] + , fieldset [ class "form-group" ] + [ input + [ class "form-control" + , placeholder "Enter tags" + , onInput EnteredTags + , value fields.tags + ] + [] + ] + , saveButton + ] + ] + + +editArticleSaveButton : List (Attribute msg) -> Html msg +editArticleSaveButton extraAttrs = + saveArticleButton "Update Article" extraAttrs + + +newArticleSaveButton : List (Attribute msg) -> Html msg +newArticleSaveButton extraAttrs = + saveArticleButton "Publish Article" extraAttrs + + +saveArticleButton : String -> List (Attribute msg) -> Html msg +saveArticleButton caption extraAttrs = + button (class "btn btn-lg pull-xs-right btn-primary" :: extraAttrs) + [ text caption ] + + + +-- UPDATE + + +type Msg + = ClickedSave Cred + | EnteredBody String + | EnteredDescription String + | EnteredTags String + | EnteredTitle String + | CompletedCreate (Result Http.Error (Article Full)) + | CompletedEdit (Result Http.Error (Article Full)) + | CompletedArticleLoad (Result ( Slug, Http.Error ) (Article Full)) + | GotSession Session + | PassedSlowLoadThreshold + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + ClickedSave cred -> + model.status + |> save cred + |> Tuple.mapFirst (\status -> { model | status = status }) + + EnteredTitle title -> + updateForm (\form -> { form | title = title }) model + + EnteredDescription description -> + updateForm (\form -> { form | description = description }) model + + EnteredTags tags -> + updateForm (\form -> { form | tags = tags }) model + + EnteredBody body -> + updateForm (\form -> { form | body = body }) model + + CompletedCreate (Ok article) -> + ( model + , Route.Article (Article.slug article) + |> Route.replaceUrl (Session.navKey model.session) + ) + + CompletedCreate (Err error) -> + ( { model | status = savingError error model.status } + , Cmd.none + ) + + CompletedEdit (Ok article) -> + ( model + , Route.Article (Article.slug article) + |> Route.replaceUrl (Session.navKey model.session) + ) + + CompletedEdit (Err error) -> + ( { model | status = savingError error model.status } + , Cmd.none + ) + + CompletedArticleLoad (Err ( slug, error )) -> + ( { model | status = LoadingFailed slug } + , Cmd.none + ) + + CompletedArticleLoad (Ok article) -> + let + { title, description, tags } = + Article.metadata article + + status = + Editing (Article.slug article) + [] + { title = title + , body = Article.Body.toMarkdownString (Article.body article) + , description = description + , tags = String.join " " tags + } + in + ( { model | status = status } + , Cmd.none + ) + + GotSession session -> + ( { model | session = session } + , Route.replaceUrl (Session.navKey session) Route.Home + ) + + PassedSlowLoadThreshold -> + let + -- If any data is still Loading, change it to LoadingSlowly + -- so `view` knows to render a spinner. + status = + case model.status of + Loading slug -> + LoadingSlowly slug + + other -> + other + in + ( { model | status = status }, Cmd.none ) + + +save : Cred -> Status -> ( Status, Cmd Msg ) +save cred status = + case status of + Editing slug _ form -> + case validate form of + Ok validForm -> + ( Saving slug form + , edit slug validForm cred + |> Http.send CompletedEdit + ) + + Err problems -> + ( Editing slug problems form + , Cmd.none + ) + + EditingNew _ form -> + case validate form of + Ok validForm -> + ( Creating form + , create validForm cred + |> Http.send CompletedCreate + ) + + Err problems -> + ( EditingNew problems form + , Cmd.none + ) + + _ -> + -- We're in a state where saving is not allowed. + -- We tried to prevent getting here by disabling the Save + -- button, but somehow the user got here anyway! + -- + -- If we had an error logging service, we would send + -- something to it here! + ( status, Cmd.none ) + + +savingError : Http.Error -> Status -> Status +savingError error status = + let + problems = + [ ServerError "Error saving article" ] + in + case status of + Saving slug form -> + Editing slug problems form + + Creating form -> + EditingNew problems form + + _ -> + status + + +{-| Helper function for `update`. Updates the form, if there is one, +and returns Cmd.none. + +Useful for recording form fields! + +This could also log errors to the server if we are trying to record things in +the form and we don't actually have a form. + +-} +updateForm : (Form -> Form) -> Model -> ( Model, Cmd Msg ) +updateForm transform model = + let + newModel = + case model.status of + Loading _ -> + model + + LoadingSlowly _ -> + model + + LoadingFailed _ -> + model + + Saving slug form -> + { model | status = Saving slug (transform form) } + + Editing slug errors form -> + { model | status = Editing slug errors (transform form) } + + EditingNew errors form -> + { model | status = EditingNew errors (transform form) } + + Creating form -> + { model | status = Creating (transform form) } + in + ( newModel, Cmd.none ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Session.changes GotSession (Session.navKey model.session) + + + +-- FORM + + +{-| Marks that we've trimmed the form's fields, so we don't accidentally send +it to the server without having trimmed it! +-} +type TrimmedForm + = Trimmed Form + + +{-| When adding a variant here, add it to `fieldsToValidate` too! +-} +type ValidatedField + = Title + | Body + + +fieldsToValidate : List ValidatedField +fieldsToValidate = + [ Title + , Body + ] + + +{-| Trim the form and validate its fields. If there are problems, report them! +-} +validate : Form -> Result (List Problem) TrimmedForm +validate form = + let + trimmedForm = + trimFields form + in + case List.concatMap (validateField trimmedForm) fieldsToValidate of + [] -> + Ok trimmedForm + + problems -> + Err problems + + +validateField : TrimmedForm -> ValidatedField -> List Problem +validateField (Trimmed form) field = + List.map (InvalidEntry field) <| + case field of + Title -> + if String.isEmpty form.title then + [ "title can't be blank." ] + + else + [] + + Body -> + if String.isEmpty form.body then + [ "body can't be blank." ] + + else + [] + + +{-| Don't trim while the user is typing! That would be super annoying. +Instead, trim only on submit. +-} +trimFields : Form -> TrimmedForm +trimFields form = + Trimmed + { title = String.trim form.title + , body = String.trim form.body + , description = String.trim form.description + , tags = String.trim form.tags + } + + + +-- HTTP + + +create : TrimmedForm -> Cred -> Http.Request (Article Full) +create (Trimmed form) cred = + let + article = + Encode.object + [ ( "title", Encode.string form.title ) + , ( "description", Encode.string form.description ) + , ( "body", Encode.string form.body ) + , ( "tagList", Encode.list Encode.string (tagsFromString form.tags) ) + ] + + body = + Encode.object [ ( "article", article ) ] + |> Http.jsonBody + in + Decode.field "article" (Article.fullDecoder (Just cred)) + |> Api.post (Endpoint.articles []) (Just cred) body + + +tagsFromString : String -> List String +tagsFromString str = + String.split " " str + |> List.map String.trim + |> List.filter (not << String.isEmpty) + + +edit : Slug -> TrimmedForm -> Cred -> Http.Request (Article Full) +edit articleSlug (Trimmed form) cred = + let + article = + Encode.object + [ ( "title", Encode.string form.title ) + , ( "description", Encode.string form.description ) + , ( "body", Encode.string form.body ) + ] + + body = + Encode.object [ ( "article", article ) ] + |> Http.jsonBody + in + Decode.field "article" (Article.fullDecoder (Just cred)) + |> Api.put (Endpoint.article articleSlug) cred body + + + +-- EXPORT + + +toSession : Model -> Session +toSession model = + model.session + + + +-- INTERNAL + + +{-| Used for setting the page's title. +-} +getSlug : Status -> Maybe Slug +getSlug status = + case status of + Loading slug -> + Just slug + + LoadingSlowly slug -> + Just slug + + LoadingFailed slug -> + Just slug + + Saving slug _ -> + Just slug + + Editing slug _ _ -> + Just slug + + EditingNew _ _ -> + Nothing + + Creating _ -> + Nothing diff --git a/example-0.19/src/Page/Blank.elm b/example-0.19/src/Page/Blank.elm new file mode 100644 index 0000000..3ae45a3 --- /dev/null +++ b/example-0.19/src/Page/Blank.elm @@ -0,0 +1,10 @@ +module Page.Blank exposing (view) + +import Html exposing (Html) + + +view : { title : String, content : Html msg } +view = + { title = "" + , content = Html.text "" + } diff --git a/example-0.19/src/Page/Home.elm b/example-0.19/src/Page/Home.elm new file mode 100644 index 0000000..9008a83 --- /dev/null +++ b/example-0.19/src/Page/Home.elm @@ -0,0 +1,395 @@ +module Page.Home exposing (Model, Msg, init, subscriptions, toSession, update, view) + +{-| The homepage. You can get here via either the / or /#/ routes. +-} + +import Api exposing (Cred) +import Api.Endpoint as Endpoint +import Article exposing (Article, Preview) +import Article.Feed as Feed +import Article.Tag as Tag exposing (Tag) +import Browser.Dom as Dom +import Html exposing (..) +import Html.Attributes exposing (attribute, class, classList, href, id, placeholder) +import Html.Events exposing (onClick) +import Http +import Loading +import Log +import Page +import PaginatedList exposing (PaginatedList) +import Session exposing (Session) +import Task exposing (Task) +import Time +import Url.Builder +import Username exposing (Username) + + + +-- MODEL + + +type alias Model = + { session : Session + , timeZone : Time.Zone + , feedTab : FeedTab + , feedPage : Int + + -- Loaded independently from server + , tags : Status (List Tag) + , feed : Status Feed.Model + } + + +type Status a + = Loading + | LoadingSlowly + | Loaded a + | Failed + + +type FeedTab + = YourFeed Cred + | GlobalFeed + | TagFeed Tag + + +init : Session -> ( Model, Cmd Msg ) +init session = + let + feedTab = + case Session.cred session of + Just cred -> + YourFeed cred + + Nothing -> + GlobalFeed + + loadTags = + Http.toTask Tag.list + in + ( { session = session + , timeZone = Time.utc + , feedTab = feedTab + , feedPage = 1 + , tags = Loading + , feed = Loading + } + , Cmd.batch + [ fetchFeed session feedTab 1 + |> Task.attempt CompletedFeedLoad + , Tag.list + |> Http.send CompletedTagsLoad + , Task.perform GotTimeZone Time.here + , Task.perform (\_ -> PassedSlowLoadThreshold) Loading.slowThreshold + ] + ) + + + +-- VIEW + + +view : Model -> { title : String, content : Html Msg } +view model = + { title = "Conduit" + , content = + div [ class "home-page" ] + [ viewBanner + , div [ class "container page" ] + [ div [ class "row" ] + [ div [ class "col-md-9" ] <| + case model.feed of + Loaded feed -> + [ div [ class "feed-toggle" ] <| + List.concat + [ [ viewTabs + (Session.cred model.session) + model.feedTab + ] + , Feed.viewArticles model.timeZone feed + |> List.map (Html.map GotFeedMsg) + , [ Feed.viewPagination ClickedFeedPage model.feedPage feed ] + ] + ] + + Loading -> + [] + + LoadingSlowly -> + [ Loading.icon ] + + Failed -> + [ Loading.error "feed" ] + , div [ class "col-md-3" ] <| + case model.tags of + Loaded tags -> + [ div [ class "sidebar" ] <| + [ p [] [ text "Popular Tags" ] + , viewTags tags + ] + ] + + Loading -> + [] + + LoadingSlowly -> + [ Loading.icon ] + + Failed -> + [ Loading.error "tags" ] + ] + ] + ] + } + + +viewBanner : Html msg +viewBanner = + div [ class "banner" ] + [ div [ class "container" ] + [ h1 [ class "logo-font" ] [ text "conduit" ] + , p [] [ text "A place to share your knowledge." ] + ] + ] + + + +-- TABS + + +viewTabs : Maybe Cred -> FeedTab -> Html Msg +viewTabs maybeCred tab = + case tab of + YourFeed cred -> + Feed.viewTabs [] (yourFeed cred) [ globalFeed ] + + GlobalFeed -> + let + otherTabs = + case maybeCred of + Just cred -> + [ yourFeed cred ] + + Nothing -> + [] + in + Feed.viewTabs otherTabs globalFeed [] + + TagFeed tag -> + let + otherTabs = + case maybeCred of + Just cred -> + [ yourFeed cred, globalFeed ] + + Nothing -> + [ globalFeed ] + in + Feed.viewTabs otherTabs (tagFeed tag) [] + + +yourFeed : Cred -> ( String, Msg ) +yourFeed cred = + ( "Your Feed", ClickedTab (YourFeed cred) ) + + +globalFeed : ( String, Msg ) +globalFeed = + ( "Global Feed", ClickedTab GlobalFeed ) + + +tagFeed : Tag -> ( String, Msg ) +tagFeed tag = + ( "#" ++ Tag.toString tag, ClickedTab (TagFeed tag) ) + + + +-- TAGS + + +viewTags : List Tag -> Html Msg +viewTags tags = + div [ class "tag-list" ] (List.map viewTag tags) + + +viewTag : Tag -> Html Msg +viewTag tagName = + a + [ class "tag-pill tag-default" + , onClick (ClickedTag tagName) + + -- The RealWorld CSS requires an href to work properly. + , href "" + ] + [ text (Tag.toString tagName) ] + + + +-- UPDATE + + +type Msg + = ClickedTag Tag + | ClickedTab FeedTab + | ClickedFeedPage Int + | CompletedFeedLoad (Result Http.Error Feed.Model) + | CompletedTagsLoad (Result Http.Error (List Tag)) + | GotTimeZone Time.Zone + | GotFeedMsg Feed.Msg + | GotSession Session + | PassedSlowLoadThreshold + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + ClickedTag tag -> + let + feedTab = + TagFeed tag + in + ( { model | feedTab = feedTab } + , fetchFeed model.session feedTab 1 + |> Task.attempt CompletedFeedLoad + ) + + ClickedTab tab -> + ( { model | feedTab = tab } + , fetchFeed model.session tab 1 + |> Task.attempt CompletedFeedLoad + ) + + ClickedFeedPage page -> + ( { model | feedPage = page } + , fetchFeed model.session model.feedTab page + |> Task.andThen (\feed -> Task.map (\_ -> feed) scrollToTop) + |> Task.attempt CompletedFeedLoad + ) + + CompletedFeedLoad (Ok feed) -> + ( { model | feed = Loaded feed }, Cmd.none ) + + CompletedFeedLoad (Err error) -> + ( { model | feed = Failed }, Cmd.none ) + + CompletedTagsLoad (Ok tags) -> + ( { model | tags = Loaded tags }, Cmd.none ) + + CompletedTagsLoad (Err error) -> + ( { model | tags = Failed } + , Log.error + ) + + GotFeedMsg subMsg -> + case model.feed of + Loaded feed -> + let + ( newFeed, subCmd ) = + Feed.update (Session.cred model.session) subMsg feed + in + ( { model | feed = Loaded newFeed } + , Cmd.map GotFeedMsg subCmd + ) + + Loading -> + ( model, Log.error ) + + LoadingSlowly -> + ( model, Log.error ) + + Failed -> + ( model, Log.error ) + + GotTimeZone tz -> + ( { model | timeZone = tz }, Cmd.none ) + + GotSession session -> + ( { model | session = session }, Cmd.none ) + + PassedSlowLoadThreshold -> + let + -- If any data is still Loading, change it to LoadingSlowly + -- so `view` knows to render a spinner. + feed = + case model.feed of + Loading -> + LoadingSlowly + + other -> + other + + tags = + case model.tags of + Loading -> + LoadingSlowly + + other -> + other + in + ( { model | feed = feed, tags = tags }, Cmd.none ) + + + +-- HTTP + + +fetchFeed : Session -> FeedTab -> Int -> Task Http.Error Feed.Model +fetchFeed session feedTabs page = + let + maybeCred = + Session.cred session + + decoder = + Feed.decoder maybeCred articlesPerPage + + params = + PaginatedList.params { page = page, resultsPerPage = articlesPerPage } + + request = + case feedTabs of + YourFeed cred -> + Api.get (Endpoint.feed params) maybeCred decoder + + GlobalFeed -> + Api.get (Endpoint.articles params) maybeCred decoder + + TagFeed tag -> + let + firstParam = + Url.Builder.string "tag" (Tag.toString tag) + in + Api.get (Endpoint.articles (firstParam :: params)) maybeCred decoder + in + Http.toTask request + |> Task.map (Feed.init session) + + +articlesPerPage : Int +articlesPerPage = + 10 + + +scrollToTop : Task x () +scrollToTop = + Dom.setViewport 0 0 + -- It's not worth showing the user anything special if scrolling fails. + -- If anything, we'd log this to an error recording service. + |> Task.onError (\_ -> Task.succeed ()) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Session.changes GotSession (Session.navKey model.session) + + + +-- EXPORT + + +toSession : Model -> Session +toSession model = + model.session diff --git a/example-0.19/src/Page/Login.elm b/example-0.19/src/Page/Login.elm new file mode 100644 index 0000000..31bab51 --- /dev/null +++ b/example-0.19/src/Page/Login.elm @@ -0,0 +1,315 @@ +module Page.Login exposing (Model, Msg, init, subscriptions, toSession, update, view) + +{-| The login page. +-} + +import Api exposing (Cred) +import Browser.Navigation as Nav +import Html exposing (..) +import Html.Attributes exposing (..) +import Html.Events exposing (..) +import Http +import Json.Decode as Decode exposing (Decoder, decodeString, field, string) +import Json.Decode.Pipeline exposing (optional) +import Json.Encode as Encode +import Route exposing (Route) +import Session exposing (Session) +import Viewer exposing (Viewer) + + + +-- MODEL + + +type alias Model = + { session : Session + , problems : List Problem + , form : Form + } + + +{-| Recording validation problems on a per-field basis facilitates displaying +them inline next to the field where the error occurred. + +I implemented it this way out of habit, then realized the spec called for +displaying all the errors at the top. I thought about simplifying it, but then +figured it'd be useful to show how I would normally model this data - assuming +the intended UX was to render errors per field. + +(The other part of this is having a view function like this: + +viewFieldErrors : ValidatedField -> List Problem -> Html msg + +...and it filters the list of problems to render only InvalidEntry ones for the +given ValidatedField. That way you can call this: + +viewFieldErrors Email problems + +...next to the `email` field, and call `viewFieldErrors Password problems` +next to the `password` field, and so on. + +The `LoginError` should be displayed elsewhere, since it doesn't correspond to +a particular field. + +-} +type Problem + = InvalidEntry ValidatedField String + | ServerError String + + +type alias Form = + { email : String + , password : String + } + + +init : Session -> ( Model, Cmd msg ) +init session = + ( { session = session + , problems = [] + , form = + { email = "" + , password = "" + } + } + , Cmd.none + ) + + + +-- VIEW + + +view : Model -> { title : String, content : Html Msg } +view model = + { title = "Login" + , content = + div [ class "cred-page" ] + [ div [ class "container page" ] + [ div [ class "row" ] + [ div [ class "col-md-6 offset-md-3 col-xs-12" ] + [ h1 [ class "text-xs-center" ] [ text "Sign in" ] + , p [ class "text-xs-center" ] + [ a [ Route.href Route.Register ] + [ text "Need an account?" ] + ] + , ul [ class "error-messages" ] + (List.map viewProblem model.problems) + , viewForm model.form + ] + ] + ] + ] + } + + +viewProblem : Problem -> Html msg +viewProblem problem = + let + errorMessage = + case problem of + InvalidEntry _ str -> + str + + ServerError str -> + str + in + li [] [ text errorMessage ] + + +viewForm : Form -> Html Msg +viewForm form = + Html.form [ onSubmit SubmittedForm ] + [ fieldset [ class "form-group" ] + [ input + [ class "form-control form-control-lg" + , placeholder "Email" + , onInput EnteredEmail + , value form.email + ] + [] + ] + , fieldset [ class "form-group" ] + [ input + [ class "form-control form-control-lg" + , type_ "password" + , placeholder "Password" + , onInput EnteredPassword + , value form.password + ] + [] + ] + , button [ class "btn btn-lg btn-primary pull-xs-right" ] + [ text "Sign in" ] + ] + + + +-- UPDATE + + +type Msg + = SubmittedForm + | EnteredEmail String + | EnteredPassword String + | CompletedLogin (Result Http.Error Viewer) + | GotSession Session + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + SubmittedForm -> + case validate model.form of + Ok validForm -> + ( { model | problems = [] } + , Http.send CompletedLogin (login validForm) + ) + + Err problems -> + ( { model | problems = problems } + , Cmd.none + ) + + EnteredEmail email -> + updateForm (\form -> { form | email = email }) model + + EnteredPassword password -> + updateForm (\form -> { form | password = password }) model + + CompletedLogin (Err error) -> + let + serverErrors = + Api.decodeErrors error + |> List.map ServerError + in + ( { model | problems = List.append model.problems serverErrors } + , Cmd.none + ) + + CompletedLogin (Ok viewer) -> + ( model + , Viewer.store viewer + ) + + GotSession session -> + ( { model | session = session } + , Route.replaceUrl (Session.navKey session) Route.Home + ) + + +{-| Helper function for `update`. Updates the form and returns Cmd.none. +Useful for recording form fields! +-} +updateForm : (Form -> Form) -> Model -> ( Model, Cmd Msg ) +updateForm transform model = + ( { model | form = transform model.form }, Cmd.none ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Session.changes GotSession (Session.navKey model.session) + + + +-- FORM + + +{-| Marks that we've trimmed the form's fields, so we don't accidentally send +it to the server without having trimmed it! +-} +type TrimmedForm + = Trimmed Form + + +{-| When adding a variant here, add it to `fieldsToValidate` too! +-} +type ValidatedField + = Email + | Password + + +fieldsToValidate : List ValidatedField +fieldsToValidate = + [ Email + , Password + ] + + +{-| Trim the form and validate its fields. If there are problems, report them! +-} +validate : Form -> Result (List Problem) TrimmedForm +validate form = + let + trimmedForm = + trimFields form + in + case List.concatMap (validateField trimmedForm) fieldsToValidate of + [] -> + Ok trimmedForm + + problems -> + Err problems + + +validateField : TrimmedForm -> ValidatedField -> List Problem +validateField (Trimmed form) field = + List.map (InvalidEntry field) <| + case field of + Email -> + if String.isEmpty form.email then + [ "email can't be blank." ] + + else + [] + + Password -> + if String.isEmpty form.password then + [ "password can't be blank." ] + + else + [] + + +{-| Don't trim while the user is typing! That would be super annoying. +Instead, trim only on submit. +-} +trimFields : Form -> TrimmedForm +trimFields form = + Trimmed + { email = String.trim form.email + , password = String.trim form.password + } + + + +-- HTTP + + +login : TrimmedForm -> Http.Request Viewer +login (Trimmed form) = + let + user = + Encode.object + [ ( "email", Encode.string form.email ) + , ( "password", Encode.string form.password ) + ] + + body = + Encode.object [ ( "user", user ) ] + |> Http.jsonBody + in + Api.login body Viewer.decoder + + + +-- EXPORT + + +toSession : Model -> Session +toSession model = + model.session diff --git a/example-0.19/src/Page/NotFound.elm b/example-0.19/src/Page/NotFound.elm new file mode 100644 index 0000000..e0c534b --- /dev/null +++ b/example-0.19/src/Page/NotFound.elm @@ -0,0 +1,21 @@ +module Page.NotFound exposing (view) + +import Asset +import Html exposing (Html, div, h1, img, main_, text) +import Html.Attributes exposing (alt, class, id, src, tabindex) + + + +-- VIEW + + +view : { title : String, content : Html msg } +view = + { title = "Page Not Found" + , content = + main_ [ id "content", class "container", tabindex -1 ] + [ h1 [] [ text "Not Found" ] + , div [ class "row" ] + [ img [ Asset.src Asset.error ] [] ] + ] + } diff --git a/example-0.19/src/Page/Profile.elm b/example-0.19/src/Page/Profile.elm new file mode 100644 index 0000000..906b527 --- /dev/null +++ b/example-0.19/src/Page/Profile.elm @@ -0,0 +1,438 @@ +module Page.Profile exposing (Model, Msg, init, subscriptions, toSession, update, view) + +{-| An Author's profile. +-} + +import Api exposing (Cred) +import Api.Endpoint as Endpoint +import Article exposing (Article, Preview) +import Article.Feed as Feed +import Author exposing (Author(..), FollowedAuthor, UnfollowedAuthor) +import Avatar exposing (Avatar) +import Html exposing (..) +import Html.Attributes exposing (..) +import Http +import Loading +import Log +import Page +import PaginatedList exposing (PaginatedList) +import Profile exposing (Profile) +import Route +import Session exposing (Session) +import Task exposing (Task) +import Time +import Url.Builder +import Username exposing (Username) +import Viewer exposing (Viewer) + + + +-- MODEL + + +type alias Model = + { session : Session + , timeZone : Time.Zone + , errors : List String + , feedTab : FeedTab + , feedPage : Int + + -- Loaded independently from server + , author : Status Author + , feed : Status Feed.Model + } + + +type FeedTab + = MyArticles + | FavoritedArticles + + +type Status a + = Loading Username + | LoadingSlowly Username + | Loaded a + | Failed Username + + +init : Session -> Username -> ( Model, Cmd Msg ) +init session username = + let + maybeCred = + Session.cred session + in + ( { session = session + , timeZone = Time.utc + , errors = [] + , feedTab = defaultFeedTab + , feedPage = 1 + , author = Loading username + , feed = Loading username + } + , Cmd.batch + [ Author.fetch username maybeCred + |> Http.toTask + |> Task.mapError (Tuple.pair username) + |> Task.attempt CompletedAuthorLoad + , fetchFeed session defaultFeedTab username 1 + , Task.perform GotTimeZone Time.here + , Task.perform (\_ -> PassedSlowLoadThreshold) Loading.slowThreshold + ] + ) + + +currentUsername : Model -> Username +currentUsername model = + case model.author of + Loading username -> + username + + LoadingSlowly username -> + username + + Loaded author -> + Author.username author + + Failed username -> + username + + +defaultFeedTab : FeedTab +defaultFeedTab = + MyArticles + + + +-- HTTP + + +fetchFeed : Session -> FeedTab -> Username -> Int -> Cmd Msg +fetchFeed session feedTabs username page = + let + maybeCred = + Session.cred session + + firstParam = + case feedTabs of + MyArticles -> + Url.Builder.string "author" (Username.toString username) + + FavoritedArticles -> + Url.Builder.string "favorited" (Username.toString username) + + params = + firstParam :: PaginatedList.params { page = page, resultsPerPage = articlesPerPage } + + expect = + Feed.decoder maybeCred articlesPerPage + in + Api.get (Endpoint.articles params) maybeCred expect + |> Http.toTask + |> Task.map (Feed.init session) + |> Task.mapError (Tuple.pair username) + |> Task.attempt CompletedFeedLoad + + +articlesPerPage : Int +articlesPerPage = + 5 + + + +-- VIEW + + +view : Model -> { title : String, content : Html Msg } +view model = + let + title = + case model.author of + Loaded (IsViewer _ _) -> + myProfileTitle + + Loaded ((IsFollowing followedAuthor) as author) -> + titleForOther (Author.username author) + + Loaded ((IsNotFollowing unfollowedAuthor) as author) -> + titleForOther (Author.username author) + + Loading username -> + titleForMe (Session.cred model.session) username + + LoadingSlowly username -> + titleForMe (Session.cred model.session) username + + Failed username -> + titleForMe (Session.cred model.session) username + in + { title = title + , content = + case model.author of + Loaded author -> + let + profile = + Author.profile author + + username = + Author.username author + + followButton = + case Session.cred model.session of + Just cred -> + case author of + IsViewer _ _ -> + -- We can't follow ourselves! + text "" + + IsFollowing followedAuthor -> + Author.unfollowButton ClickedUnfollow cred followedAuthor + + IsNotFollowing unfollowedAuthor -> + Author.followButton ClickedFollow cred unfollowedAuthor + + Nothing -> + -- We can't follow if we're logged out + text "" + in + div [ class "profile-page" ] + [ Page.viewErrors ClickedDismissErrors model.errors + , div [ class "user-info" ] + [ div [ class "container" ] + [ div [ class "row" ] + [ div [ class "col-xs-12 col-md-10 offset-md-1" ] + [ img [ class "user-img", Avatar.src (Profile.avatar profile) ] [] + , h4 [] [ Username.toHtml username ] + , p [] [ text (Maybe.withDefault "" (Profile.bio profile)) ] + , followButton + ] + ] + ] + ] + , case model.feed of + Loaded feed -> + div [ class "container" ] + [ div [ class "row" ] + [ div [ class "col-xs-12 col-md-10 offset-md-1" ] + [ div [ class "articles-toggle" ] <| + List.concat + [ [ viewTabs model.feedTab ] + , Feed.viewArticles model.timeZone feed + |> List.map (Html.map GotFeedMsg) + , [ Feed.viewPagination ClickedFeedPage model.feedPage feed ] + ] + ] + ] + ] + + Loading _ -> + text "" + + LoadingSlowly _ -> + Loading.icon + + Failed _ -> + Loading.error "feed" + ] + + Loading _ -> + text "" + + LoadingSlowly _ -> + Loading.icon + + Failed _ -> + Loading.error "profile" + } + + + +-- PAGE TITLE + + +titleForOther : Username -> String +titleForOther otherUsername = + "Profile — " ++ Username.toString otherUsername + + +titleForMe : Maybe Cred -> Username -> String +titleForMe maybeCred username = + case maybeCred of + Just cred -> + if username == Api.username cred then + myProfileTitle + + else + defaultTitle + + Nothing -> + defaultTitle + + +myProfileTitle : String +myProfileTitle = + "My Profile" + + +defaultTitle : String +defaultTitle = + "Profile" + + + +-- TABS + + +viewTabs : FeedTab -> Html Msg +viewTabs tab = + case tab of + MyArticles -> + Feed.viewTabs [] myArticles [ favoritedArticles ] + + FavoritedArticles -> + Feed.viewTabs [ myArticles ] favoritedArticles [] + + +myArticles : ( String, Msg ) +myArticles = + ( "My Articles", ClickedTab MyArticles ) + + +favoritedArticles : ( String, Msg ) +favoritedArticles = + ( "Favorited Articles", ClickedTab FavoritedArticles ) + + + +-- UPDATE + + +type Msg + = ClickedDismissErrors + | ClickedFollow Cred UnfollowedAuthor + | ClickedUnfollow Cred FollowedAuthor + | ClickedTab FeedTab + | ClickedFeedPage Int + | CompletedFollowChange (Result Http.Error Author) + | CompletedAuthorLoad (Result ( Username, Http.Error ) Author) + | CompletedFeedLoad (Result ( Username, Http.Error ) Feed.Model) + | GotTimeZone Time.Zone + | GotFeedMsg Feed.Msg + | GotSession Session + | PassedSlowLoadThreshold + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + ClickedDismissErrors -> + ( { model | errors = [] }, Cmd.none ) + + ClickedUnfollow cred followedAuthor -> + ( model + , Author.requestUnfollow followedAuthor cred + |> Http.send CompletedFollowChange + ) + + ClickedFollow cred unfollowedAuthor -> + ( model + , Author.requestFollow unfollowedAuthor cred + |> Http.send CompletedFollowChange + ) + + ClickedTab tab -> + ( { model | feedTab = tab } + , fetchFeed model.session tab (currentUsername model) 1 + ) + + ClickedFeedPage page -> + ( { model | feedPage = page } + , fetchFeed model.session model.feedTab (currentUsername model) page + ) + + CompletedFollowChange (Ok newAuthor) -> + ( { model | author = Loaded newAuthor } + , Cmd.none + ) + + CompletedFollowChange (Err error) -> + ( model + , Log.error + ) + + CompletedAuthorLoad (Ok author) -> + ( { model | author = Loaded author }, Cmd.none ) + + CompletedAuthorLoad (Err ( username, err )) -> + ( { model | author = Failed username } + , Log.error + ) + + CompletedFeedLoad (Ok feed) -> + ( { model | feed = Loaded feed } + , Cmd.none + ) + + CompletedFeedLoad (Err ( username, err )) -> + ( { model | feed = Failed username } + , Log.error + ) + + GotFeedMsg subMsg -> + case model.feed of + Loaded feed -> + let + ( newFeed, subCmd ) = + Feed.update (Session.cred model.session) subMsg feed + in + ( { model | feed = Loaded newFeed } + , Cmd.map GotFeedMsg subCmd + ) + + Loading _ -> + ( model, Log.error ) + + LoadingSlowly _ -> + ( model, Log.error ) + + Failed _ -> + ( model, Log.error ) + + GotTimeZone tz -> + ( { model | timeZone = tz }, Cmd.none ) + + GotSession session -> + ( { model | session = session } + , Route.replaceUrl (Session.navKey session) Route.Home + ) + + PassedSlowLoadThreshold -> + let + -- If any data is still Loading, change it to LoadingSlowly + -- so `view` knows to render a spinner. + feed = + case model.feed of + Loading username -> + LoadingSlowly username + + other -> + other + in + ( { model | feed = feed }, Cmd.none ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Session.changes GotSession (Session.navKey model.session) + + + +-- EXPORT + + +toSession : Model -> Session +toSession model = + model.session diff --git a/example-0.19/src/Page/Register.elm b/example-0.19/src/Page/Register.elm new file mode 100644 index 0000000..f1078e9 --- /dev/null +++ b/example-0.19/src/Page/Register.elm @@ -0,0 +1,317 @@ +module Page.Register exposing (Model, Msg, init, subscriptions, toSession, update, view) + +import Api exposing (Cred) +import Browser.Navigation as Nav +import Html exposing (..) +import Html.Attributes exposing (..) +import Html.Events exposing (..) +import Http +import Json.Decode as Decode exposing (Decoder, decodeString, field, string) +import Json.Decode.Pipeline exposing (optional) +import Json.Encode as Encode +import Route exposing (Route) +import Session exposing (Session) +import Viewer exposing (Viewer) + + + +-- MODEL + + +type alias Model = + { session : Session + , problems : List Problem + , form : Form + } + + +type alias Form = + { email : String + , username : String + , password : String + } + + +type Problem + = InvalidEntry ValidatedField String + | ServerError String + + +init : Session -> ( Model, Cmd msg ) +init session = + ( { session = session + , problems = [] + , form = + { email = "" + , username = "" + , password = "" + } + } + , Cmd.none + ) + + + +-- VIEW + + +view : Model -> { title : String, content : Html Msg } +view model = + { title = "Register" + , content = + div [ class "cred-page" ] + [ div [ class "container page" ] + [ div [ class "row" ] + [ div [ class "col-md-6 offset-md-3 col-xs-12" ] + [ h1 [ class "text-xs-center" ] [ text "Sign up" ] + , p [ class "text-xs-center" ] + [ a [ Route.href Route.Login ] + [ text "Have an account?" ] + ] + , ul [ class "error-messages" ] + (List.map viewProblem model.problems) + , viewForm model.form + ] + ] + ] + ] + } + + +viewForm : Form -> Html Msg +viewForm form = + Html.form [ onSubmit SubmittedForm ] + [ fieldset [ class "form-group" ] + [ input + [ class "form-control form-control-lg" + , placeholder "Username" + , onInput EnteredUsername + , value form.username + ] + [] + ] + , fieldset [ class "form-group" ] + [ input + [ class "form-control form-control-lg" + , placeholder "Email" + , onInput EnteredEmail + , value form.email + ] + [] + ] + , fieldset [ class "form-group" ] + [ input + [ class "form-control form-control-lg" + , type_ "password" + , placeholder "Password" + , onInput EnteredPassword + , value form.password + ] + [] + ] + , button [ class "btn btn-lg btn-primary pull-xs-right" ] + [ text "Sign up" ] + ] + + +viewProblem : Problem -> Html msg +viewProblem problem = + let + errorMessage = + case problem of + InvalidEntry _ str -> + str + + ServerError str -> + str + in + li [] [ text errorMessage ] + + + +-- UPDATE + + +type Msg + = SubmittedForm + | EnteredEmail String + | EnteredUsername String + | EnteredPassword String + | CompletedRegister (Result Http.Error Viewer) + | GotSession Session + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + SubmittedForm -> + case validate model.form of + Ok validForm -> + ( { model | problems = [] } + , Http.send CompletedRegister (register validForm) + ) + + Err problems -> + ( { model | problems = problems } + , Cmd.none + ) + + EnteredUsername username -> + updateForm (\form -> { form | username = username }) model + + EnteredEmail email -> + updateForm (\form -> { form | email = email }) model + + EnteredPassword password -> + updateForm (\form -> { form | password = password }) model + + CompletedRegister (Err error) -> + let + serverErrors = + Api.decodeErrors error + |> List.map ServerError + in + ( { model | problems = List.append model.problems serverErrors } + , Cmd.none + ) + + CompletedRegister (Ok viewer) -> + ( model + , Viewer.store viewer + ) + + GotSession session -> + ( { model | session = session } + , Route.replaceUrl (Session.navKey session) Route.Home + ) + + +{-| Helper function for `update`. Updates the form and returns Cmd.none. +Useful for recording form fields! +-} +updateForm : (Form -> Form) -> Model -> ( Model, Cmd Msg ) +updateForm transform model = + ( { model | form = transform model.form }, Cmd.none ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Session.changes GotSession (Session.navKey model.session) + + + +-- EXPORT + + +toSession : Model -> Session +toSession model = + model.session + + + +-- FORM + + +{-| Marks that we've trimmed the form's fields, so we don't accidentally send +it to the server without having trimmed it! +-} +type TrimmedForm + = Trimmed Form + + +{-| When adding a variant here, add it to `fieldsToValidate` too! +-} +type ValidatedField + = Username + | Email + | Password + + +fieldsToValidate : List ValidatedField +fieldsToValidate = + [ Username + , Email + , Password + ] + + +{-| Trim the form and validate its fields. If there are problems, report them! +-} +validate : Form -> Result (List Problem) TrimmedForm +validate form = + let + trimmedForm = + trimFields form + in + case List.concatMap (validateField trimmedForm) fieldsToValidate of + [] -> + Ok trimmedForm + + problems -> + Err problems + + +validateField : TrimmedForm -> ValidatedField -> List Problem +validateField (Trimmed form) field = + List.map (InvalidEntry field) <| + case field of + Username -> + if String.isEmpty form.username then + [ "username can't be blank." ] + + else + [] + + Email -> + if String.isEmpty form.email then + [ "email can't be blank." ] + + else + [] + + Password -> + if String.isEmpty form.password then + [ "password can't be blank." ] + + else if String.length form.password < Viewer.minPasswordChars then + [ "password must be at least " ++ String.fromInt Viewer.minPasswordChars ++ " characters long." ] + + else + [] + + +{-| Don't trim while the user is typing! That would be super annoying. +Instead, trim only on submit. +-} +trimFields : Form -> TrimmedForm +trimFields form = + Trimmed + { username = String.trim form.username + , email = String.trim form.email + , password = String.trim form.password + } + + + +-- HTTP + + +register : TrimmedForm -> Http.Request Viewer +register (Trimmed form) = + let + user = + Encode.object + [ ( "username", Encode.string form.username ) + , ( "email", Encode.string form.email ) + , ( "password", Encode.string form.password ) + ] + + body = + Encode.object [ ( "user", user ) ] + |> Http.jsonBody + in + Api.register body Viewer.decoder diff --git a/example-0.19/src/Page/Settings.elm b/example-0.19/src/Page/Settings.elm new file mode 100644 index 0000000..dc188a9 --- /dev/null +++ b/example-0.19/src/Page/Settings.elm @@ -0,0 +1,461 @@ +module Page.Settings exposing (Model, Msg, init, subscriptions, toSession, update, view) + +import Api exposing (Cred) +import Api.Endpoint as Endpoint +import Avatar +import Browser.Navigation as Nav +import Email exposing (Email) +import Html exposing (Html, button, div, fieldset, h1, input, li, text, textarea, ul) +import Html.Attributes exposing (attribute, class, placeholder, type_, value) +import Html.Events exposing (onInput, onSubmit) +import Http +import Json.Decode as Decode exposing (Decoder, decodeString, field, list, string) +import Json.Decode.Pipeline exposing (hardcoded, required) +import Json.Encode as Encode +import Loading +import Log +import Profile exposing (Profile) +import Route +import Session exposing (Session) +import Task +import Username as Username exposing (Username) +import Viewer exposing (Viewer) + + + +-- MODEL + + +type alias Model = + { session : Session + , problems : List Problem + , status : Status + } + + +type alias Form = + { avatar : String + , bio : String + , email : String + , username : String + , password : String + } + + +type Status + = Loading + | LoadingSlowly + | Loaded Form + | Failed + + +type Problem + = InvalidEntry ValidatedField String + | ServerError String + + +init : Session -> ( Model, Cmd Msg ) +init session = + ( { session = session + , problems = [] + , status = Loading + } + , Cmd.batch + [ Api.get Endpoint.user (Session.cred session) (Decode.field "user" formDecoder) + |> Http.send CompletedFormLoad + , Task.perform (\_ -> PassedSlowLoadThreshold) Loading.slowThreshold + ] + ) + + +formDecoder : Decoder Form +formDecoder = + Decode.succeed Form + |> required "image" (Decode.map (Maybe.withDefault "") (Decode.nullable Decode.string)) + |> required "bio" (Decode.map (Maybe.withDefault "") (Decode.nullable Decode.string)) + |> required "email" Decode.string + |> required "username" Decode.string + |> hardcoded "" + + +{-| A form that has been validated. Only the `edit` function uses this. Its +purpose is to prevent us from forgetting to validate the form before passing +it to `edit`. + +This doesn't create any guarantees that the form was actually validated. If +we wanted to do that, we'd need to move the form data into a separate module! + +-} +type ValidForm + = Valid Form + + + +-- VIEW + + +view : Model -> { title : String, content : Html Msg } +view model = + { title = "Settings" + , content = + case Session.cred model.session of + Just cred -> + div [ class "settings-page" ] + [ div [ class "container page" ] + [ div [ class "row" ] + [ div [ class "col-md-6 offset-md-3 col-xs-12" ] <| + [ h1 [ class "text-xs-center" ] [ text "Your Settings" ] + , ul [ class "error-messages" ] + (List.map viewProblem model.problems) + , case model.status of + Loaded form -> + viewForm cred form + + Loading -> + text "" + + LoadingSlowly -> + Loading.icon + + Failed -> + text "Error loading page." + ] + ] + ] + ] + + Nothing -> + text "Sign in to view your settings." + } + + +viewForm : Cred -> Form -> Html Msg +viewForm cred form = + Html.form [ onSubmit (SubmittedForm cred form) ] + [ fieldset [] + [ fieldset [ class "form-group" ] + [ input + [ class "form-control" + , placeholder "URL of profile picture" + , value form.avatar + , onInput EnteredAvatar + ] + [] + ] + , fieldset [ class "form-group" ] + [ input + [ class "form-control form-control-lg" + , placeholder "Username" + , value form.username + , onInput EnteredUsername + ] + [] + ] + , fieldset [ class "form-group" ] + [ textarea + [ class "form-control form-control-lg" + , placeholder "Short bio about you" + , attribute "rows" "8" + , value form.bio + , onInput EnteredBio + ] + [] + ] + , fieldset [ class "form-group" ] + [ input + [ class "form-control form-control-lg" + , placeholder "Email" + , value form.email + , onInput EnteredEmail + ] + [] + ] + , fieldset [ class "form-group" ] + [ input + [ class "form-control form-control-lg" + , type_ "password" + , placeholder "Password" + , value form.password + , onInput EnteredPassword + ] + [] + ] + , button + [ class "btn btn-lg btn-primary pull-xs-right" ] + [ text "Update Settings" ] + ] + ] + + +viewProblem : Problem -> Html msg +viewProblem problem = + let + errorMessage = + case problem of + InvalidEntry _ message -> + message + + ServerError message -> + message + in + li [] [ text errorMessage ] + + + +-- UPDATE + + +type Msg + = SubmittedForm Cred Form + | EnteredEmail String + | EnteredUsername String + | EnteredPassword String + | EnteredBio String + | EnteredAvatar String + | CompletedFormLoad (Result Http.Error Form) + | CompletedSave (Result Http.Error Viewer) + | GotSession Session + | PassedSlowLoadThreshold + + +update : Msg -> Model -> ( Model, Cmd Msg ) +update msg model = + case msg of + CompletedFormLoad (Ok form) -> + ( { model | status = Loaded form } + , Cmd.none + ) + + CompletedFormLoad (Err _) -> + ( { model | status = Failed } + , Cmd.none + ) + + SubmittedForm cred form -> + case validate form of + Ok validForm -> + ( { model | status = Loaded form } + , edit cred validForm + |> Http.send CompletedSave + ) + + Err problems -> + ( { model | problems = problems } + , Cmd.none + ) + + EnteredEmail email -> + updateForm (\form -> { form | email = email }) model + + EnteredUsername username -> + updateForm (\form -> { form | username = username }) model + + EnteredPassword password -> + updateForm (\form -> { form | password = password }) model + + EnteredBio bio -> + updateForm (\form -> { form | bio = bio }) model + + EnteredAvatar avatar -> + updateForm (\form -> { form | avatar = avatar }) model + + CompletedSave (Err error) -> + let + serverErrors = + Api.decodeErrors error + |> List.map ServerError + in + ( { model | problems = List.append model.problems serverErrors } + , Cmd.none + ) + + CompletedSave (Ok viewer) -> + ( model + , Viewer.store viewer + ) + + GotSession session -> + ( { model | session = session } + , Route.replaceUrl (Session.navKey session) Route.Home + ) + + PassedSlowLoadThreshold -> + case model.status of + Loading -> + ( { model | status = LoadingSlowly } + , Cmd.none + ) + + _ -> + ( model, Cmd.none ) + + +{-| Helper function for `update`. Updates the form and returns Cmd.none. +Useful for recording form fields! +-} +updateForm : (Form -> Form) -> Model -> ( Model, Cmd msg ) +updateForm transform model = + case model.status of + Loaded form -> + ( { model | status = Loaded (transform form) }, Cmd.none ) + + _ -> + ( model, Log.error ) + + + +-- SUBSCRIPTIONS + + +subscriptions : Model -> Sub Msg +subscriptions model = + Session.changes GotSession (Session.navKey model.session) + + + +-- EXPORT + + +toSession : Model -> Session +toSession model = + model.session + + + +-- FORM + + +{-| Marks that we've trimmed the form's fields, so we don't accidentally send +it to the server without having trimmed it! +-} +type TrimmedForm + = Trimmed Form + + +{-| When adding a variant here, add it to `fieldsToValidate` too! + +NOTE: there are no ImageUrl or Bio variants here, because they aren't validated! + +-} +type ValidatedField + = Username + | Email + | Password + + +fieldsToValidate : List ValidatedField +fieldsToValidate = + [ Username + , Email + , Password + ] + + +{-| Trim the form and validate its fields. If there are problems, report them! +-} +validate : Form -> Result (List Problem) TrimmedForm +validate form = + let + trimmedForm = + trimFields form + in + case List.concatMap (validateField trimmedForm) fieldsToValidate of + [] -> + Ok trimmedForm + + problems -> + Err problems + + +validateField : TrimmedForm -> ValidatedField -> List Problem +validateField (Trimmed form) field = + List.map (InvalidEntry field) <| + case field of + Username -> + if String.isEmpty form.username then + [ "username can't be blank." ] + + else + [] + + Email -> + if String.isEmpty form.email then + [ "email can't be blank." ] + + else + [] + + Password -> + let + passwordLength = + String.length form.password + in + if passwordLength > 0 && passwordLength < Viewer.minPasswordChars then + [ "password must be at least " ++ String.fromInt Viewer.minPasswordChars ++ " characters long." ] + + else + [] + + +{-| Don't trim while the user is typing! That would be super annoying. +Instead, trim only on submit. +-} +trimFields : Form -> TrimmedForm +trimFields form = + Trimmed + { avatar = String.trim form.avatar + , bio = String.trim form.bio + , email = String.trim form.email + , username = String.trim form.username + , password = String.trim form.password + } + + + +-- HTTP + + +{-| This takes a Valid Form as a reminder that it needs to have been validated +first. +-} +edit : Cred -> TrimmedForm -> Http.Request Viewer +edit cred (Trimmed form) = + let + encodedAvatar = + case form.avatar of + "" -> + Encode.null + + avatar -> + Encode.string avatar + + updates = + [ ( "username", Encode.string form.username ) + , ( "email", Encode.string form.email ) + , ( "bio", Encode.string form.bio ) + , ( "image", encodedAvatar ) + ] + + encodedUser = + Encode.object <| + case form.password of + "" -> + updates + + password -> + ( "password", Encode.string password ) :: updates + + body = + Encode.object [ ( "user", encodedUser ) ] + |> Http.jsonBody + in + Api.settings cred body Viewer.decoder + + +nothingIfEmpty : String -> Maybe String +nothingIfEmpty str = + if String.isEmpty str then + Nothing + + else + Just str diff --git a/example-0.19/src/PaginatedList.elm b/example-0.19/src/PaginatedList.elm new file mode 100644 index 0000000..55512c5 --- /dev/null +++ b/example-0.19/src/PaginatedList.elm @@ -0,0 +1,70 @@ +module PaginatedList exposing (PaginatedList, fromList, map, params, total, values) + +import Html exposing (Html, a, li, text, ul) +import Html.Attributes exposing (class, classList, href) +import Html.Events exposing (onClick) +import Json.Decode as Decode exposing (Decoder) +import Task exposing (Task) +import Url.Builder exposing (QueryParameter) + + + +-- TYPES + + +type PaginatedList a + = PaginatedList + { values : List a + , total : Int + } + + + +-- INFO + + +values : PaginatedList a -> List a +values (PaginatedList info) = + info.values + + +total : PaginatedList a -> Int +total (PaginatedList info) = + info.total + + + +-- CREATE + + +fromList : Int -> List a -> PaginatedList a +fromList totalCount list = + PaginatedList { values = list, total = totalCount } + + + +-- TRANSFORM + + +map : (a -> a) -> PaginatedList a -> PaginatedList a +map transform (PaginatedList info) = + PaginatedList { info | values = List.map transform info.values } + + + +-- PARAMS + + +{-| I decided to accept a record here so I don't mess up the argument order of the two Ints. +-} +params : + { page : Int, resultsPerPage : Int } + -> List QueryParameter +params { page, resultsPerPage } = + let + offset = + (page - 1) * resultsPerPage + in + [ Url.Builder.string "limit" (String.fromInt resultsPerPage) + , Url.Builder.string "offset" (String.fromInt offset) + ] diff --git a/example-0.19/src/Profile.elm b/example-0.19/src/Profile.elm new file mode 100644 index 0000000..536582a --- /dev/null +++ b/example-0.19/src/Profile.elm @@ -0,0 +1,54 @@ +module Profile exposing (Profile, avatar, bio, decoder) + +{-| A user's profile - potentially your own! + +Contrast with Cred, which is the currently signed-in user. + +-} + +import Api exposing (Cred) +import Avatar exposing (Avatar) +import Http +import Json.Decode as Decode exposing (Decoder) +import Json.Decode.Pipeline exposing (required) +import Username exposing (Username) + + + +-- TYPES + + +type Profile + = Profile Internals + + +type alias Internals = + { bio : Maybe String + , avatar : Avatar + } + + + +-- INFO + + +bio : Profile -> Maybe String +bio (Profile info) = + info.bio + + +avatar : Profile -> Avatar +avatar (Profile info) = + info.avatar + + + +-- SERIALIZATION + + +decoder : Decoder Profile +decoder = + Decode.succeed Internals + |> required "bio" (Decode.nullable Decode.string) + |> required "image" Avatar.decoder + |> Decode.map Profile diff --git a/example-0.19/src/Route.elm b/example-0.19/src/Route.elm new file mode 100644 index 0000000..1e524fe --- /dev/null +++ b/example-0.19/src/Route.elm @@ -0,0 +1,107 @@ +module Route exposing (Route(..), fromUrl, href, replaceUrl) + +import Article.Slug as Slug exposing (Slug) +import Browser.Navigation as Nav +import Html exposing (Attribute) +import Html.Attributes as Attr +import Profile exposing (Profile) +import Url exposing (Url) +import Url.Parser as Parser exposing ((), Parser, oneOf, s, string) +import Username exposing (Username) + + + +-- ROUTING + + +type Route + = Home + | Root + | Login + | Logout + | Register + | Settings + | Article Slug + | Profile Username + | NewArticle + | EditArticle Slug + + +parser : Parser (Route -> a) a +parser = + oneOf + [ Parser.map Home Parser.top + , Parser.map Login (s "login") + , Parser.map Logout (s "logout") + , Parser.map Settings (s "settings") + , Parser.map Profile (s "profile" Username.urlParser) + , Parser.map Register (s "register") + , Parser.map Article (s "article" Slug.urlParser) + , Parser.map NewArticle (s "editor") + , Parser.map EditArticle (s "editor" Slug.urlParser) + ] + + + +-- PUBLIC HELPERS + + +href : Route -> Attribute msg +href targetRoute = + Attr.href (routeToString targetRoute) + + +replaceUrl : Nav.Key -> Route -> Cmd msg +replaceUrl key route = + Nav.replaceUrl key (routeToString route) + + +fromUrl : Url -> Maybe Route +fromUrl url = + -- The RealWorld spec treats the fragment like a path. + -- This makes it *literally* the path, so we can proceed + -- with parsing as if it had been a normal path all along. + { url | path = Maybe.withDefault "" url.fragment, fragment = Nothing } + |> Parser.parse parser + + + +-- INTERNAL + + +routeToString : Route -> String +routeToString page = + let + pieces = + case page of + Home -> + [] + + Root -> + [] + + Login -> + [ "login" ] + + Logout -> + [ "logout" ] + + Register -> + [ "register" ] + + Settings -> + [ "settings" ] + + Article slug -> + [ "article", Slug.toString slug ] + + Profile username -> + [ "profile", Username.toString username ] + + NewArticle -> + [ "editor" ] + + EditArticle slug -> + [ "editor", Slug.toString slug ] + in + "#/" ++ String.join "/" pieces diff --git a/example-0.19/src/Session.elm b/example-0.19/src/Session.elm new file mode 100644 index 0000000..8b5436e --- /dev/null +++ b/example-0.19/src/Session.elm @@ -0,0 +1,76 @@ +module Session exposing (Session, changes, cred, fromViewer, navKey, viewer) + +import Api exposing (Cred) +import Avatar exposing (Avatar) +import Browser.Navigation as Nav +import Json.Decode as Decode exposing (Decoder) +import Json.Decode.Pipeline exposing (custom, required) +import Json.Encode as Encode exposing (Value) +import Profile exposing (Profile) +import Time +import Viewer exposing (Viewer) + + + +-- TYPES + + +type Session + = LoggedIn Nav.Key Viewer + | Guest Nav.Key + + + +-- INFO + + +viewer : Session -> Maybe Viewer +viewer session = + case session of + LoggedIn _ val -> + Just val + + Guest _ -> + Nothing + + +cred : Session -> Maybe Cred +cred session = + case session of + LoggedIn _ val -> + Just (Viewer.cred val) + + Guest _ -> + Nothing + + +navKey : Session -> Nav.Key +navKey session = + case session of + LoggedIn key _ -> + key + + Guest key -> + key + + + +-- CHANGES + + +changes : (Session -> msg) -> Nav.Key -> Sub msg +changes toMsg key = + Api.viewerChanges (\maybeViewer -> toMsg (fromViewer key maybeViewer)) Viewer.decoder + + +fromViewer : Nav.Key -> Maybe Viewer -> Session +fromViewer key maybeViewer = + -- It's stored in localStorage as a JSON String; + -- first decode the Value as a String, then + -- decode that String as JSON. + case maybeViewer of + Just viewerVal -> + LoggedIn key viewerVal + + Nothing -> + Guest key diff --git a/example-0.19/src/Timestamp.elm b/example-0.19/src/Timestamp.elm new file mode 100644 index 0000000..07982d6 --- /dev/null +++ b/example-0.19/src/Timestamp.elm @@ -0,0 +1,77 @@ +module Timestamp exposing (format, view) + +import Html exposing (Html, span, text) +import Html.Attributes exposing (class) +import Json.Decode as Decode exposing (Decoder, fail, succeed) +import Time exposing (Month(..)) + + + +-- VIEW + + +view : Time.Zone -> Time.Posix -> Html msg +view timeZone timestamp = + span [ class "date" ] [ text (format timeZone timestamp) ] + + + +-- FORMAT + + +{-| Format a timestamp as a String, like so: + + "February 14, 2018" + +For more complex date formatting scenarios, here's a nice package: + + +-} +format : Time.Zone -> Time.Posix -> String +format zone time = + let + month = + case Time.toMonth zone time of + Jan -> + "January" + + Feb -> + "February" + + Mar -> + "March" + + Apr -> + "April" + + May -> + "May" + + Jun -> + "June" + + Jul -> + "July" + + Aug -> + "August" + + Sep -> + "September" + + Oct -> + "October" + + Nov -> + "November" + + Dec -> + "December" + + day = + String.fromInt (Time.toDay zone time) + + year = + String.fromInt (Time.toYear zone time) + in + month ++ " " ++ day ++ ", " ++ year diff --git a/example-0.19/src/Username.elm b/example-0.19/src/Username.elm new file mode 100644 index 0000000..a7f17ec --- /dev/null +++ b/example-0.19/src/Username.elm @@ -0,0 +1,47 @@ +module Username exposing (Username, decoder, encode, toHtml, toString, urlParser) + +import Html exposing (Html) +import Json.Decode as Decode exposing (Decoder) +import Json.Encode as Encode exposing (Value) +import Url.Parser + + + +-- TYPES + + +type Username + = Username String + + + +-- CREATE + + +decoder : Decoder Username +decoder = + Decode.map Username Decode.string + + + +-- TRANSFORM + + +encode : Username -> Value +encode (Username username) = + Encode.string username + + +toString : Username -> String +toString (Username username) = + username + + +urlParser : Url.Parser.Parser (Username -> a) a +urlParser = + Url.Parser.custom "USERNAME" (\str -> Just (Username str)) + + +toHtml : Username -> Html msg +toHtml (Username username) = + Html.text username diff --git a/example-0.19/src/Viewer.elm b/example-0.19/src/Viewer.elm new file mode 100644 index 0000000..58ec005 --- /dev/null +++ b/example-0.19/src/Viewer.elm @@ -0,0 +1,66 @@ +module Viewer exposing (Viewer, avatar, cred, decoder, minPasswordChars, store, username) + +{-| The logged-in user currently viewing this page. It stores enough data to +be able to render the menu bar (username and avatar), along with Cred so it's +impossible to have a Viewer if you aren't logged in. +-} + +import Api exposing (Cred) +import Avatar exposing (Avatar) +import Email exposing (Email) +import Json.Decode as Decode exposing (Decoder) +import Json.Decode.Pipeline exposing (custom, required) +import Json.Encode as Encode exposing (Value) +import Profile exposing (Profile) +import Username exposing (Username) + + + +-- TYPES + + +type Viewer + = Viewer Avatar Cred + + + +-- INFO + + +cred : Viewer -> Cred +cred (Viewer _ val) = + val + + +username : Viewer -> Username +username (Viewer _ val) = + Api.username val + + +avatar : Viewer -> Avatar +avatar (Viewer val _) = + val + + +{-| Passwords must be at least this many characters long! +-} +minPasswordChars : Int +minPasswordChars = + 6 + + + +-- SERIALIZATION + + +decoder : Decoder (Cred -> Viewer) +decoder = + Decode.succeed Viewer + |> custom (Decode.field "image" Avatar.decoder) + + +store : Viewer -> Cmd msg +store (Viewer avatarVal credVal) = + Api.storeCredWith + credVal + avatarVal diff --git a/example-0.19/tests/RoutingTests.elm b/example-0.19/tests/RoutingTests.elm new file mode 100644 index 0000000..b096a19 --- /dev/null +++ b/example-0.19/tests/RoutingTests.elm @@ -0,0 +1,100 @@ +module RoutingTests exposing (..) + +import Article +import Article.Slug as Slug exposing (Slug) +import Expect exposing (Expectation) +import Json.Decode as Decode exposing (decodeString) +import Route exposing (Route(..)) +import Test exposing (..) +import Url exposing (Url) +import Username exposing (Username) + + +-- TODO need to add lots more tests! + + +fromUrl : Test +fromUrl = + describe "Route.fromUrl" + [ testUrl "" Root + , testUrl "#login" Login + , testUrl "#logout" Logout + , testUrl "#settings" Settings + , testUrl "#profile/foo" (Profile (usernameFromStr "foo")) + , testUrl "#register" Register + , testUrl "#article/foo" (Article (slugFromStr "foo")) + , testUrl "#editor" NewArticle + , testUrl "#editor/foo" (EditArticle (slugFromStr "foo")) + ] + + + +-- HELPERS + + +testUrl : String -> Route -> Test +testUrl hash route = + test ("Parsing hash: \"" ++ hash ++ "\"") <| + \() -> + fragment hash + |> Route.fromUrl + |> Expect.equal (Just route) + + +fragment : String -> Url +fragment frag = + { protocol = Url.Http + , host = "foo.com" + , port_ = Nothing + , path = "bar" + , query = Nothing + , fragment = Just frag + } + + + +-- CONSTRUCTING UNEXPOSED VALUES +-- By decoding values that are not intended to be exposed directly - and erroring +-- if they cannot be decoded, since this is harmless in tests - we can let +-- our internal modules continue to expose only the intended ways of +-- constructing those, while still being able to test them. + + +usernameFromStr : String -> Username +usernameFromStr str = + case decodeString Username.decoder ("\"" ++ str ++ "\"") of + Ok username -> + username + + Err err -> + Debug.todo ("Error decoding Username from \"" ++ str ++ "\": " ++ Decode.errorToString err) + + +slugFromStr : String -> Slug +slugFromStr str = + let + json = + """ + { "description": null + , "slug": \"""" ++ str ++ """" + , "title": "" + , "tagList": [] + , "createdAt": "2012-04-23T18:25:43.511Z" + , "updatedAt": "2012-04-23T18:25:43.511Z" + , "favorited": false + , "favoritesCount": 1 + , "author": + { "username": "" + , "bio": null + , "image": null + , "following": false + } + } + """ + in + case decodeString (Article.previewDecoder Nothing) json of + Ok article -> + Article.slug article + + Err err -> + Debug.todo ("Error decoding Slug from \"" ++ str ++ "\": " ++ Decode.errorToString err) diff --git a/example-0.19/tests/elm-package.json b/example-0.19/tests/elm-package.json new file mode 100644 index 0000000..85a01b5 --- /dev/null +++ b/example-0.19/tests/elm-package.json @@ -0,0 +1,26 @@ +{ + "version": "1.0.0", + "summary": "Test Suites", + "repository": "https://github.com/user/project.git", + "license": "BSD3", + "source-directories": ["../src", "."], + "exposed-modules": [], + "dependencies": { + "NoRedInk/elm-decode-pipeline": "3.0.0 <= v < 4.0.0", + "eeue56/elm-html-test": "5.1.2 <= v < 6.0.0", + "elm-community/elm-test": "4.0.0 <= v < 5.0.0", + "elm-community/json-extra": "2.1.0 <= v < 3.0.0", + "elm-lang/core": "5.1.1 <= v < 6.0.0", + "elm-lang/dom": "1.1.1 <= v < 2.0.0", + "elm-lang/html": "2.0.0 <= v < 3.0.0", + "elm-lang/http": "1.0.0 <= v < 2.0.0", + "elm-lang/navigation": "2.1.0 <= v < 3.0.0", + "evancz/elm-markdown": "3.0.2 <= v < 4.0.0", + "evancz/url-parser": "2.0.1 <= v < 3.0.0", + "lukewestby/elm-http-builder": "5.1.0 <= v < 6.0.0", + "mgold/elm-date-format": "1.3.0 <= v < 2.0.0", + "rtfeldman/elm-validate": "2.0.0 <= v < 3.0.0", + "rtfeldman/selectlist": "1.0.0 <= v < 2.0.0" + }, + "elm-version": "0.18.0 <= v < 0.19.0" +} diff --git a/example-0.19/webpack.config.js b/example-0.19/webpack.config.js new file mode 100644 index 0000000..85f64d7 --- /dev/null +++ b/example-0.19/webpack.config.js @@ -0,0 +1,84 @@ +const path = require("path"); +const webpack = require("webpack"); + +const HtmlWebpackPlugin = require("html-webpack-plugin"); +const SimpleProgressWebpackPlugin = require("simple-progress-webpack-plugin"); +module.exports = { + // all the Webpack files for the example are in the same folder as this config file + context: __dirname, + + entry: { + app: ["./index.js"] + }, + + output: { + filename: "example-0.19/[name].js" + }, + + mode: "development", + module: { + rules: [ + { + // "oneOf" will traverse all following loaders until one will + // match the requirements. When no loader matches it will fall + // back to the "file" loader at the end of the loader list. + oneOf: [ + // "url" loader works like "file" loader except that it embeds assets + // smaller than specified limit in bytes as data URLs to avoid requests. + { + test: [/app\/images\/(?!monster).*\.(bmp|png|gif|jpe?g)/], + loader: require.resolve("url-loader"), + options: { + limit: 10000, + name: "static/media/[name].[hash:8].[ext]" + } + }, + // Process JS with Babel. + { + test: /\.js$/, + exclude: [/elm-stuff/, /node_modules/], + loader: require.resolve("babel-loader"), + options: { + // This is a feature of `babel-loader` for webpack (not Babel itself). + // It enables caching results in ./node_modules/.cache/babel-loader/ + // directory for faster rebuilds. + cacheDirectory: true + } + }, + { + test: /\.elm$/, + exclude: [/elm-stuff/, /node_modules/], + use: [ + { + loader: require.resolve("elm-webpack-loader"), + options: { + verbose: true, + debug: true, + forceWatch: true, + cwd: __dirname + } + } + ] + }, + { + // "file" loader makes sure those assets get served by WebpackDevServer. + exclude: [/\.js$/, /\.html$/, /\.json$/, /\.ejs$/], + loader: require.resolve("file-loader"), + options: { + name: "static/media/[name].[hash:8].[ext]" + } + } + ] + } + ] + }, + + performance: { hints: false }, + + plugins: [new SimpleProgressWebpackPlugin()], + + devServer: { + inline: true, + stats: { colors: true } + } +}; diff --git a/example-0.19/yarn.lock b/example-0.19/yarn.lock new file mode 100644 index 0000000..90385bc --- /dev/null +++ b/example-0.19/yarn.lock @@ -0,0 +1,8667 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@babel/cli@^7.0.0-beta.42": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.0.0.tgz#108b395fd43fff6681d36fb41274df4d8ffeb12e" + dependencies: + commander "^2.8.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^1.1.0" + glob "^7.0.0" + lodash "^4.17.10" + mkdirp "^0.5.1" + output-file-sync "^2.0.0" + slash "^2.0.0" + source-map "^0.5.0" + optionalDependencies: + chokidar "^2.0.3" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + dependencies: + "@babel/highlight" "^7.0.0" + +"@babel/core@^7.0.0-beta.40": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.0.tgz#0cb0c0fd2e78a0a2bec97698f549ae9ce0b99515" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.0.0" + "@babel/helpers" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + convert-source-map "^1.1.0" + debug "^3.1.0" + json5 "^0.5.0" + lodash "^4.17.10" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0.tgz#1efd58bffa951dc846449e58ce3a1d7f02d393aa" + dependencies: + "@babel/types" "^7.0.0" + jsesc "^2.5.1" + lodash "^4.17.10" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-builder-binary-assignment-operator-visitor@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0.tgz#ba26336beb2abb547d58b6eba5b84d77975a39eb" + dependencies: + "@babel/helper-explode-assignable-expression" "^7.0.0" + "@babel/types" "^7.0.0" + +"@babel/helper-call-delegate@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0.tgz#e036956bb33d76e59c07a04a1fff144e9f62ab78" + dependencies: + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + +"@babel/helper-define-map@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.0.0.tgz#a5684dd2adf30f0137cf9b0bde436f8c2db17225" + dependencies: + "@babel/helper-function-name" "^7.0.0" + "@babel/types" "^7.0.0" + lodash "^4.17.10" + +"@babel/helper-explode-assignable-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0.tgz#fdfa4c88603ae3e954d0fc3244d5ca82fb468497" + dependencies: + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + +"@babel/helper-function-name@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0.tgz#a68cc8d04420ccc663dd258f9cc41b8261efa2d4" + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/types" "^7.0.0" + +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-hoist-variables@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-member-expression-to-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-imports@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-module-transforms@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0.tgz#b01ee7d543e81e8c3fc404b19c9f26acb6e4cf4c" + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.0.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/types" "^7.0.0" + lodash "^4.17.10" + +"@babel/helper-optimise-call-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + +"@babel/helper-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" + dependencies: + lodash "^4.17.10" + +"@babel/helper-remap-async-to-generator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0.tgz#6512273c2feb91587822335cf913fdf680c26901" + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-wrap-function" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + +"@babel/helper-replace-supers@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0.tgz#b6f21237280e0be54f591f63a464b66627ced707" + dependencies: + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + +"@babel/helper-simple-access@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.0.0.tgz#ff36a27983ae4c27122da2f7f294dced80ecbd08" + dependencies: + "@babel/template" "^7.0.0" + "@babel/types" "^7.0.0" + +"@babel/helper-split-export-declaration@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-wrap-function@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0.tgz#1c8e42a2cfb0808e3140189dfe9490782a6fa740" + dependencies: + "@babel/helper-function-name" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + +"@babel/helpers@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.0.0.tgz#7213388341eeb07417f44710fd7e1d00acfa6ac0" + dependencies: + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + +"@babel/parser@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0.tgz#697655183394facffb063437ddf52c0277698775" + +"@babel/plugin-proposal-async-generator-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0.tgz#5d1eb6b44fd388b97f964350007ab9da090b1d70" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.0.0" + "@babel/plugin-syntax-async-generators" "^7.0.0" + +"@babel/plugin-proposal-json-strings@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz#3b4d7b5cf51e1f2e70f52351d28d44fc2970d01e" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.0.0" + +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.0.0-beta.40": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + +"@babel/plugin-proposal-optional-catch-binding@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" + +"@babel/plugin-proposal-unicode-property-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz#498b39cd72536cd7c4b26177d030226eba08cd33" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.2.0" + +"@babel/plugin-syntax-async-generators@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz#bf0891dcdbf59558359d0c626fdc9490e20bc13c" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-json-strings@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz#0d259a68090e15b383ce3710e01d5b23f3770cbd" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-object-rest-spread@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz#37d8fbcaf216bd658ea1aebbeb8b75e88ebc549b" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-arrow-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz#a6c14875848c68a3b4b3163a486535ef25c7e749" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.0.0-beta.40": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0.tgz#feaf18f4bfeaf2236eea4b2d4879da83006cc8f5" + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.0.0" + +"@babel/plugin-transform-block-scoped-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.10" + +"@babel/plugin-transform-classes@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0.tgz#9e65ca401747dde99e344baea90ab50dccb4c468" + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.0.0" + "@babel/helper-function-name" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.0.0" + "@babel/helper-split-export-declaration" "^7.0.0" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-destructuring@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0.tgz#68e911e1935dda2f06b6ccbbf184ffb024e9d43a" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-dotall-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz#73a24da69bc3c370251f43a3d048198546115e58" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.1.3" + +"@babel/plugin-transform-duplicate-keys@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz#a0601e580991e7cace080e4cf919cfd58da74e86" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-exponentiation-operator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0.tgz#c51b45e090a01876f64d32b5b46c0799c85ea56c" + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-for-of@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz#f2ba4eadb83bd17dc3c7e9b30f4707365e1c3e39" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-function-name@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0.tgz#eeda18dc22584e13c3581a68f6be4822bb1d1d81" + dependencies: + "@babel/helper-function-name" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-literals@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-amd@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0.tgz#2430ab73db9960c4ca89966f425b803f5d0d0468" + dependencies: + "@babel/helper-module-transforms" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-commonjs@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0.tgz#20b906e5ab130dd8e456b694a94d9575da0fd41f" + dependencies: + "@babel/helper-module-transforms" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.0.0" + +"@babel/plugin-transform-modules-systemjs@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0.tgz#8873d876d4fee23209decc4d1feab8f198cf2df4" + dependencies: + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-modules-umd@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0.tgz#e7bb4f2a6cd199668964241951a25013450349be" + dependencies: + "@babel/helper-module-transforms" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-new-target@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-object-super@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0.tgz#b8587d511309b3a0e96e9e38169908b3e392041e" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.0.0" + +"@babel/plugin-transform-parameters@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0.tgz#da864efa111816a6df161d492f33de10e74b1949" + dependencies: + "@babel/helper-call-delegate" "^7.0.0" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-regenerator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" + dependencies: + regenerator-transform "^0.13.3" + +"@babel/plugin-transform-shorthand-properties@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz#85f8af592dcc07647541a0350e8c95c7bf419d15" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-spread@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-sticky-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + +"@babel/plugin-transform-template-literals@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65" + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-typeof-symbol@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz#4dcf1e52e943e5267b7313bff347fdbe0f81cec9" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-unicode-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.1.3" + +"@babel/preset-env@^7.0.0-beta.40": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.0.0.tgz#f450f200c14e713f98cb14d113bf0c2cfbb89ca9" + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-json-strings" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.0.0" + "@babel/plugin-syntax-async-generators" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" + "@babel/plugin-transform-block-scoped-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-dotall-regex" "^7.0.0" + "@babel/plugin-transform-duplicate-keys" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-amd" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-modules-systemjs" "^7.0.0" + "@babel/plugin-transform-modules-umd" "^7.0.0" + "@babel/plugin-transform-new-target" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typeof-symbol" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + browserslist "^4.1.0" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.3.0" + +"@babel/template@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0.tgz#c2bc9870405959c89a9c814376a2ecb247838c80" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/types" "^7.0.0" + +"@babel/traverse@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0.tgz#b1fe9b6567fdf3ab542cfad6f3b31f854d799a61" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.0.0" + "@babel/helper-function-name" "^7.0.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/types" "^7.0.0" + debug "^3.1.0" + globals "^11.1.0" + lodash "^4.17.10" + +"@babel/types@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0.tgz#6e191793d3c854d19c6749989e3bc55f0e962118" + dependencies: + esutils "^2.0.2" + lodash "^4.17.10" + to-fast-properties "^2.0.0" + +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz#54c5a964462be3d4d78af631363c18d6fa91ac26" + +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" + dependencies: + any-observable "^0.3.0" + +"@sindresorhus/is@^0.7.0": + version "0.7.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + +"@webassemblyjs/ast@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.13.tgz#81155a570bd5803a30ec31436bc2c9c0ede38f25" + dependencies: + "@webassemblyjs/helper-module-context" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/wast-parser" "1.5.13" + debug "^3.1.0" + mamacro "^0.0.3" + +"@webassemblyjs/floating-point-hex-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz#29ce0baa97411f70e8cce68ce9c0f9d819a4e298" + +"@webassemblyjs/helper-api-error@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz#e49b051d67ee19a56e29b9aa8bd949b5b4442a59" + +"@webassemblyjs/helper-buffer@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz#873bb0a1b46449231137c1262ddfd05695195a1e" + dependencies: + debug "^3.1.0" + +"@webassemblyjs/helper-code-frame@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz#1bd2181b6a0be14e004f0fe9f5a660d265362b58" + dependencies: + "@webassemblyjs/wast-printer" "1.5.13" + +"@webassemblyjs/helper-fsm@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz#cdf3d9d33005d543a5c5e5adaabf679ffa8db924" + +"@webassemblyjs/helper-module-context@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz#dc29ddfb51ed657655286f94a5d72d8a489147c5" + dependencies: + debug "^3.1.0" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz#03245817f0a762382e61733146f5773def15a747" + +"@webassemblyjs/helper-wasm-section@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz#efc76f44a10d3073b584b43c38a179df173d5c7d" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + debug "^3.1.0" + +"@webassemblyjs/ieee754@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz#573e97c8c12e4eebb316ca5fde0203ddd90b0364" + dependencies: + ieee754 "^1.1.11" + +"@webassemblyjs/leb128@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.13.tgz#ab52ebab9cec283c1c1897ac1da833a04a3f4cee" + dependencies: + long "4.0.0" + +"@webassemblyjs/utf8@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.5.13.tgz#6b53d2cd861cf94fa99c1f12779dde692fbc2469" + +"@webassemblyjs/wasm-edit@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz#c9cef5664c245cf11b3b3a73110c9155831724a8" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/helper-wasm-section" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + "@webassemblyjs/wasm-opt" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + "@webassemblyjs/wast-printer" "1.5.13" + debug "^3.1.0" + +"@webassemblyjs/wasm-gen@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz#8e6ea113c4b432fa66540189e79b16d7a140700e" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/ieee754" "1.5.13" + "@webassemblyjs/leb128" "1.5.13" + "@webassemblyjs/utf8" "1.5.13" + +"@webassemblyjs/wasm-opt@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz#147aad7717a7ee4211c36b21a5f4c30dddf33138" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + debug "^3.1.0" + +"@webassemblyjs/wasm-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz#6f46516c5bb23904fbdf58009233c2dd8a54c72f" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-api-error" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/ieee754" "1.5.13" + "@webassemblyjs/leb128" "1.5.13" + "@webassemblyjs/utf8" "1.5.13" + +"@webassemblyjs/wast-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz#5727a705d397ae6a3ae99d7f5460acf2ec646eea" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/floating-point-hex-parser" "1.5.13" + "@webassemblyjs/helper-api-error" "1.5.13" + "@webassemblyjs/helper-code-frame" "1.5.13" + "@webassemblyjs/helper-fsm" "1.5.13" + long "^3.2.0" + mamacro "^0.0.3" + +"@webassemblyjs/wast-printer@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz#bb34d528c14b4f579e7ec11e793ec50ad7cd7c95" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/wast-parser" "1.5.13" + long "^3.2.0" + +abab@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +accepts@~1.3.4, accepts@~1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.5.tgz#eb777df6011723a3b14e8a72c0805c8e86746bd2" + dependencies: + mime-types "~2.1.18" + negotiator "0.6.1" + +acorn-dynamic-import@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz#901ceee4c7faaef7e07ad2a47e890675da50a278" + dependencies: + acorn "^5.0.0" + +acorn-globals@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" + dependencies: + acorn "^5.0.0" + +acorn@^5.0.0, acorn@^5.5.3, acorn@^5.6.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.2.tgz#91fa871883485d06708800318404e72bfb26dcc5" + +ajv-errors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.0.tgz#ecf021fa108fd17dfb5e6b383f2dd233e31ffc59" + +ajv-keywords@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" + +ajv@^5.3.0: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +ajv@^6.1.0: + version "6.5.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.3.tgz#71a569d189ecf4f4f321224fecb166f071dd90f9" + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" + +ansi-colors@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.0.5.tgz#cb9dc64993b64fd6945485f797fc3853137d9a7b" + +ansi-escapes@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-escapes@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" + +ansi-html@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +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.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + dependencies: + color-convert "^1.9.0" + +ansi-styles@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" + +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +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, aproba@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + dependencies: + sprintf-js "~1.0.2" + +argv-tools@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/argv-tools/-/argv-tools-0.1.1.tgz#588283f3393ada47141440b12981cd41bf6b7032" + dependencies: + array-back "^2.0.0" + find-replace "^2.0.1" + +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-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + +arr-flatten@^1.0.1, arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + +array-back@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-2.0.0.tgz#6877471d51ecc9c9bfa6136fb6c7d5fe69748022" + dependencies: + typical "^2.6.1" + +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-find-index@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-flatten@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" + +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: + 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" + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + +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.js@^4.0.0: + version "4.10.1" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +asn1@~0.2.3: + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, 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" + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + +ast-types@0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" + +ast-types@0.11.5: + version "0.11.5" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.5.tgz#9890825d660c03c28339f315e9fa0a360e31ec28" + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + +async@^1.5.0, async@^1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^2.1.4, async@^2.4.1, async@^2.5.0, async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + dependencies: + lodash "^4.17.10" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + +autoprefixer@^6.3.1: + version "6.7.7" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-6.7.7.tgz#1dbd1c835658e35ce3f9984099db00585c782014" + dependencies: + browserslist "^1.7.6" + caniuse-db "^1.0.30000634" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^5.2.16" + postcss-value-parser "^3.2.3" + +autoprefixer@^8.1.0: + version "8.6.5" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9" + dependencies: + browserslist "^3.2.8" + caniuse-lite "^1.0.30000864" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^6.0.23" + postcss-value-parser "^3.2.3" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.0.0, babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-core@^7.0.0-0: + version "7.0.0-bridge.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" + +babel-generator@^6.18.0, babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + dependencies: + babel-helper-bindify-decorators "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-jest@^22.4.1, babel-jest@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.4.tgz#977259240420e227444ebe49e226a61e49ea659d" + dependencies: + babel-plugin-istanbul "^4.1.5" + babel-preset-jest "^22.4.4" + +babel-loader@^8.0.0-beta.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.2.tgz#2079b8ec1628284a929241da3d90f5b3de2a5ae5" + dependencies: + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" + mkdirp "^0.5.1" + util.promisify "^1.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-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-istanbul@^4.1.5: + version "4.1.6" + resolved "http://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.13.0" + find-up "^2.1.0" + istanbul-lib-instrument "^1.10.1" + test-exclude "^4.2.1" + +babel-plugin-jest-hoist@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz#b9851906eab34c7bf6f8c895a2b08bea1a844c0b" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "http://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + +babel-plugin-syntax-class-constructor-call@^6.18.0: + version "6.18.0" + resolved "http://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "http://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "http://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "http://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-export-extensions@^6.8.0: + version "6.13.0" + resolved "http://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + +babel-plugin-syntax-flow@^6.18.0: + version "6.18.0" + resolved "http://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + +babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-class-constructor-call@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" + dependencies: + babel-plugin-syntax-class-constructor-call "^6.18.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + dependencies: + babel-helper-explode-class "^6.24.1" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-export-extensions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-regenerator@^6.24.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-preset-es2015@^6.9.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + +babel-preset-jest@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz#ec9fbd8bcd7dfd24b8b5320e0e688013235b7c39" + dependencies: + babel-plugin-jest-hoist "^22.4.4" + babel-plugin-syntax-object-rest-spread "^6.13.0" + +babel-preset-stage-1@^6.5.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" + dependencies: + babel-plugin-transform-class-constructor-call "^6.24.1" + babel-plugin-transform-export-extensions "^6.22.0" + babel-preset-stage-2 "^6.24.1" + +babel-preset-stage-2@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.26.0, babel-register@^6.9.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.17.3, babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +babylon@^7.0.0-beta.47: + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80" + +balanced-match@^0.4.2: + version "0.4.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base64-js@^1.0.2: + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +batch@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + dependencies: + tweetnacl "^0.14.3" + +big.js@^3.1.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + +binary-extensions@^1.0.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + +"binary@>= 0.3.0 < 1", binary@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + +binaryextensions@2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.1.tgz#3209a51ca4a4ad541a3b8d3d6a6d5b83a2485935" + +bindings@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" + +binwrap@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/binwrap/-/binwrap-0.1.4.tgz#ca1f7870302212518fa24b07726f9c50a15c7559" + dependencies: + request "^2.81.0" + request-promise "^4.2.0" + tar "^2.2.1" + unzip "^0.1.11" + +binwrap@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/binwrap/-/binwrap-0.2.0.tgz#572d0f48c4e767d72d622f0b805ed7ce1db16f9a" + dependencies: + mustache "^2.3.0" + request "^2.87.0" + request-promise "^4.2.0" + tar "^2.2.1" + unzip-stream "^0.3.0" + +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" + +bluebird@^3.5.0, bluebird@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a" + +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + +body-parser@1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.1" + http-errors "~1.6.2" + iconv-lite "0.4.19" + on-finished "~2.3.0" + qs "6.5.1" + raw-body "2.3.2" + type-is "~1.6.15" + +bonjour@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" + dependencies: + array-flatten "^2.1.0" + deep-equal "^1.0.1" + dns-equal "^1.0.0" + dns-txt "^2.0.2" + multicast-dns "^6.0.1" + multicast-dns-service-types "^1.1.0" + +boolbase@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + dependencies: + balanced-match "^1.0.0" + 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" + +braces@^2.3.0, braces@^2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +brorand@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + +browser-process-hrtime@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + +browser-resolve@^1.11.2: + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" + dependencies: + resolve "1.1.7" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" + inherits "^2.0.1" + parse-asn1 "^5.0.0" + +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + dependencies: + pako "~1.0.5" + +browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: + version "1.7.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9" + dependencies: + caniuse-db "^1.0.30000639" + electron-to-chromium "^1.2.7" + +browserslist@^3.2.8: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + dependencies: + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +browserslist@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.1.1.tgz#328eb4ff1215b12df6589e9ab82f8adaa4fc8cd6" + dependencies: + caniuse-lite "^1.0.30000884" + electron-to-chromium "^1.3.62" + node-releases "^1.0.0-alpha.11" + +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-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + +buffer-indexof@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^4.3.0: + version "4.9.1" + resolved "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + +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" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +cacache@^10.0.4: + version "10.0.4" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" + dependencies: + bluebird "^3.5.1" + chownr "^1.0.1" + glob "^7.1.2" + graceful-fs "^4.1.11" + lru-cache "^4.1.1" + mississippi "^2.0.0" + mkdirp "^0.5.1" + move-concurrently "^1.0.1" + promise-inflight "^1.0.1" + rimraf "^2.6.2" + ssri "^5.2.4" + unique-filename "^1.1.0" + y18n "^4.0.0" + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +cacheable-request@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + dependencies: + clone-response "1.0.2" + get-stream "3.0.0" + http-cache-semantics "3.8.1" + keyv "3.0.0" + lowercase-keys "1.0.0" + normalize-url "2.0.1" + responselike "1.0.2" + +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + +callsites@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" + +camel-case@3.0.x: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + +camelcase@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +caniuse-api@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-1.6.1.tgz#b534e7c734c4f81ec5fbe8aca2ad24354b962c6c" + dependencies: + browserslist "^1.3.6" + caniuse-db "^1.0.30000529" + lodash.memoize "^4.1.2" + lodash.uniq "^4.5.0" + +caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: + version "1.0.30000885" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000885.tgz#cdc98dd168ed59678650071f7f6a70910e275bc8" + +caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864, caniuse-lite@^1.0.30000884: + version "1.0.30000885" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000885.tgz#e889e9f8e7e50e769f2a49634c932b8aee622984" + +capture-exit@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + dependencies: + rsvp "^3.3.3" + +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +caw@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95" + dependencies: + get-proxy "^2.0.0" + isurl "^1.0.0-alpha5" + tunnel-agent "^0.6.0" + url-to-options "^1.0.1" + +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + dependencies: + traverse ">=0.3.0 <0.4" + +chalk@2.3.x: + version "2.3.2" + resolved "http://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^1.0.0, chalk@^1.1.3: + version "1.1.3" + resolved "http://registry.npmjs.org/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" + +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@~0.4.0: + version "0.4.0" + resolved "http://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + dependencies: + ansi-styles "~1.0.0" + has-color "~0.1.0" + strip-ansi "~0.1.0" + +chardet@^0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + +chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" + dependencies: + anymatch "^2.0.0" + async-each "^1.0.0" + braces "^2.3.0" + glob-parent "^3.1.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + lodash.debounce "^4.0.8" + normalize-path "^2.1.1" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + upath "^1.0.5" + optionalDependencies: + fsevents "^1.2.2" + +chownr@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + +chrome-trace-event@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" + dependencies: + tslib "^1.9.0" + +ci-info@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.4.0.tgz#4841d53cad49f11b827b648ebde27a6e189b412f" + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +clap@^1.0.9: + version "1.2.3" + resolved "https://registry.yarnpkg.com/clap/-/clap-1.2.3.tgz#4f36745b32008492557f46412d66d50cb99bce51" + dependencies: + chalk "^1.1.3" + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +clean-css@4.2.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" + dependencies: + source-map "~0.6.0" + +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-cursor@^2.0.0, cli-cursor@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + dependencies: + restore-cursor "^2.0.0" + +cli-table@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" + dependencies: + colors "1.0.3" + +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.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + +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" + +cliui@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + +clone-buffer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + +clone-response@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + dependencies: + mimic-response "^1.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-stats@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + +clone@^1.0.0, clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + +clone@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + +cloneable-readable@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.2.tgz#d591dee4a8f8bc15da43ce97dceeba13d43e2a65" + dependencies: + inherits "^2.0.1" + process-nextick-args "^2.0.0" + readable-stream "^2.3.5" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +coa@~1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/coa/-/coa-1.0.4.tgz#a9ef153660d6a86a8bdec0289a5c684d217432fd" + dependencies: + q "^1.1.2" + +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" + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.3.0, color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + dependencies: + color-name "1.1.3" + +color-name@1.1.3, color-name@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +color-string@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/color-string/-/color-string-0.3.0.tgz#27d46fb67025c5c2fa25993bfbf579e47841b991" + dependencies: + color-name "^1.0.0" + +color@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/color/-/color-0.11.4.tgz#6d7b5c74fb65e841cd48792ad1ed5e07b904d764" + dependencies: + clone "^1.0.2" + color-convert "^1.3.0" + color-string "^0.3.0" + +colormin@^1.0.5: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colormin/-/colormin-1.1.2.tgz#ea2f7420a72b96881a38aae59ec124a6f7298133" + dependencies: + color "^0.11.0" + css-color-names "0.0.4" + has "^1.0.1" + +colors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" + +colors@^1.1.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.2.tgz#2df8ff573dfbf255af562f8ce7181d6b971a359b" + +colors@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + +combined-stream@1.0.6, combined-stream@~1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + dependencies: + delayed-stream "~1.0.0" + +command-line-args@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.0.2.tgz#c4e56b016636af1323cf485aa25c3cb203dfbbe4" + dependencies: + argv-tools "^0.1.1" + array-back "^2.0.0" + find-replace "^2.0.1" + lodash.camelcase "^4.3.0" + typical "^2.6.1" + +commander@2.17.x, commander@~2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + +commander@^2.8.1: + version "2.18.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.18.0.tgz#2bf063ddee7c7891176981a2cc798e5754bc6970" + +commander@~2.13.0: + version "2.13.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.13.0.tgz#6964bca67685df7c1f1430c584f07d7597885b9c" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + +component-emitter@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + +compressible@~2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz#326c5f507fbb055f54116782b969a81b67a29da7" + dependencies: + mime-db ">= 1.34.0 < 2" + +compression@^1.5.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" + dependencies: + accepts "~1.3.5" + bytes "3.0.0" + compressible "~2.0.14" + debug "2.6.9" + on-headers "~1.0.1" + safe-buffer "5.1.2" + vary "~1.1.2" + +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.5.0: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +connect-history-api-fallback@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + +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-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + dependencies: + safe-buffer "~5.1.1" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +copy-concurrently@^1.0.0: + version "1.0.5" + resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + dependencies: + aproba "^1.1.1" + fs-write-stream-atomic "^1.0.8" + iferr "^0.1.5" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.0" + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + +core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0: + version "2.5.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" + +core-util-is@1.0.2, 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" + +create-ecdh@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + dependencies: + capture-stack-trace "^1.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +cross-spawn@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.0.tgz#8254774ab4786b8c5b3cf4dfba66ce563932c252" + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +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" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + dependencies: + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" + +css-color-names@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" + +css-loader@^0.28.10: + version "0.28.11" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-0.28.11.tgz#c3f9864a700be2711bb5a2462b2389b1a392dab7" + dependencies: + babel-code-frame "^6.26.0" + css-selector-tokenizer "^0.7.0" + cssnano "^3.10.0" + icss-utils "^2.1.0" + loader-utils "^1.0.2" + lodash.camelcase "^4.3.0" + object-assign "^4.1.1" + postcss "^5.0.6" + postcss-modules-extract-imports "^1.2.0" + postcss-modules-local-by-default "^1.2.0" + postcss-modules-scope "^1.1.0" + postcss-modules-values "^1.3.0" + postcss-value-parser "^3.3.0" + source-list-map "^2.0.0" + +css-select@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + dependencies: + boolbase "~1.0.0" + css-what "2.1" + domutils "1.5.1" + nth-check "~1.0.1" + +css-selector-tokenizer@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.0.tgz#e6988474ae8c953477bf5e7efecfceccd9cf4c86" + dependencies: + cssesc "^0.1.0" + fastparse "^1.1.1" + regexpu-core "^1.0.0" + +css-what@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + +cssesc@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" + +cssnano@^3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-3.10.0.tgz#4f38f6cea2b9b17fa01490f23f1dc68ea65c1c38" + dependencies: + autoprefixer "^6.3.1" + decamelize "^1.1.2" + defined "^1.0.0" + has "^1.0.1" + object-assign "^4.0.1" + postcss "^5.0.14" + postcss-calc "^5.2.0" + postcss-colormin "^2.1.8" + postcss-convert-values "^2.3.4" + postcss-discard-comments "^2.0.4" + postcss-discard-duplicates "^2.0.1" + postcss-discard-empty "^2.0.1" + postcss-discard-overridden "^0.1.1" + postcss-discard-unused "^2.2.1" + postcss-filter-plugins "^2.0.0" + postcss-merge-idents "^2.1.5" + postcss-merge-longhand "^2.0.1" + postcss-merge-rules "^2.0.3" + postcss-minify-font-values "^1.0.2" + postcss-minify-gradients "^1.0.1" + postcss-minify-params "^1.0.4" + postcss-minify-selectors "^2.0.4" + postcss-normalize-charset "^1.1.0" + postcss-normalize-url "^3.0.7" + postcss-ordered-values "^2.1.0" + postcss-reduce-idents "^2.2.2" + postcss-reduce-initial "^1.0.0" + postcss-reduce-transforms "^1.0.3" + postcss-svgo "^2.1.1" + postcss-unique-selectors "^2.0.2" + postcss-value-parser "^3.2.3" + postcss-zindex "^2.0.1" + +csso@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/csso/-/csso-2.3.2.tgz#ddd52c587033f49e94b71fc55569f252e8ff5f85" + dependencies: + clap "^1.0.9" + source-map "^0.5.3" + +cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": + version "0.3.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" + +cssstyle@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" + dependencies: + cssom "0.3.x" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +cyclist@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" + +dargs@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-5.1.0.tgz#ec7ea50c78564cd36c9d5ec18f66329fade27829" + +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" + +data-urls@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.1.tgz#d416ac3896918f29ca84d81085bc3705834da579" + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.1.0" + whatwg-url "^7.0.0" + +date-fns@^1.27.2: + version "1.29.0" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" + +date-now@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +dateformat@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" + +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + dependencies: + ms "2.0.0" + +decamelize@^1.1.1, decamelize@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +decamelize@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" + dependencies: + xregexp "4.0.0" + +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + +decompress-response@^3.2.0, decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + dependencies: + mimic-response "^1.0.0" + +deep-equal@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + +deep-is@~0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +default-gateway@^2.6.0: + version "2.7.2" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-2.7.2.tgz#b7ef339e5e024b045467af403d50348db4642d0f" + dependencies: + execa "^0.10.0" + ip-regex "^2.1.0" + +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" + +define-properties@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + dependencies: + object-keys "^1.0.12" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +del@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + dependencies: + globby "^6.1.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + p-map "^1.1.1" + pify "^3.0.0" + rimraf "^2.2.8" + +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" + +depd@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +depd@~1.1.1, depd@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + +des.js@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +detect-conflict@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/detect-conflict/-/detect-conflict-1.0.1.tgz#088657a66a961c05019db7c4230883b1c6b4176e" + +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" + +detect-libc@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + +detect-node@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + +diff@^3.2.0, diff@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + +diffie-hellman@^5.0.0: + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" + dependencies: + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +dir-glob@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + +dns-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" + +dns-packet@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/dns-packet/-/dns-packet-1.3.1.tgz#12aa426981075be500b910eedcd0b47dd7deda5a" + dependencies: + ip "^1.1.0" + safe-buffer "^5.0.1" + +dns-txt@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/dns-txt/-/dns-txt-2.0.2.tgz#b91d806f5d27188e4ab3e7d107d881a1cc4642b6" + dependencies: + buffer-indexof "^1.0.0" + +dom-converter@~0.1: + version "0.1.4" + resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" + dependencies: + utila "~0.3" + +dom-serializer@0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + +domelementtype@1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domexception@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + dependencies: + webidl-conversions "^4.0.2" + +domhandler@2.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + dependencies: + domelementtype "1" + +domutils@1.1: + version "1.1.6" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" + dependencies: + domelementtype "1" + +domutils@1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + dependencies: + dom-serializer "0" + domelementtype "1" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +editions@^1.3.3: + version "1.3.4" + resolved "https://registry.yarnpkg.com/editions/-/editions-1.3.4.tgz#3662cb592347c3168eb8e498a0ff73271d67f50b" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +ejs@^2.5.9: + version "2.6.1" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" + +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.62: + version "1.3.64" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.64.tgz#39f5a93bf84ab7e10cfbb7522ccfc3f1feb756cf" + +elegant-spinner@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" + +elliptic@^6.0.0: + version "6.4.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +elm-assets-loader@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/elm-assets-loader/-/elm-assets-loader-0.3.0.tgz#154674cf9036f0973aedb70384e510095cfdc9a8" + dependencies: + loader-utils "^1.0.2" + +elm-format@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/elm-format/-/elm-format-0.8.0.tgz#f0d59efd0414c081d3759c35e52d466cc5f7d62c" + dependencies: + binwrap "^0.2.0" + +elm-rings@../elm-rings: + version "0.2.0" + dependencies: + elm-format "0.8.0" + elm-upgrade "^0.19.1" + +elm-upgrade@^0.19.1: + version "0.19.6" + resolved "https://registry.yarnpkg.com/elm-upgrade/-/elm-upgrade-0.19.6.tgz#5df3e2acb438f53f1035fbc4ec0cefa7ab5342d1" + dependencies: + caw "^2.0.1" + fs-extra "^0.30.0" + got "^6.6.3" + safename "^1.0.2" + semver "^5.3.0" + syncprompt "^2.0.0" + which "^1.2.11" + yn "^2.0.0" + +elm-webpack-loader@elm-community/elm-webpack-loader#master: + version "5.0.0" + resolved "https://codeload.github.com/elm-community/elm-webpack-loader/tar.gz/80f76663b8c838d3ec86f51819bb34f00902ce20" + dependencies: + elm "^0.19.0" + glob "^7.1.1" + loader-utils "^1.0.2" + node-elm-compiler "^5.0.0" + yargs "^6.5.0" + +elm@0.19, elm@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/elm/-/elm-0.19.0.tgz#c6ad86afea9e971424ebe75e36c9d03412a787fa" + dependencies: + binwrap "0.1.4" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + +end-of-stream@^1.0.0, end-of-stream@^1.1.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" + dependencies: + once "^1.4.0" + +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + tapable "^1.0.0" + +entities@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +envinfo@^5.7.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-5.10.0.tgz#503a9774ae15b93ea68bdfae2ccd6306624ea6df" + +errno@^0.1.3, errno@~0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + dependencies: + prr "~1.0.1" + +error-ex@^1.2.0, error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + dependencies: + is-arrayish "^0.2.1" + +error@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" + dependencies: + string-template "~0.2.1" + xtend "~4.0.0" + +es-abstract@^1.5.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +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.9.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.6.1" + +eslint-scope@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esprima@^4.0.0, esprima@~4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + +esrecurse@^4.1.0: + version "4.2.1" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" + dependencies: + estraverse "^4.1.0" + +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +eventemitter3@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" + +events@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +eventsource@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-0.1.6.tgz#0acede849ed7dd1ccc32c811bb11b944d4f29232" + dependencies: + original ">=0.0.5" + +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +exec-sh@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" + dependencies: + merge "^1.2.0" + +execa@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" + dependencies: + cross-spawn "^6.0.0" + 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" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + 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" + +execa@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.8.0.tgz#d8d76bbc1b55217ed190fd6dd49d3c774ecfc8da" + 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" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + +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-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +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@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + dependencies: + homedir-polyfill "^1.0.1" + +expect@^22.4.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^22.4.3" + jest-get-type "^22.4.3" + jest-matcher-utils "^22.4.3" + jest-message-util "^22.4.3" + jest-regex-util "^22.4.3" + +express@^4.16.2: + version "4.16.3" + resolved "http://registry.npmjs.org/express/-/express-4.16.3.tgz#6af8a502350db3246ecc4becf6b5a34d22f7ed53" + dependencies: + accepts "~1.3.5" + array-flatten "1.1.1" + body-parser "1.18.2" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.2" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.1" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.3" + qs "6.5.1" + range-parser "~1.2.0" + safe-buffer "5.1.1" + send "0.16.2" + serve-static "1.13.2" + setprototypeof "1.1.0" + statuses "~1.4.0" + type-is "~1.6.16" + utils-merge "1.0.1" + vary "~1.1.2" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + +external-editor@^2.1.0: + version "2.2.0" + resolved "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" + dependencies: + chardet "^0.4.0" + iconv-lite "^0.4.17" + tmp "^0.0.33" + +external-editor@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +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" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extract-text-webpack-plugin@^4.0.0-beta.0: + version "4.0.0-beta.0" + resolved "https://registry.yarnpkg.com/extract-text-webpack-plugin/-/extract-text-webpack-plugin-4.0.0-beta.0.tgz#f7361d7ff430b42961f8d1321ba8c1757b5d4c42" + dependencies: + async "^2.4.1" + loader-utils "^1.1.0" + schema-utils "^0.4.5" + webpack-sources "^1.1.0" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +extsprintf@^1.2.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" + +fast-deep-equal@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" + +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + +fast-glob@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.2.tgz#71723338ac9b4e0e2fff1d6748a2a13d5ed352bf" + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.0.1" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.1" + micromatch "^3.1.10" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fastparse@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.1.tgz#d1e2643b38a94d7583b479060e6c4affc94071f8" + +faye-websocket@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + dependencies: + websocket-driver ">=0.5.1" + +faye-websocket@~0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + dependencies: + websocket-driver ">=0.5.1" + +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@2.0.x, figures@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + dependencies: + escape-string-regexp "^1.0.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-loader@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" + dependencies: + loader-utils "^1.0.2" + schema-utils "^0.4.5" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +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.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +finalhandler@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.1.tgz#eebf4ed840079c83f4249038c9d703008301b105" + dependencies: + debug "2.6.9" + encodeurl "~1.0.2" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.4.0" + unpipe "~1.0.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + +find-elm-dependencies@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-elm-dependencies/-/find-elm-dependencies-2.0.0.tgz#435aa05a6544a0ecf54c5d1ac85cc1ca1044e4e4" + dependencies: + firstline "1.2.0" + lodash "4.17.10" + +find-replace@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-2.0.1.tgz#6d9683a7ca20f8f9aabeabad07e4e2580f528550" + dependencies: + array-back "^2.0.0" + test-value "^3.0.0" + +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.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" + +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + dependencies: + locate-path "^3.0.0" + +first-chunk-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70" + dependencies: + readable-stream "^2.0.2" + +firstline@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/firstline/-/firstline-1.2.0.tgz#c9f4886e7f7fbf0afc12d71941dce06b192aea05" + +flatten@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" + +flow-parser@^0.*: + version "0.80.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.80.0.tgz#90704d27eca33eb8c8454c61df76f08f498aaae6" + +flush-write-stream@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.4" + +follow-redirects@^1.0.0: + version "1.5.7" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.7.tgz#a39e4804dacb90202bca76a9e2ac10433ca6a69a" + dependencies: + debug "^3.1.0" + +for-in@^1.0.1, for-in@^1.0.2: + 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.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + dependencies: + asynckit "^0.4.0" + combined-stream "1.0.6" + mime-types "^2.1.12" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + dependencies: + map-cache "^0.2.2" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +from2@^2.1.0, from2@^2.1.1: + version "2.3.0" + resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + dependencies: + inherits "^2.0.1" + readable-stream "^2.0.0" + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + dependencies: + minipass "^2.2.1" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + +fs-write-stream-atomic@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + dependencies: + graceful-fs "^4.1.2" + iferr "^0.1.5" + imurmurhash "^0.1.4" + readable-stream "1 || 2" + +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.2.2, fsevents@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + dependencies: + nan "^2.9.2" + node-pre-gyp "^0.10.0" + +"fstream@>= 0.1.30 < 1": + version "0.1.31" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz#7337f058fbbbbefa8c9f561a28cab0849202c988" + dependencies: + graceful-fs "~3.0.2" + inherits "~2.0.0" + mkdirp "0.5" + rimraf "2" + +fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + 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" + +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + +get-proxy@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93" + dependencies: + npm-conf "^1.1.0" + +get-stream@3.0.0, get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +gh-got@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/gh-got/-/gh-got-6.0.0.tgz#d74353004c6ec466647520a10bd46f7299d268d0" + dependencies: + got "^7.0.0" + is-plain-obj "^1.1.0" + +github-username@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/github-username/-/github-username-4.1.0.tgz#cbe280041883206da4212ae9e4b5f169c30bf417" + dependencies: + gh-got "^6.0.0" + +glob-all@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.1.0.tgz#8913ddfb5ee1ac7812656241b03d5217c64b02ab" + dependencies: + glob "^7.0.5" + yargs "~1.2.6" + +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-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + +glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + +globals@^11.1.0: + version "11.7.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" + +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +globby@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + dependencies: + array-union "^1.0.1" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +got@^6.6.3: + version "6.7.1" + resolved "http://registry.npmjs.org/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +got@^7.0.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" + dependencies: + decompress-response "^3.2.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-plain-obj "^1.1.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + p-cancelable "^0.3.0" + p-timeout "^1.1.1" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + url-parse-lax "^1.0.0" + url-to-options "^1.0.1" + +got@^8.3.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + dependencies: + "@sindresorhus/is" "^0.7.0" + cacheable-request "^2.1.1" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + into-stream "^3.1.0" + is-retry-allowed "^1.1.0" + isurl "^1.0.0-alpha5" + lowercase-keys "^1.0.0" + mimic-response "^1.0.0" + p-cancelable "^0.4.0" + p-timeout "^2.0.1" + pify "^3.0.0" + safe-buffer "^5.1.1" + timed-out "^4.0.1" + url-parse-lax "^3.0.0" + url-to-options "^1.0.1" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +graceful-fs@~3.0.2: + version "3.0.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" + dependencies: + natives "^1.1.0" + +grouped-queue@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/grouped-queue/-/grouped-queue-0.3.3.tgz#c167d2a5319c5a0e0964ef6a25b7c2df8996c85c" + dependencies: + lodash "^4.17.2" + +growly@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" + +handle-thing@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" + +handlebars@^4.0.3: + version "4.0.12" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" + dependencies: + async "^2.5.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" + dependencies: + ajv "^5.3.0" + har-schema "^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-color@~0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + +has-symbol-support-x@^1.4.1: + version "1.4.2" + resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz#1409f98bc00247da45da67cee0a36f282ff26455" + +has-to-string-tag-x@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + dependencies: + has-symbol-support-x "^1.4.1" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + dependencies: + function-bind "^1.1.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.5" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +he@1.1.x: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +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.1: + 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.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" + +hpack.js@^2.1.6: + version "2.1.6" + resolved "https://registry.yarnpkg.com/hpack.js/-/hpack.js-2.1.6.tgz#87774c0949e513f42e84575b3c45681fade2a0b2" + dependencies: + inherits "^2.0.1" + obuf "^1.0.0" + readable-stream "^2.0.1" + wbuf "^1.1.0" + +html-comment-regex@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.1.tgz#668b93776eaae55ebde8f3ad464b307a4963625e" + +html-encoding-sniffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + dependencies: + whatwg-encoding "^1.0.1" + +html-entities@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" + +html-minifier@^3.2.3: + version "3.5.20" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.20.tgz#7b19fd3caa0cb79f7cde5ee5c3abdf8ecaa6bb14" + dependencies: + camel-case "3.0.x" + clean-css "4.2.x" + commander "2.17.x" + he "1.1.x" + param-case "2.1.x" + relateurl "0.2.x" + uglify-js "3.4.x" + +html-webpack-plugin@^3.1.0: + version "3.2.0" + resolved "http://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" + dependencies: + html-minifier "^3.2.3" + loader-utils "^0.2.16" + lodash "^4.17.3" + pretty-error "^2.0.2" + tapable "^1.0.0" + toposort "^1.0.0" + util.promisify "1.0.0" + +htmlparser2@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" + dependencies: + domelementtype "1" + domhandler "2.1" + domutils "1.1" + readable-stream "1.0" + +http-cache-semantics@3.8.1: + version "3.8.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + +http-deceiver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" + +http-errors@1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-errors@~1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + dependencies: + depd "~1.1.2" + inherits "2.0.3" + setprototypeof "1.1.0" + statuses ">= 1.4.0 < 2" + +http-parser-js@>=0.4.0: + version "0.4.13" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" + +http-proxy-middleware@~0.18.0: + version "0.18.0" + resolved "http://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz#0987e6bb5a5606e5a69168d8f967a87f15dd8aab" + dependencies: + http-proxy "^1.16.2" + is-glob "^4.0.0" + lodash "^4.17.5" + micromatch "^3.1.9" + +http-proxy@^1.16.2: + version "1.17.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" + dependencies: + eventemitter3 "^3.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + +husky@^0.14.3: + version "0.14.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-0.14.3.tgz#c69ed74e2d2779769a17ba8399b54ce0b63c12c3" + dependencies: + is-ci "^1.0.10" + normalize-path "^1.0.0" + strip-indent "^2.0.0" + +iconv-lite@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +iconv-lite@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +icss-replace-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" + +icss-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-2.1.0.tgz#83f0a0ec378bf3246178b6c2ad9136f135b1c962" + dependencies: + postcss "^6.0.1" + +ieee754@^1.1.11, ieee754@^1.1.4: + version "1.1.12" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" + +iferr@^0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + dependencies: + minimatch "^3.0.4" + +ignore@^3.3.5, ignore@^3.3.7: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" + +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + +import-local@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" + dependencies: + pkg-dir "^3.0.0" + resolve-cwd "^2.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +indent-string@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + +indexes-of@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + +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@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + 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.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + +inquirer@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.1.0" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^5.5.2" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +inquirer@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^3.0.0" + figures "^2.0.0" + lodash "^4.17.10" + mute-stream "0.0.7" + run-async "^2.2.0" + rxjs "^6.1.0" + string-width "^2.1.0" + strip-ansi "^4.0.0" + through "^2.3.6" + +internal-ip@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-3.0.1.tgz#df5c99876e1d2eb2ea2d74f520e3f669a00ece27" + dependencies: + default-gateway "^2.6.0" + ipaddr.js "^1.5.2" + +interpret@^1.0.0, interpret@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + +into-stream@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + dependencies: + from2 "^2.1.1" + p-is-promise "^1.1.0" + +invariant@^2.2.2: + version "2.2.4" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" + 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" + +invert-kv@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" + +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + +ip@^1.1.0, ip@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" + +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + +ipaddr.js@^1.5.2: + version "1.8.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.1.tgz#fa4b79fa47fd3def5e3b159825161c0a519c9427" + +is-absolute-url@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + dependencies: + kind-of "^6.0.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.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +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-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" + +is-ci@^1.0.10: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.0.tgz#3f4a08d6303a09882cef3f0fb97439c5f5ce2d53" + dependencies: + ci-info "^1.3.0" + +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + dependencies: + kind-of "^6.0.0" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +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.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-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + +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-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + +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-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + dependencies: + is-extglob "^2.1.1" + +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-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + +is-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" + dependencies: + symbol-observable "^1.1.0" + +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.1" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + dependencies: + path-is-inside "^1.0.1" + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + +is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + dependencies: + isobject "^3.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-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + +is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + +is-scoped@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-scoped/-/is-scoped-1.0.0.tgz#449ca98299e713038256289ecb2b540dc437cb30" + dependencies: + scoped-regex "^1.0.0" + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-svg@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-2.1.0.tgz#cf61090da0d9efbcab8722deba6f032208dbb0e9" + dependencies: + html-comment-regex "^1.1.0" + +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +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@^1.0.1, is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + +is-wsl@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + +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" + +isbinaryfile@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + dependencies: + buffer-alloc "^1.2.0" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +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" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul-api@^1.1.14: + version "1.3.7" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" + dependencies: + async "^2.1.4" + fileset "^2.0.2" + istanbul-lib-coverage "^1.2.1" + istanbul-lib-hook "^1.2.2" + istanbul-lib-instrument "^1.10.2" + istanbul-lib-report "^1.1.5" + istanbul-lib-source-maps "^1.2.6" + istanbul-reports "^1.5.1" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + +istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" + +istanbul-lib-hook@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2, istanbul-lib-instrument@^1.8.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.2.1" + semver "^5.3.0" + +istanbul-lib-report@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" + dependencies: + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.2.1" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + +istanbul-reports@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" + dependencies: + handlebars "^4.0.3" + +istextorbinary@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.2.1.tgz#a5231a08ef6dd22b268d0895084cf8d58b5bec53" + dependencies: + binaryextensions "2" + editions "^1.3.3" + textextensions "2" + +isurl@^1.0.0-alpha5: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + dependencies: + has-to-string-tag-x "^1.2.0" + is-object "^1.0.1" + +jest-changed-files@^22.2.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2" + dependencies: + throat "^4.0.0" + +jest-cli@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.4.tgz#68cd2a2aae983adb1e6638248ca21082fd6d9e90" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.1.11" + import-local "^1.0.0" + is-ci "^1.0.10" + istanbul-api "^1.1.14" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-instrument "^1.8.0" + istanbul-lib-source-maps "^1.2.1" + jest-changed-files "^22.2.0" + jest-config "^22.4.4" + jest-environment-jsdom "^22.4.1" + jest-get-type "^22.1.0" + jest-haste-map "^22.4.2" + jest-message-util "^22.4.0" + jest-regex-util "^22.1.0" + jest-resolve-dependencies "^22.1.0" + jest-runner "^22.4.4" + jest-runtime "^22.4.4" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" + jest-validate "^22.4.4" + jest-worker "^22.2.2" + micromatch "^2.3.11" + node-notifier "^5.2.1" + realpath-native "^1.0.0" + rimraf "^2.5.4" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + yargs "^10.0.3" + +jest-config@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.4.tgz#72a521188720597169cd8b4ff86934ef5752d86a" + dependencies: + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^22.4.1" + jest-environment-node "^22.4.1" + jest-get-type "^22.1.0" + jest-jasmine2 "^22.4.4" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.4" + pretty-format "^22.4.0" + +jest-diff@^22.4.0, jest-diff@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.4.3" + pretty-format "^22.4.3" + +jest-docblock@^22.4.0, jest-docblock@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19" + dependencies: + detect-newline "^2.1.0" + +jest-environment-jsdom@^22.4.1: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" + dependencies: + jest-mock "^22.4.3" + jest-util "^22.4.3" + jsdom "^11.5.1" + +jest-environment-node@^22.4.1: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129" + dependencies: + jest-mock "^22.4.3" + jest-util "^22.4.3" + +jest-get-type@^22.1.0, jest-get-type@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" + +jest-haste-map@^22.4.2: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.3.tgz#25842fa2ba350200767ac27f658d58b9d5c2e20b" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^22.4.3" + jest-serializer "^22.4.3" + jest-worker "^22.4.3" + micromatch "^2.3.11" + sane "^2.0.0" + +jest-jasmine2@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz#c55f92c961a141f693f869f5f081a79a10d24e23" + dependencies: + chalk "^2.0.1" + co "^4.6.0" + expect "^22.4.0" + graceful-fs "^4.1.11" + is-generator-fn "^1.0.0" + jest-diff "^22.4.0" + jest-matcher-utils "^22.4.0" + jest-message-util "^22.4.0" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" + source-map-support "^0.5.0" + +jest-leak-detector@^22.4.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz#2b7b263103afae8c52b6b91241a2de40117e5b35" + dependencies: + pretty-format "^22.4.3" + +jest-matcher-utils@^22.4.0, jest-matcher-utils@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.4.3" + pretty-format "^22.4.3" + +jest-message-util@^22.4.0, jest-message-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7" + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + +jest-mock@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7" + +jest-regex-util@^22.1.0, jest-regex-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" + +jest-resolve-dependencies@^22.1.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz#e2256a5a846732dc3969cb72f3c9ad7725a8195e" + dependencies: + jest-regex-util "^22.4.3" + +jest-resolve@^22.4.2: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" + dependencies: + browser-resolve "^1.11.2" + chalk "^2.0.1" + +jest-runner@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.4.tgz#dfca7b7553e0fa617e7b1291aeb7ce83e540a907" + dependencies: + exit "^0.1.2" + jest-config "^22.4.4" + jest-docblock "^22.4.0" + jest-haste-map "^22.4.2" + jest-jasmine2 "^22.4.4" + jest-leak-detector "^22.4.0" + jest-message-util "^22.4.0" + jest-runtime "^22.4.4" + jest-util "^22.4.1" + jest-worker "^22.2.2" + throat "^4.0.0" + +jest-runtime@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.4.tgz#9ba7792fc75582a5be0f79af6f8fe8adea314048" + dependencies: + babel-core "^6.0.0" + babel-jest "^22.4.4" + babel-plugin-istanbul "^4.1.5" + chalk "^2.0.1" + convert-source-map "^1.4.0" + exit "^0.1.2" + graceful-fs "^4.1.11" + jest-config "^22.4.4" + jest-haste-map "^22.4.2" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.4" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + realpath-native "^1.0.0" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^10.0.3" + +jest-serializer@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436" + +jest-snapshot@^22.4.0: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" + dependencies: + chalk "^2.0.1" + jest-diff "^22.4.3" + jest-matcher-utils "^22.4.3" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^22.4.3" + +jest-util@^22.4.1, jest-util@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^22.4.3" + mkdirp "^0.5.1" + source-map "^0.6.0" + +jest-validate@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.4.tgz#1dd0b616ef46c995de61810d85f57119dbbcec4d" + dependencies: + chalk "^2.0.1" + jest-config "^22.4.4" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^22.4.0" + +jest-webpack-resolver@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/jest-webpack-resolver/-/jest-webpack-resolver-0.3.0.tgz#d1c497f8f849d52f28ab76accaa52419ef600bb9" + dependencies: + chalk "^2.0.1" + command-line-args "^5.0.2" + enhanced-resolve "^4.0.0" + pkg-dir "^2.0.0" + +jest-worker@^22.2.2, jest-worker@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b" + dependencies: + merge-stream "^1.0.1" + +jest@^22.4.0: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.4.tgz#ffb36c9654b339a13e10b3d4b338eb3e9d49f6eb" + dependencies: + import-local "^1.0.0" + jest-cli "^22.4.4" + +js-base64@^2.1.9: + version "2.4.9" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" + +js-levenshtein@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.3.tgz#3ef627df48ec8cf24bacf05c0f184ff30ef413c5" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@^3.7.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@~3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.7.0.tgz#5c967ddd837a9bfdca5f2de84253abe8a1c03b80" + dependencies: + argparse "^1.0.7" + esprima "^2.6.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jscodeshift@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.4.1.tgz#da91a1c2eccfa03a3387a21d39948e251ced444a" + dependencies: + async "^1.5.0" + babel-plugin-transform-flow-strip-types "^6.8.0" + babel-preset-es2015 "^6.9.0" + babel-preset-stage-1 "^6.5.0" + babel-register "^6.9.0" + babylon "^6.17.3" + colors "^1.1.2" + flow-parser "^0.*" + lodash "^4.13.1" + micromatch "^2.3.7" + node-dir "0.1.8" + nomnom "^1.8.1" + recast "^0.12.5" + temp "^0.8.1" + write-file-atomic "^1.2.0" + +jscodeshift@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.5.1.tgz#4af6a721648be8638ae1464a190342da52960c33" + dependencies: + babel-plugin-transform-flow-strip-types "^6.8.0" + babel-preset-es2015 "^6.9.0" + babel-preset-stage-1 "^6.5.0" + babel-register "^6.9.0" + babylon "^7.0.0-beta.47" + colors "^1.1.2" + flow-parser "^0.*" + lodash "^4.13.1" + micromatch "^2.3.7" + neo-async "^2.5.0" + node-dir "0.1.8" + nomnom "^1.8.1" + recast "^0.15.0" + temp "^0.8.1" + write-file-atomic "^1.2.0" + +jsdom@^11.5.1: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + dependencies: + abab "^2.0.0" + acorn "^5.5.3" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + cssom ">= 0.3.2 < 0.4.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" + html-encoding-sniffer "^1.0.2" + left-pad "^1.3.0" + nwsapi "^2.0.7" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.87.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.4" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" + xml-name-validator "^3.0.0" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + +jsesc@~0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + +json-formatter-js@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/json-formatter-js/-/json-formatter-js-2.2.1.tgz#b101d628e86f028dc9cf9a7e1c83c65e536c9f87" + +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + +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.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" + +json3@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + +json5@^0.5.0, json5@^0.5.1: + 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" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +keyv@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + dependencies: + json-buffer "3.0.0" + +killable@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + +kind-of@^6.0.0, kind-of@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + optionalDependencies: + graceful-fs "^4.1.9" + +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" + +lcid@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" + dependencies: + invert-kv "^2.0.0" + +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + +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" + +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.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/listr-update-renderer/-/listr-update-renderer-0.4.0.tgz#344d980da2ca2e8b145ba305908f32ae3f4cc8a7" + 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.1" + resolved "https://registry.yarnpkg.com/listr-verbose-renderer/-/listr-verbose-renderer-0.4.1.tgz#8206f4cf6d52ddc5827e5fd14989e0e965933a35" + dependencies: + chalk "^1.1.3" + cli-cursor "^1.0.2" + date-fns "^1.27.2" + figures "^1.7.0" + +listr@^0.14.1: + version "0.14.2" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.2.tgz#cbe44b021100a15376addfc2d79349ee430bfe14" + dependencies: + "@samverschueren/stream-to-observable" "^0.3.0" + is-observable "^1.1.0" + is-promise "^2.1.0" + is-stream "^1.1.0" + listr-silent-renderer "^1.1.1" + listr-update-renderer "^0.4.0" + listr-verbose-renderer "^0.4.0" + p-map "^1.1.1" + rxjs "^6.1.0" + +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" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + +loader-utils@^0.2.16: + 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, loader-utils@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + 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" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + +lodash.memoize@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + +lodash@4.17.10, "lodash@>=3.5 <5", lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: + version "4.17.10" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + +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-symbols@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + dependencies: + chalk "^2.0.1" + +log-update@2.3.x: + version "2.3.0" + resolved "https://registry.yarnpkg.com/log-update/-/log-update-2.3.0.tgz#88328fd7d1ce7938b29283746f0b1bc126b24708" + dependencies: + ansi-escapes "^3.0.0" + cli-cursor "^2.0.0" + wrap-ansi "^3.0.1" + +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" + +loglevel@^1.4.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" + +long@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" + +long@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" + +loose-envify@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" + dependencies: + js-tokens "^3.0.0 || ^4.0.0" + +loud-rejection@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lower-case@^1.1.1: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + +lowercase-keys@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + +lru-cache@^4.0.1, lru-cache@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0, make-dir@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + dependencies: + pify "^3.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" + +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + +map-age-cleaner@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.2.tgz#098fb15538fd3dbe461f12745b0ca8568d4e3f74" + dependencies: + p-defer "^1.0.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + dependencies: + object-visit "^1.0.0" + +"match-stream@>= 0.0.2 < 1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" + dependencies: + buffers "~0.1.1" + readable-stream "~1.0.0" + +math-expression-evaluator@^1.2.14: + version "1.2.17" + resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" + +math-random@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + +md5.js@^1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +mem-fs-editor@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-4.0.3.tgz#d282a0c4e0d796e9eff9d75661f25f68f389af53" + dependencies: + commondir "^1.0.1" + deep-extend "^0.6.0" + ejs "^2.5.9" + glob "^7.0.3" + globby "^7.1.1" + isbinaryfile "^3.0.2" + mkdirp "^0.5.0" + multimatch "^2.0.0" + rimraf "^2.2.8" + through2 "^2.0.0" + vinyl "^2.0.1" + +mem-fs@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/mem-fs/-/mem-fs-1.1.3.tgz#b8ae8d2e3fcb6f5d3f9165c12d4551a065d989cc" + dependencies: + through2 "^2.0.0" + vinyl "^1.1.0" + vinyl-file "^2.0.0" + +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + dependencies: + mimic-fn "^1.0.0" + +mem@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-4.0.0.tgz#6437690d9471678f6cc83659c00cbafcd6b0cdaf" + dependencies: + map-age-cleaner "^0.1.1" + mimic-fn "^1.0.0" + p-is-promise "^1.1.0" + +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + dependencies: + readable-stream "^2.0.1" + +merge2@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.2.tgz#03212e3da8d86c4d8523cebd6318193414f94e34" + +merge@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +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" + +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^3.1.9: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +miller-rabin@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + +"mime-db@>= 1.34.0 < 2", mime-db@~1.36.0: + version "1.36.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19: + version "2.1.20" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" + dependencies: + mime-db "~1.36.0" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +mime@^2.0.3, mime@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" + +mimic-fn@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^0.1.0: + version "0.1.0" + resolved "http://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" + +minimist@^1.1.1, minimist@^1.2.0: + version "1.2.0" + resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.1: + version "0.0.10" + resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +minipass@^2.2.1, minipass@^2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + dependencies: + minipass "^2.2.1" + +mississippi@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" + dependencies: + concat-stream "^1.5.0" + duplexify "^3.4.2" + end-of-stream "^1.1.0" + flush-write-stream "^1.0.0" + from2 "^2.1.0" + parallel-transform "^1.1.0" + pump "^2.0.1" + pumpify "^1.3.3" + stream-each "^1.1.0" + through2 "^2.0.0" + +mixin-deep@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mkdirp@0.5, mkdirp@0.5.x, "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 "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +move-concurrently@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + dependencies: + aproba "^1.1.1" + copy-concurrently "^1.0.0" + fs-write-stream-atomic "^1.0.8" + mkdirp "^0.5.1" + rimraf "^2.5.4" + run-queue "^1.0.3" + +mri@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.1.tgz#85aa26d3daeeeedf80dc5984af95cc5ca5cad9f1" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +multicast-dns-service-types@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz#899f11d9686e5e05cb91b35d5f0e63b773cfc901" + +multicast-dns@^6.0.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/multicast-dns/-/multicast-dns-6.2.3.tgz#a0ec7bd9055c4282f790c3c82f4e28db3b31b229" + dependencies: + dns-packet "^1.3.1" + thunky "^1.0.2" + +multimatch@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/multimatch/-/multimatch-2.1.0.tgz#9c7906a22fb4c02919e2f5f75161b4cdbd4b2a2b" + dependencies: + array-differ "^1.0.0" + array-union "^1.0.1" + arrify "^1.0.0" + minimatch "^3.0.0" + +mustache@^2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.2.tgz#a6d4d9c3f91d13359ab889a812954f9230a3d0c5" + +mute-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + +nan@^2.4.0, nan@^2.9.2: + version "2.11.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.0.tgz#574e360e4d954ab16966ec102c0c049fd961a099" + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natives@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.4.tgz#2f0f224fc9a7dd53407c7667c84cf8dbe773de58" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + +needle@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.2.tgz#1120ca4c41f2fcc6976fd28a8968afe239929418" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +neo-async@^2.5.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.2.tgz#489105ce7bc54e709d736b195f82135048c50fcc" + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + +no-case@^2.2.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + dependencies: + lower-case "^1.1.1" + +node-dir@0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.8.tgz#55fb8deb699070707fb67f91a460f0448294c77d" + +node-elm-compiler@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/node-elm-compiler/-/node-elm-compiler-5.0.1.tgz#d62094ee72d6aad616ebaa71397b6cfac90381f6" + dependencies: + cross-spawn "4.0.0" + find-elm-dependencies "2.0.0" + lodash "4.17.10" + temp "^0.8.3" + +node-forge@0.7.5: + version "0.7.5" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" + +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@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.0" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-notifier@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" + dependencies: + growly "^1.3.0" + semver "^5.4.1" + shellwords "^0.1.1" + which "^1.3.0" + +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + dependencies: + detect-libc "^1.0.2" + mkdirp "^0.5.1" + needle "^2.2.1" + nopt "^4.0.1" + npm-packlist "^1.1.6" + npmlog "^4.0.2" + rc "^1.2.7" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^4" + +node-releases@^1.0.0-alpha.11: + version "1.0.0-alpha.11" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.11.tgz#73c810acc2e5b741a17ddfbb39dfca9ab9359d8a" + dependencies: + semver "^5.3.0" + +nomnom@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" + dependencies: + chalk "~0.4.0" + underscore "~1.6.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + 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@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" + +normalize-path@^2.0.1, normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-range@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + +normalize-url@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + dependencies: + prepend-http "^2.0.0" + query-string "^5.0.1" + sort-keys "^2.0.0" + +normalize-url@^1.4.0: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + +npm-bundled@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" + +npm-conf@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +npm-packlist@^1.1.6: + version "1.1.11" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + +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" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +nth-check@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + dependencies: + boolbase "~1.0.0" + +num2fraction@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + +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" + +nwsapi@^2.0.7: + version "2.0.9" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + +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-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-keys@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + dependencies: + isobject "^3.0.0" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + +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" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + dependencies: + isobject "^3.0.1" + +obuf@^1.0.0, obuf@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +onetime@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" + +opn@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" + dependencies: + is-wsl "^1.1.0" + +optimist@^0.6.1: + 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: + 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" + +original@>=0.0.5: + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" + dependencies: + url-parse "^1.4.3" + +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + +os-homedir@^1.0.0: + 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 "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + dependencies: + lcid "^1.0.0" + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-locale@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.0.1.tgz#3b014fbf01d87f60a1e5348d80fe870dc82c4620" + dependencies: + execa "^0.10.0" + lcid "^2.0.0" + mem "^4.0.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +output-file-sync@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-2.0.1.tgz#f53118282f5f553c2799541792b723a4c71430c0" + dependencies: + graceful-fs "^4.1.11" + is-plain-obj "^1.1.0" + mkdirp "^0.5.1" + +"over@>= 0.0.5 < 1": + version "0.0.5" + resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" + +p-cancelable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" + +p-cancelable@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + +p-defer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" + +p-each-series@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-each-series/-/p-each-series-1.0.0.tgz#930f3d12dd1f50e7434457a22cd6f04ac6ad7f71" + dependencies: + p-reduce "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-is-promise@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + +p-lazy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-lazy/-/p-lazy-1.0.0.tgz#ec53c802f2ee3ac28f166cc82d0b2b02de27a835" + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + dependencies: + p-try "^1.0.0" + +p-limit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" + dependencies: + p-try "^2.0.0" + +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" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + dependencies: + p-limit "^2.0.0" + +p-map@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + +p-reduce@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-reduce/-/p-reduce-1.0.0.tgz#18c2b0dd936a4690a529f8231f58a0fdb6a47dfa" + +p-timeout@^1.1.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-1.2.1.tgz#5eb3b353b7fce99f101a1038880bb054ebbea386" + dependencies: + p-finally "^1.0.0" + +p-timeout@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + dependencies: + p-finally "^1.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + +p-try@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + +pako@~1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + +parallel-transform@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" + dependencies: + cyclist "~0.2.2" + inherits "^2.0.3" + readable-stream "^2.1.5" + +param-case@2.1.x: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + dependencies: + no-case "^2.2.0" + +parse-asn1@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + +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-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + +path-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + +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, path-is-absolute@^1.0.1: + 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, path-key@^2.0.1: + 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.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +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" + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + dependencies: + pify "^3.0.0" + +pbkdf2@^3.0.3: + version "3.0.16" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^2.0.0, pify@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +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" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + dependencies: + find-up "^3.0.0" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + +portfinder@^1.0.9: + version "1.0.17" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.17.tgz#a8a1691143e46c4735edefcf4fbcccedad26456a" + dependencies: + async "^1.5.2" + debug "^2.2.0" + mkdirp "0.5.x" + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + +postcss-calc@^5.2.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" + dependencies: + postcss "^5.0.2" + postcss-message-helpers "^2.0.0" + reduce-css-calc "^1.2.6" + +postcss-colormin@^2.1.8: + version "2.2.2" + resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" + dependencies: + colormin "^1.0.5" + postcss "^5.0.13" + postcss-value-parser "^3.2.3" + +postcss-convert-values@^2.3.4: + version "2.6.1" + resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-2.6.1.tgz#bbd8593c5c1fd2e3d1c322bb925dcae8dae4d62d" + dependencies: + postcss "^5.0.11" + postcss-value-parser "^3.1.2" + +postcss-discard-comments@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-2.0.4.tgz#befe89fafd5b3dace5ccce51b76b81514be00e3d" + dependencies: + postcss "^5.0.14" + +postcss-discard-duplicates@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-2.1.0.tgz#b9abf27b88ac188158a5eb12abcae20263b91932" + dependencies: + postcss "^5.0.4" + +postcss-discard-empty@^2.0.1: + version "2.1.0" + resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + dependencies: + postcss "^5.0.14" + +postcss-discard-overridden@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-0.1.1.tgz#8b1eaf554f686fb288cd874c55667b0aa3668d58" + dependencies: + postcss "^5.0.16" + +postcss-discard-unused@^2.2.1: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + dependencies: + postcss "^5.0.14" + uniqs "^2.0.0" + +postcss-filter-plugins@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" + dependencies: + postcss "^5.0.4" + +postcss-merge-idents@^2.1.5: + version "2.1.7" + resolved "https://registry.yarnpkg.com/postcss-merge-idents/-/postcss-merge-idents-2.1.7.tgz#4c5530313c08e1d5b3bbf3d2bbc747e278eea270" + dependencies: + has "^1.0.1" + postcss "^5.0.10" + postcss-value-parser "^3.1.1" + +postcss-merge-longhand@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-2.0.2.tgz#23d90cd127b0a77994915332739034a1a4f3d658" + dependencies: + postcss "^5.0.4" + +postcss-merge-rules@^2.0.3: + version "2.1.2" + resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-2.1.2.tgz#d1df5dfaa7b1acc3be553f0e9e10e87c61b5f721" + dependencies: + browserslist "^1.5.2" + caniuse-api "^1.5.2" + postcss "^5.0.4" + postcss-selector-parser "^2.2.2" + vendors "^1.0.0" + +postcss-message-helpers@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-message-helpers/-/postcss-message-helpers-2.0.0.tgz#a4f2f4fab6e4fe002f0aed000478cdf52f9ba60e" + +postcss-minify-font-values@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-1.0.5.tgz#4b58edb56641eba7c8474ab3526cafd7bbdecb69" + dependencies: + object-assign "^4.0.1" + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-minify-gradients@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-1.0.5.tgz#5dbda11373703f83cfb4a3ea3881d8d75ff5e6e1" + dependencies: + postcss "^5.0.12" + postcss-value-parser "^3.3.0" + +postcss-minify-params@^1.0.4: + version "1.2.2" + resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-1.2.2.tgz#ad2ce071373b943b3d930a3fa59a358c28d6f1f3" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.2" + postcss-value-parser "^3.0.2" + uniqs "^2.0.0" + +postcss-minify-selectors@^2.0.4: + version "2.1.1" + resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-2.1.1.tgz#b2c6a98c0072cf91b932d1a496508114311735bf" + dependencies: + alphanum-sort "^1.0.2" + has "^1.0.1" + postcss "^5.0.14" + postcss-selector-parser "^2.0.0" + +postcss-modules-extract-imports@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.0.tgz#66140ecece38ef06bf0d3e355d69bf59d141ea85" + dependencies: + postcss "^6.0.1" + +postcss-modules-local-by-default@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz#f7d80c398c5a393fa7964466bd19500a7d61c069" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-scope@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz#d6ea64994c79f97b62a72b426fbe6056a194bb90" + dependencies: + css-selector-tokenizer "^0.7.0" + postcss "^6.0.1" + +postcss-modules-values@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz#ecffa9d7e192518389f42ad0e83f72aec456ea20" + dependencies: + icss-replace-symbols "^1.1.0" + postcss "^6.0.1" + +postcss-normalize-charset@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-1.1.1.tgz#ef9ee71212d7fe759c78ed162f61ed62b5cb93f1" + dependencies: + postcss "^5.0.5" + +postcss-normalize-url@^3.0.7: + version "3.0.8" + resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-3.0.8.tgz#108f74b3f2fcdaf891a2ffa3ea4592279fc78222" + dependencies: + is-absolute-url "^2.0.0" + normalize-url "^1.4.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + +postcss-ordered-values@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-2.2.3.tgz#eec6c2a67b6c412a8db2042e77fe8da43f95c11d" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.1" + +postcss-reduce-idents@^2.2.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/postcss-reduce-idents/-/postcss-reduce-idents-2.4.0.tgz#c2c6d20cc958284f6abfbe63f7609bf409059ad3" + dependencies: + postcss "^5.0.4" + postcss-value-parser "^3.0.2" + +postcss-reduce-initial@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-1.0.1.tgz#68f80695f045d08263a879ad240df8dd64f644ea" + dependencies: + postcss "^5.0.4" + +postcss-reduce-transforms@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-1.0.4.tgz#ff76f4d8212437b31c298a42d2e1444025771ae1" + dependencies: + has "^1.0.1" + postcss "^5.0.8" + postcss-value-parser "^3.0.1" + +postcss-selector-parser@^2.0.0, postcss-selector-parser@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90" + dependencies: + flatten "^1.0.2" + indexes-of "^1.0.1" + uniq "^1.0.1" + +postcss-svgo@^2.1.1: + version "2.1.6" + resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-2.1.6.tgz#b6df18aa613b666e133f08adb5219c2684ac108d" + dependencies: + is-svg "^2.0.0" + postcss "^5.0.14" + postcss-value-parser "^3.2.3" + svgo "^0.7.0" + +postcss-unique-selectors@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-2.0.2.tgz#981d57d29ddcb33e7b1dfe1fd43b8649f933ca1d" + dependencies: + alphanum-sort "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + +postcss-zindex@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-zindex/-/postcss-zindex-2.2.0.tgz#d2109ddc055b91af67fc4cb3b025946639d2af22" + dependencies: + has "^1.0.1" + postcss "^5.0.4" + uniqs "^2.0.0" + +postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0.14, postcss@^5.0.16, postcss@^5.0.2, postcss@^5.0.4, postcss@^5.0.5, postcss@^5.0.6, postcss@^5.0.8, postcss@^5.2.16: + version "5.2.18" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + dependencies: + chalk "^1.1.3" + js-base64 "^2.1.9" + source-map "^0.5.6" + supports-color "^3.2.3" + +postcss@^6.0.1, postcss@^6.0.23: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.4.0" + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +prepend-http@^1.0.0, prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +prettier@^1.10.2, prettier@^1.12.1: + version "1.14.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.2.tgz#0ac1c6e1a90baa22a62925f41963c841983282f9" + +pretty-bytes@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-4.0.2.tgz#b2bf82e7350d65c6c33aa95aaa5a4f6327f61cd9" + +pretty-error@^2.0.2: + version "2.1.1" + resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + dependencies: + renderkid "^2.0.1" + utila "~0.4" + +pretty-format@^22.4.0, pretty-format@^22.4.3: + version "22.4.3" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + +pretty-quick@^1.2.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-1.6.0.tgz#afc3591eb5c4cf37614a305d489a8a40e57c9258" + dependencies: + chalk "^2.3.0" + execa "^0.8.0" + find-up "^2.1.0" + ignore "^3.3.7" + mri "^1.1.0" + +private@^0.1.6, private@^0.1.8, private@~0.1.5: + version "0.1.8" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +promise-inflight@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + +proxy-addr@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.8.0" + +prr@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +psl@^1.1.24: + version "1.1.29" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + +public-encrypt@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + +"pullstream@>= 0.4.1 < 1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/pullstream/-/pullstream-0.4.1.tgz#d6fb3bf5aed697e831150eb1002c25a3f8ae1314" + dependencies: + over ">= 0.0.5 < 1" + readable-stream "~1.0.31" + setimmediate ">= 1.0.2 < 2" + slice-stream ">= 1.0.0 < 2" + +pump@^2.0.0, pump@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +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" + +punycode@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + +qs@6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +query-string@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.1.tgz#a78c012b71c17e05f2e3fa2319dd330682efb3cb" + dependencies: + decode-uri-component "^0.2.0" + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + +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" + +querystringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz#fa3ed6e68eb15159457c89b37bc6472833195755" + +randomatic@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.0.6" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + +range-parser@^1.0.3, range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + dependencies: + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-chunk@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/read-chunk/-/read-chunk-2.1.0.tgz#6a04c0928005ed9d42e1a6ac5600e19cbc7ff655" + dependencies: + pify "^3.0.0" + safe-buffer "^5.1.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-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + dependencies: + find-up "^2.0.0" + read-pkg "^3.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" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@1.0, readable-stream@~1.0.0, readable-stream@~1.0.31: + 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" + +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" + +realpath-native@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz#cd51ce089b513b45cf9b1516c82989b51ccc6560" + dependencies: + util.promisify "^1.0.0" + +recast@^0.12.5: + version "0.12.9" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.12.9.tgz#e8e52bdb9691af462ccbd7c15d5a5113647a15f1" + dependencies: + ast-types "0.10.1" + core-js "^2.4.1" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + +recast@^0.15.0: + version "0.15.3" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.15.3.tgz#5fc1fd1c8e2d4d027ee3977a176bbb8d1c83305e" + dependencies: + ast-types "0.11.5" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + +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" + +reduce-css-calc@^1.2.6: + version "1.3.0" + resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" + dependencies: + balanced-match "^0.4.2" + math-expression-evaluator "^1.2.14" + reduce-function-call "^1.0.1" + +reduce-function-call@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.2.tgz#5a200bf92e0e37751752fe45b0ab330fd4b6be99" + dependencies: + balanced-match "^0.4.2" + +regenerate-unicode-properties@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" + dependencies: + regenerate "^1.4.0" + +regenerate@^1.2.1, regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" + +regenerator-runtime@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regenerator-transform@^0.13.3: + version "0.13.3" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" + dependencies: + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexpu-core@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-1.0.0.tgz#86a763f58ee4d7c2f6b102e4764050de7ed90c6b" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regexpu-core@^4.1.3, regexpu-core@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d" + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^7.0.0" + regjsgen "^0.4.0" + regjsparser "^0.3.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.0.2" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsgen@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.4.0.tgz#c1eb4c89a209263f8717c782591523913ede2561" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +regjsparser@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.3.0.tgz#3c326da7fcfd69fa0d332575a41c8c0cdf588c96" + dependencies: + jsesc "~0.5.0" + +relateurl@0.2.x: + version "0.2.7" + resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +renderkid@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" + dependencies: + css-select "^1.1.0" + dom-converter "~0.1" + htmlparser2 "~3.3.0" + strip-ansi "^3.0.0" + utila "~0.3" + +repeat-element@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" + +repeat-string@^1.5.2, repeat-string@^1.6.1: + 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" + +replace-ext@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + +request-promise@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-4.2.2.tgz#d1ea46d654a6ee4f8ee6a4fea1018c22911904b4" + dependencies: + bluebird "^3.5.0" + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + +request@^2.81.0, request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.0" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +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" + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + +resolve-dir@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + +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.3.2: + version "1.8.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + dependencies: + path-parse "^1.0.5" + +responselike@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + dependencies: + lowercase-keys "^1.0.0" + +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" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + dependencies: + onetime "^2.0.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +rimraf@~2.2.6: + version "2.2.8" + resolved "http://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rsvp@^3.3.3: + version "3.6.2" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + +run-async@^2.0.0, run-async@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + dependencies: + is-promise "^2.1.0" + +run-queue@^1.0.0, run-queue@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + dependencies: + aproba "^1.1.1" + +rxjs@^5.5.2: + version "5.5.12" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" + dependencies: + symbol-observable "1.0.1" + +rxjs@^6.1.0: + version "6.3.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.2.tgz#6a688b16c4e6e980e62ea805ec30648e1c60907f" + dependencies: + tslib "^1.9.0" + +safe-buffer@5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + dependencies: + ret "~0.1.10" + +safename@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/safename/-/safename-1.0.2.tgz#e659f8ea3ce2148880fbf56de78d8e061f229031" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + +sane@^2.0.0: + version "2.5.2" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" + dependencies: + anymatch "^2.0.0" + capture-exit "^1.2.0" + exec-sh "^0.2.0" + fb-watchman "^2.0.0" + micromatch "^3.1.4" + minimist "^1.1.1" + walker "~1.0.5" + watch "~0.18.0" + optionalDependencies: + fsevents "^1.2.3" + +sax@^1.2.4, sax@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + +schema-utils@^0.4.4, schema-utils@^0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + +scoped-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8" + +select-hose@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" + +selfsigned@^1.9.1: + version "1.10.3" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.3.tgz#d628ecf9e3735f84e8bafba936b3cf85bea43823" + dependencies: + node-forge "0.7.5" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: + version "5.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" + +send@0.16.2: + version "0.16.2" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.4.0" + +serialize-javascript@^1.4.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" + +serve-index@^1.7.2: + version "1.9.1" + resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + dependencies: + accepts "~1.3.4" + batch "0.6.1" + debug "2.6.9" + escape-html "~1.0.3" + http-errors "~1.6.2" + mime-types "~2.1.17" + parseurl "~1.3.2" + +serve-static@1.13.2: + version "1.13.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.2" + +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" + +set-value@^0.4.3: + version "0.4.3" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.1" + to-object-path "^0.3.0" + +set-value@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +"setimmediate@>= 1.0.1 < 2", "setimmediate@>= 1.0.2 < 2", setimmediate@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +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.8.0: + version "0.8.2" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.2.tgz#345b7df7763f4c2340d584abb532c5f752ca9e35" + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +shellwords@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +simple-progress-webpack-plugin@^1.0.4: + version "1.1.2" + resolved "https://registry.yarnpkg.com/simple-progress-webpack-plugin/-/simple-progress-webpack-plugin-1.1.2.tgz#eb366f6abd2e1f68cb8512762bbfcf3bce057d4b" + dependencies: + chalk "2.3.x" + figures "2.0.x" + log-update "2.3.x" + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + +slice-ansi@0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" + +"slice-stream@>= 1.0.0 < 2": + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-stream/-/slice-stream-1.0.0.tgz#5b33bd66f013b1a7f86460b03d463dec39ad3ea0" + dependencies: + readable-stream "~1.0.31" + +slide@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +sockjs-client@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" + dependencies: + debug "^2.6.6" + eventsource "0.1.6" + faye-websocket "~0.11.0" + inherits "^2.0.1" + json3 "^3.3.2" + url-parse "^1.1.8" + +sockjs@0.3.19: + version "0.3.19" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" + dependencies: + faye-websocket "^0.10.0" + uuid "^3.0.1" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + dependencies: + is-plain-obj "^1.0.0" + +sort-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + dependencies: + is-plain-obj "^1.0.0" + +source-list-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + +source-map-resolve@^0.5.0: + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" + dependencies: + atob "^2.1.1" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.0: + version "0.5.9" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-url@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + +spdx-correct@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.0.0.tgz#05a5b4d7153a195bc92c3c425b69f3b2a9524c82" + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz#2c7ae61056c714a5b9b9b2b2af7d311ef5c78fe9" + +spdx-expression-parse@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.1.tgz#e2a303236cac54b04031fa7a5a79c7e701df852f" + +spdy-transport@^2.0.18: + version "2.1.0" + resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-2.1.0.tgz#4bbb15aaffed0beefdd56ad61dbdc8ba3e2cb7a1" + dependencies: + debug "^2.6.8" + detect-node "^2.0.3" + hpack.js "^2.1.6" + obuf "^1.1.1" + readable-stream "^2.2.9" + safe-buffer "^5.0.1" + wbuf "^1.7.2" + +spdy@^3.4.1: + version "3.4.7" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-3.4.7.tgz#42ff41ece5cc0f99a3a6c28aabb73f5c3b03acbc" + dependencies: + debug "^2.6.8" + handle-thing "^1.2.5" + http-deceiver "^1.2.7" + safe-buffer "^5.0.1" + select-hose "^2.0.0" + spdy-transport "^2.0.18" + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + dependencies: + extend-shallow "^3.0.0" + +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.14.2" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + safer-buffer "^2.0.2" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +ssri@^5.2.4: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.3.0.tgz#ba3872c9c6d33a0704a7d71ff045e5ec48999d06" + dependencies: + safe-buffer "^5.1.1" + +stack-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +"statuses@>= 1.3.1 < 2", "statuses@>= 1.4.0 < 2": + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + +statuses@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + +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-each@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" + dependencies: + end-of-stream "^1.1.0" + stream-shift "^1.0.0" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-shift@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" + +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + +string-length@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" + dependencies: + astral-regex "^1.0.0" + strip-ansi "^4.0.0" + +string-template@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" + +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@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@^1.0.0, string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + dependencies: + safe-buffer "~5.1.0" + +string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +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-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" + +strip-bom-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom-stream/-/strip-bom-stream-2.0.0.tgz#f87db5ef2613f6968aa545abfe1ec728b6a829ca" + dependencies: + first-chunk-stream "^2.0.0" + strip-bom "^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@^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-indent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + +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" + +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.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" + +supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + dependencies: + has-flag "^3.0.0" + +svgo@^0.7.0: + version "0.7.2" + resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" + dependencies: + coa "~1.0.1" + colors "~1.1.2" + csso "~2.3.1" + js-yaml "~3.7.0" + mkdirp "~0.5.1" + sax "~1.2.1" + whet.extend "~0.9.9" + +symbol-observable@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" + +symbol-observable@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + +symbol-tree@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +syncprompt@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/syncprompt/-/syncprompt-2.0.0.tgz#b4f303d385e6a0e214614a12d22e8d97234669a4" + dependencies: + bindings "^1.2.1" + nan "^2.4.0" + +tapable@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" + +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" + +tar@^4: + version "4.4.6" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" + dependencies: + chownr "^1.0.1" + fs-minipass "^1.2.5" + minipass "^2.3.3" + minizlib "^1.1.0" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + +temp@^0.8.1, temp@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + dependencies: + os-tmpdir "^1.0.0" + rimraf "~2.2.6" + +test-exclude@^4.2.1: + version "4.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" + 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" + +test-value@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/test-value/-/test-value-3.0.0.tgz#9168c062fab11a86b8d444dd968bb4b73851ce92" + dependencies: + array-back "^2.0.0" + typical "^2.6.1" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +textextensions@2: + version "2.2.0" + resolved "https://registry.yarnpkg.com/textextensions/-/textextensions-2.2.0.tgz#38ac676151285b658654581987a0ce1a4490d286" + +throat@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" + +through2@^2.0.0: + 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: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +thunky@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.0.2.tgz#a862e018e3fb1ea2ec3fce5d55605cf57f247371" + +timed-out@^4.0.0, timed-out@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + +timers-browserify@^2.0.4: + version "2.0.10" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" + dependencies: + setimmediate "^1.0.4" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" + +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.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +toposort@^1.0.0: + version "1.0.7" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" + +tough-cookie@>=2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + dependencies: + psl "^1.1.24" + punycode "^1.4.1" + +tr46@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + dependencies: + punycode "^2.1.0" + +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + +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.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +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" + +type-is@~1.6.15, type-is@~1.6.16: + version "1.6.16" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.16.tgz#f89ce341541c672b25ee7ae3c73dee3b2be50194" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.18" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +typical@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/typical/-/typical-2.6.1.tgz#5c080e5d661cbbe38259d2e70a3c7253e873881d" + +uglify-es@^3.3.4: + version "3.3.9" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677" + dependencies: + commander "~2.13.0" + source-map "~0.6.1" + +uglify-js@3.4.x, uglify-js@^3.1.4: + version "3.4.9" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" + dependencies: + commander "~2.17.1" + source-map "~0.6.1" + +uglifyjs-webpack-plugin@^1.2.4: + version "1.3.0" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz#75f548160858163a08643e086d5fefe18a5d67de" + dependencies: + cacache "^10.0.4" + find-cache-dir "^1.0.0" + schema-utils "^0.4.5" + serialize-javascript "^1.4.0" + source-map "^0.6.1" + uglify-es "^3.3.4" + webpack-sources "^1.1.0" + worker-farm "^1.5.2" + +underscore@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" + +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" + +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" + dependencies: + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" + +unicode-match-property-value-ecmascript@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" + +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" + +union-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^0.4.3" + +uniq@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + +uniqs@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + +unique-filename@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + dependencies: + unique-slug "^2.0.0" + +unique-slug@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + dependencies: + imurmurhash "^0.1.4" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +untildify@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + +unzip-stream@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/unzip-stream/-/unzip-stream-0.3.0.tgz#c30c054cd6b0d64b13a23cd3ece911eb0b2b52d8" + dependencies: + binary "^0.3.0" + mkdirp "^0.5.1" + +unzip@^0.1.11: + version "0.1.11" + resolved "https://registry.yarnpkg.com/unzip/-/unzip-0.1.11.tgz#89749c63b058d7d90d619f86b98aa1535d3b97f0" + dependencies: + binary ">= 0.3.0 < 1" + fstream ">= 0.1.30 < 1" + match-stream ">= 0.0.2 < 1" + pullstream ">= 0.4.1 < 1" + readable-stream "~1.0.31" + setimmediate ">= 1.0.1 < 2" + +upath@^1.0.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" + +upper-case@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + +url-join@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a" + +url-loader@^1.0.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.1.tgz#4d1f3b4f90dde89f02c008e662d604d7511167c1" + dependencies: + loader-utils "^1.1.0" + mime "^2.0.3" + schema-utils "^1.0.0" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + dependencies: + prepend-http "^1.0.1" + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + dependencies: + prepend-http "^2.0.0" + +url-parse@^1.1.8, url-parse@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.3.tgz#bfaee455c889023219d757e045fa6a684ec36c15" + dependencies: + querystringify "^2.0.0" + requires-port "^1.0.0" + +url-to-options@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + +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" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util.promisify@1.0.0, util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.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" + +util@^0.10.3: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + dependencies: + inherits "2.0.3" + +utila@~0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" + +utila@~0.4: + version "0.4.0" + resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@^3.0.1, uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" + +v8-compile-cache@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +vendors@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vinyl-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/vinyl-file/-/vinyl-file-2.0.0.tgz#a7ebf5ffbefda1b7d18d140fcb07b223efb6751a" + dependencies: + graceful-fs "^4.1.2" + pify "^2.3.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + strip-bom-stream "^2.0.0" + vinyl "^1.1.0" + +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" + +vinyl@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" + dependencies: + clone "^2.1.1" + clone-buffer "^1.0.0" + clone-stats "^1.0.0" + cloneable-readable "^1.0.0" + remove-trailing-separator "^1.0.1" + replace-ext "^1.0.0" + +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" + +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + dependencies: + browser-process-hrtime "^0.1.2" + +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.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986" + dependencies: + exec-sh "^0.2.0" + minimist "^1.2.0" + +watchpack@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" + dependencies: + chokidar "^2.0.2" + graceful-fs "^4.1.2" + neo-async "^2.5.0" + +wbuf@^1.1.0, wbuf@^1.7.2: + version "1.7.3" + resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df" + dependencies: + minimalistic-assert "^1.0.0" + +webidl-conversions@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + +webpack-addons@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/webpack-addons/-/webpack-addons-1.1.5.tgz#2b178dfe873fb6e75e40a819fa5c26e4a9bc837a" + dependencies: + jscodeshift "^0.4.0" + +webpack-cli@^2.0.10: + version "2.1.5" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-2.1.5.tgz#3081fdeb2f205f0a54aa397986880b0c20a71f7a" + dependencies: + chalk "^2.4.1" + cross-spawn "^6.0.5" + diff "^3.5.0" + enhanced-resolve "^4.0.0" + envinfo "^5.7.0" + glob-all "^3.1.0" + global-modules "^1.0.0" + got "^8.3.1" + import-local "^1.0.0" + inquirer "^5.2.0" + interpret "^1.1.0" + jscodeshift "^0.5.0" + listr "^0.14.1" + loader-utils "^1.1.0" + lodash "^4.17.10" + log-symbols "^2.2.0" + mkdirp "^0.5.1" + p-each-series "^1.0.0" + p-lazy "^1.0.0" + prettier "^1.12.1" + supports-color "^5.4.0" + v8-compile-cache "^2.0.0" + webpack-addons "^1.1.5" + yargs "^11.1.0" + yeoman-environment "^2.1.1" + yeoman-generator "^2.0.5" + +webpack-dev-middleware@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.2.0.tgz#a20ceef194873710052da678f3c6ee0aeed92552" + dependencies: + loud-rejection "^1.6.0" + memory-fs "~0.4.1" + mime "^2.3.1" + path-is-absolute "^1.0.0" + range-parser "^1.0.3" + url-join "^4.0.0" + webpack-log "^2.0.0" + +webpack-dev-server@^3.1.1: + version "3.1.8" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.8.tgz#eb7a95945d1108170f902604fb3b939533d9daeb" + dependencies: + ansi-html "0.0.7" + bonjour "^3.5.0" + chokidar "^2.0.0" + compression "^1.5.2" + connect-history-api-fallback "^1.3.0" + debug "^3.1.0" + del "^3.0.0" + express "^4.16.2" + html-entities "^1.2.0" + http-proxy-middleware "~0.18.0" + import-local "^2.0.0" + internal-ip "^3.0.1" + ip "^1.1.5" + killable "^1.0.0" + loglevel "^1.4.1" + opn "^5.1.0" + portfinder "^1.0.9" + schema-utils "^1.0.0" + selfsigned "^1.9.1" + serve-index "^1.7.2" + sockjs "0.3.19" + sockjs-client "1.1.5" + spdy "^3.4.1" + strip-ansi "^3.0.0" + supports-color "^5.1.0" + webpack-dev-middleware "3.2.0" + webpack-log "^2.0.0" + yargs "12.0.2" + +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" + dependencies: + ansi-colors "^3.0.0" + uuid "^3.3.2" + +webpack-manifest-plugin@^2.0.0-rc.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.3.tgz#b42c5b08a0319cedb3ec45d9375a9ecee0acf5eb" + dependencies: + fs-extra "^0.30.0" + lodash ">=3.5 <5" + tapable "^1.0.0" + +webpack-merge@^4.1.2: + version "4.1.4" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.4.tgz#0fde38eabf2d5fd85251c24a5a8c48f8a3f4eb7b" + dependencies: + lodash "^4.17.5" + +webpack-sources@^1.1.0, webpack-sources@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.2.0.tgz#18181e0d013fce096faf6f8e6d41eeffffdceac2" + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^4.1.1: + version "4.17.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.17.2.tgz#49feb20205bd15f0a5f1fe0a12097d5d9931878d" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-module-context" "1.5.13" + "@webassemblyjs/wasm-edit" "1.5.13" + "@webassemblyjs/wasm-opt" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + acorn "^5.6.2" + acorn-dynamic-import "^3.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + micromatch "^3.1.8" + mkdirp "~0.5.0" + neo-async "^2.5.0" + node-libs-browser "^2.0.0" + schema-utils "^0.4.4" + tapable "^1.0.0" + uglifyjs-webpack-plugin "^1.2.4" + watchpack "^1.5.0" + webpack-sources "^1.2.0" + +websocket-driver@>=0.5.1: + version "0.7.0" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + dependencies: + http-parser-js ">=0.4.0" + websocket-extensions ">=0.1.1" + +websocket-extensions@>=0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.4.tgz#63fb016b7435b795d9025632c086a5209dbd2621" + dependencies: + iconv-lite "0.4.23" + +whatwg-mimetype@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whatwg-url@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" + +whet.extend@~0.9.9: + version "0.9.9" + resolved "https://registry.yarnpkg.com/whet.extend/-/whet.extend-0.9.9.tgz#f877d5bf648c97e5aa542fadc16d6a259b9c11a1" + +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + +which-module@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + +which@^1.2.11, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + dependencies: + string-width "^1.0.2 || 2" + +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.5.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + dependencies: + errno "~0.1.7" + +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + +wrap-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz#288a04d87eda5c286e060dfe8f135ce8d007f8ba" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^1.2.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write-file-atomic@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + dependencies: + async-limiter "~1.0.0" + +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + +xregexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" + +xtend@^4.0.0, xtend@~4.0.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" + +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + +yargs-parser@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + dependencies: + camelcase "^4.1.0" + +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-parser@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" + dependencies: + camelcase "^4.1.0" + +yargs-parser@^9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + dependencies: + camelcase "^4.1.0" + +yargs@12.0.2: + version "12.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.2.tgz#fe58234369392af33ecbef53819171eff0f5aadc" + dependencies: + cliui "^4.0.0" + decamelize "^2.0.0" + find-up "^3.0.0" + get-caller-file "^1.0.1" + os-locale "^3.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^10.1.0" + +yargs@^10.0.3: + version "10.1.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^8.1.0" + +yargs@^11.1.0: + version "11.1.0" + resolved "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + +yargs@^6.5.0: + version "6.6.0" + resolved "http://registry.npmjs.org/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@~1.2.6: + version "1.2.6" + resolved "http://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz#9c7b4a82fd5d595b2bf17ab6dcc43135432fe34b" + dependencies: + minimist "^0.1.0" + +yeoman-environment@^2.0.5, yeoman-environment@^2.1.1: + version "2.3.3" + resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-2.3.3.tgz#1bd9720714cc49036e901503a789d809df8f51bf" + dependencies: + chalk "^2.4.1" + cross-spawn "^6.0.5" + debug "^3.1.0" + diff "^3.5.0" + escape-string-regexp "^1.0.2" + globby "^8.0.1" + grouped-queue "^0.3.3" + inquirer "^6.0.0" + is-scoped "^1.0.0" + lodash "^4.17.10" + log-symbols "^2.2.0" + mem-fs "^1.1.0" + strip-ansi "^4.0.0" + text-table "^0.2.0" + untildify "^3.0.3" + +yeoman-generator@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-2.0.5.tgz#57b0b3474701293cc9ec965288f3400b00887c81" + dependencies: + async "^2.6.0" + chalk "^2.3.0" + cli-table "^0.3.1" + cross-spawn "^6.0.5" + dargs "^5.1.0" + dateformat "^3.0.3" + debug "^3.1.0" + detect-conflict "^1.0.0" + error "^7.0.2" + find-up "^2.1.0" + github-username "^4.0.0" + istextorbinary "^2.2.1" + lodash "^4.17.10" + make-dir "^1.1.0" + mem-fs-editor "^4.0.0" + minimist "^1.2.0" + pretty-bytes "^4.0.2" + read-chunk "^2.1.0" + read-pkg-up "^3.0.0" + rimraf "^2.6.2" + run-async "^2.0.0" + shelljs "^0.8.0" + text-table "^0.2.0" + through2 "^2.0.0" + yeoman-environment "^2.0.5" + +yn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a" diff --git a/package.json b/package.json index 6548b0c..76c71c9 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { "name": "elm-rings", - "version": "0.2.0", - "description": "Capture and record the state of your Elm application.", + "version": "0.3.0", + "description": "Capture and record the state of your Elm application in Elm 0.19 and 0.18.", "main": "./distribution/ElmRings.js", "scripts": { "build": "babel source --out-dir distribution", - "example": - "yarn run webpack-dev-server --config example/webpack.config.js --watch", + "example": "yarn run webpack-dev-server --config example-0.19/webpack.config.js --watch", + "example18": "yarn run webpack-dev-server --config example-0.18/webpack.config.js --watch", "precommit": "pretty-quick --staged", "test": "jest" }, @@ -17,11 +17,17 @@ "url": "git@github.com:arsduo/elm-rings.git" }, "jest": { - "testPathIgnorePatterns": ["/node_modules/"], + "testURL": "http://localhost/", + "testPathIgnorePatterns": [ + "/node_modules/" + ], "globals": { "environment": "test" }, - "testMatch": ["**/test/**/(.*)_test.js", "**/test/test.js"] + "testMatch": [ + "**/test/**/(.*)_test.js", + "**/test/test.js" + ] }, "devDependencies": { "@babel/cli": "^7.0.0-beta.42", @@ -34,7 +40,7 @@ "babel-jest": "^22.4.1", "babel-loader": "^8.0.0-beta.2", "css-loader": "^0.28.10", - "elm": "^0.18.0", + "elm": "0.19", "elm-assets-loader": "^0.3.0", "elm-webpack-loader": "elm-community/elm-webpack-loader#master", "extract-text-webpack-plugin": "^4.0.0-beta.0", @@ -56,5 +62,9 @@ }, "engines": { "node": ">= 6" + }, + "dependencies": { + "elm-format": "0.8.0", + "elm-upgrade": "^0.19.1" } } diff --git a/readme-images/elm-rings-0.19.gif b/readme-images/elm-rings-0.19.gif new file mode 100644 index 0000000..577202c Binary files /dev/null and b/readme-images/elm-rings-0.19.gif differ diff --git a/source/ElmRings.js b/source/ElmRings.js index feaf9c2..f6302b4 100644 --- a/source/ElmRings.js +++ b/source/ElmRings.js @@ -64,10 +64,22 @@ export default class ElmRings { return; } - const exportButton = this.body.querySelectorAll( + // 0.18 + let exportButton = this.body.querySelectorAll( ".elm-mini-controls-import-export span" )[1]; + if (!exportButton) { + // in 0.19, we don't have classes, so we have to figure it out by DOM structure and content 🧐 + // also, NodeList doesn't support Array functions like find 🤪 + const exportButtonCandidates = Array.prototype.slice.call( + this.body.querySelectorAll("div > div > span") + ); + exportButton = exportButtonCandidates.find(candidate => { + return candidate.innerHTML === "Export"; + }); + } + if (!exportButton) { return; } @@ -84,7 +96,7 @@ export default class ElmRings { const target = event.target; // see if we're downloading data from Elm 0.18.x // assuming that the history export format won't change in a patch version 🤞 - if (target.href && unescape(target.href).match(/{"elm":"0.18/)) { + if (target.href && unescape(target.href).match(/{"elm":/)) { // Elm delivers the data in the format // 'data:' + mime + ',' + encodeURIComponent(jsonString)); const historyData = unescape(target.href.split(/,/)[1]); diff --git a/source/HistorySanitizer.js b/source/HistorySanitizer.js index f17bb14..0de0ad4 100644 --- a/source/HistorySanitizer.js +++ b/source/HistorySanitizer.js @@ -6,7 +6,7 @@ // either an Elm object constructor or as an Elm record key, the callback will be called with that // object or record. The callback's return value will be substituted for the original data. // -// As each ELm app will have such different entry structures that there's no easy to generalize this completely. The sanitizing function will have to detect what the content is and clean it appropriately. +// As each Elm app will have such different entry structures that there's no easy to generalize this completely. The sanitizing function will have to detect what the content is and clean it appropriately. // // For more information on the format Elm uses to export debugging history data, see an upcoming // blog post. @@ -17,14 +17,16 @@ // // MySecretData "access_token" {password = "myP@ssw0rd", expiration = "tomorrow"} // // // As an Elm history entry, this will look like +// {"$": "MySecretData", "a": "access_token", "b": {"password": "myP@ssw0rd", "expiration": "tomorrow"}} +// // for 0.18, replace $, a, b, etc. with ctor, _0, _1, etc. // {"ctor": "MySecretData", "_0": "access_token", "_1": {"password": "myP@ssw0rd", "expiration": "tomorrow"}} // // // If we run // sanitizeElmHistory(historyData, ["MySecretData", "password"], function(elmObjectOrRecord) { -// if (elmObjectOrRecord.ctor == "MySecretData") { +// if (elmObjectOrRecord.$ == "MySecretData") { // // replace the access token // // make sure to return the updated object! -// return {...elmObjectOrRecord, "_0": "[FILTERED]"} +// return {...elmObjectOrRecord, "a": "[FILTERED]"} // } // else { // // we have the record @@ -33,7 +35,7 @@ // }) // // // We'll receive back a sanitized entry: -// {"ctor": "MySecretData", "_0": "[FILTERED]", "_1": {"password": "[FILTERED]", "expiration": "tomorrow"}} +// {"$": "MySecretData", "a": "[FILTERED]", "b": {"password": "[FILTERED]", "expiration": "tomorrow"}} import { transformObject } from "./Utils.js"; @@ -49,17 +51,33 @@ export default function sanitizeElmHistory( return word; }); - return { - ...historyData, - history: historyData.history.map(entry => - sanitizeObject(entry, watchWords, sanitizingCallback) - ) + const processData = historyEntries => { + return historyEntries.map(entry => { + return sanitizeObject(entry, watchWords, sanitizingCallback); + }); }; + + if (historyData.a) { + // 0.19 stores the data inside an Elm object, which we have to reconstruct + return { + ...historyData, + a: { + ...historyData.a, + history: processData(historyData.a.history) + } + }; + } else { + // 0.18 is simpler + return { + ...historyData, + history: processData(historyData.history) + }; + } } function sanitizeObject(object, watchWords, sanitizingCallback) { return transformObject(object, elmObject => { - const constructor = elmObject.ctor; + const constructor = elmObject.ctor || elmObject.$; // these are history entries, so they should have a constructor if (!constructor) { throw new Error( @@ -73,7 +91,7 @@ function sanitizeObject(object, watchWords, sanitizingCallback) { const cleanedObject = {}; Object.keys(elmObject).forEach(key => { const value = elmObject[key]; - if (value.ctor) { + if (value.ctor || value.$) { // we have an Elm object provided as an argument, so clean it cleanedObject[key] = sanitizeObject( value, @@ -101,6 +119,7 @@ function sanitizeObject(object, watchWords, sanitizingCallback) { // now that we've sanitized any inner records or objects, sanitize the overall object (if // needed) + if (watchWords.find(matcher => matcher.test(constructor))) { return sanitizingCallback(cleanedObject); } diff --git a/source/Utils.js b/source/Utils.js index ef76c8d..d12833b 100644 --- a/source/Utils.js +++ b/source/Utils.js @@ -5,9 +5,11 @@ // the block -- to examine/alter an Elm record, do so in the callback for whichever Elm object // contains it. (All history entries are Message objects, so there's always an entry point.) export function transformObject(entry, transformation) { - if (typeof entry != "object") { + if (!entry) { return entry; - } else if (entry.ctor) { + } else if (typeof entry != "object") { + return entry; + } else if (entry.ctor || entry.$) { // If you want to walk down sub-entries, call transformObject again within your transform // function return transformation(entry); diff --git a/test/ElmRings_test.js b/test/ElmRings_test.js index 959da93..b6c5502 100644 --- a/test/ElmRings_test.js +++ b/test/ElmRings_test.js @@ -151,22 +151,71 @@ describe("ElmRings", () => { describe("handleHistoryExport", () => { let event, target; - const historyData = { - metadata: { versions: { elm: "0.18.0" } }, - types: {}, - history: [] - }; - const mimeType = "application/json"; - beforeEach(() => { - target = { - href: `data:${mimeType},${escape(JSON.stringify(historyData))}` + describe("if this is a 0.19 Elm history export", () => { + const historyData = { + metadata: { versions: { elm: "0.19.0" } }, + types: {}, + history: [] }; - event = { target, preventDefault: jest.fn() }; + + beforeEach(() => { + target = { + href: `data:${mimeType},${escape(JSON.stringify(historyData))}` + }; + event = { target, preventDefault: jest.fn() }; + }); + + it("fires the callback with the sanitized history", () => { + elmRings.handleHistoryExport(event); + expect(elmRingsOptions.storeHistory).toHaveBeenCalledWith( + JSON.stringify({ sanitized: historyData, watchWords }) + ); + expect(historySanitizer).toHaveBeenCalled(); + }); + + it("will fire the callback with unsanitized history data if no sanitization options provided", () => { + new ElmRings( + { ...elmRingsOptions, historySanitizer: null }, + mockBody + ).handleHistoryExport(event); + expect(elmRingsOptions.storeHistory).toHaveBeenCalledWith( + JSON.stringify(historyData) + ); + }); + + it("won't stop you from downloading history if allowDownload is enabled", () => { + expect(elmRings.handleHistoryExport(event)).not.toBe(false); + expect(event.preventDefault).not.toHaveBeenCalled(); + }); + + it("stops you from downloading history if allowDownload is disabled", () => { + elmRings = new ElmRings({ + mockBody, + allowDownload: false, + shouldSendHistory: () => true, + storeHistory: jest.fn() + }); + expect(elmRings.handleHistoryExport(event)).toBe(false); + expect(event.preventDefault).toHaveBeenCalled(); + }); }); - describe("if this is an Elm history export", () => { + describe("if this is a 0.18 Elm history export", () => { + const historyData = { + metadata: { versions: { elm: "0.18.0" } }, + types: {}, + history: [] + }; + + beforeEach(() => { + target = { + href: `data:${mimeType},${escape(JSON.stringify(historyData))}` + }; + event = { target, preventDefault: jest.fn() }; + }); + it("fires the callback with the sanitized history", () => { elmRings.handleHistoryExport(event); expect(elmRingsOptions.storeHistory).toHaveBeenCalledWith( @@ -203,15 +252,17 @@ describe("ElmRings", () => { }); describe("if it's not an Elm history export", () => { - it("won't do anything on other links", () => { - target.href = "http://google.com"; + it.only("won't do anything on other links", () => { + target = { href: "http://google.com" }; + event = { target, preventDefault: jest.fn() }; expect(elmRings.handleHistoryExport(event)).not.toBe(false); expect(elmRings.storeHistory).not.toHaveBeenCalled(); expect(event.preventDefault).not.toHaveBeenCalled(); }); it("won't do anything on clicks on other types of data", () => { - delete target.href; + target = {}; + event = { target, preventDefault: jest.fn() }; expect(elmRings.handleHistoryExport(event)).not.toBe(false); expect(elmRings.storeHistory).not.toHaveBeenCalled(); expect(event.preventDefault).not.toHaveBeenCalled(); diff --git a/test/HistorySanitizer_test.js b/test/HistorySanitizer_test.js index f6ee967..0d3a11c 100644 --- a/test/HistorySanitizer_test.js +++ b/test/HistorySanitizer_test.js @@ -1,122 +1,396 @@ import sanitizeElmHistory from "../source/HistorySanitizer.js"; -import historyFixture from "./fixtures/elm-history.js"; +import historyFixture18 from "./fixtures/elm-history-0.18.js"; +import historyFixture19 from "./fixtures/elm-history-0.19.js"; describe("sanitizeElmHistory", () => { - describe("with a simple example", () => { - let historyData, watchWords; + let exportData, watchWords; - beforeEach(() => { - historyData = { - history: [ - { - ctor: "MySecretData", - _0: "access_token", - _1: { password: "myP@ssw0rd", expiration: "tomorrow" } + describe("for 0.19", () => { + describe("with a simple example", () => { + beforeEach(() => { + exportData = { + $: 0, + a: { + history: [ + { + $: "MySecretData", + a: "access_token", + b: { password: "myP@ssw0rd", expiration: "tomorrow" } + } + ] } - ] + }; + watchWords = ["MySecretData", "password"]; + }); + + const sanitize = elmObjectOrRecord => { + if (elmObjectOrRecord.$ == "MySecretData") { + // replace the access token + // make sure to return the updated object! + return { ...elmObjectOrRecord, a: "[FILTERED]" }; + } else { + // we have the record + return { ...elmObjectOrRecord, password: "[FILTERED]" }; + } }; - watchWords = ["MySecretData", "password"]; + + it("sanitizes properly", () => { + expect( + sanitizeElmHistory(exportData, watchWords, sanitize).a.history + ).toEqual([ + { + $: "MySecretData", + a: "[FILTERED]", + b: { password: "[FILTERED]", expiration: "tomorrow" } + } + ]); + }); }); - const sanitize = elmObjectOrRecord => { - if (elmObjectOrRecord.ctor == "MySecretData") { - // replace the access token - // make sure to return the updated object! - return { ...elmObjectOrRecord, _0: "[FILTERED]" }; - } else { - // we have the record - return { ...elmObjectOrRecord, password: "[FILTERED]" }; - } - }; + describe("with a real example", () => { + let watchWords; + beforeEach(() => { + // one constructor for an Elm type, one field in a record + watchWords = ["NewQuote", "isbn"]; + }); - it("sanitizes properly", () => { - expect( - sanitizeElmHistory(historyData, watchWords, sanitize).history - ).toEqual([ - { - ctor: "MySecretData", - _0: "[FILTERED]", - _1: { password: "[FILTERED]", expiration: "tomorrow" } + const sanitize = elmObjectOrRecord => { + if (/NewQuote/.test(elmObjectOrRecord.$)) { + return { ...elmObjectOrRecord, a: "[FILTERED]" }; + } else { + // it's an ISBN value in a record + const result = {}; + Object.keys(elmObjectOrRecord).forEach(key => { + result[key] = key == "isbn" ? "[FILTERED]" : elmObjectOrRecord[key]; + }); + return result; } - ]); + }; + + it("properly sanitizes the history", () => { + expect( + sanitizeElmHistory(historyFixture19, watchWords, sanitize).a.history + ).toEqual([ + { + $: "BookListReceived", + a: { + $: "Ok", + a: { + $: "::", + a: { + id: 1, + title: "The Book of the City of Ladies", + isbn: "[FILTERED]" + }, + b: { + $: "::", + a: { + id: 2, + title: "Good Strategy, Bad Strategy", + isbn: "[FILTERED]" + }, + b: { + $: "::", + a: { + id: 3, + title: "The Metamorphoses of Ovid", + isbn: "[FILTERED]" + }, + b: { + $: "::", + a: { + id: 4, + title: "Parable of the Sower", + isbn: "[FILTERED]" + }, + b: { + $: "::", + a: { + id: 5, + title: "Too Like the Lightning", + isbn: "[FILTERED]" + }, + b: { + $: "::", + a: { + id: 6, + title: "The Fear of Barbarians", + isbn: "[FILTERED]" + }, + b: { + $: "::", + a: { + id: 7, + title: "Evicted", + isbn: "[FILTERED]" + } + } + } + } + } + } + } + } + } + }, + { + $: "QuoteListReceived", + a: { + $: "Ok", + a: { + $: "::", + a: { + text: + "I am amused how Reason, despite being a visitor from Heaven, keeps referencing a particular Italian writer as her source." + }, + b: { + $: "::", + a: { + text: + '"certain writers…maintain…the world was a better place before human beings learned more sophisticated ways and simply lived off acorns" ' + }, + b: { + $: "::", + a: { + text: + "The idea that culture bad, state of nature good is thus at least 600 years old, and surely older." + }, + b: { + $: "::", + a: { + text: + '"Don\'t hesitate to mix the mortar well in your inkpot and set to on the masonry work with great strokes of your pen."' + }, + b: { + $: "::", + a: { + text: + "I can't tell if the author truly believes good upbringing will lead to dutiful children or if it's just what one had to write back then. " + }, + b: { + $: "::", + a: { text: '"A new Realm of Femininia is at hand"' }, + b: { + $: "::", + a: { + text: + 'Another misogynist idea that\'s over 600 years old: women " cause trouble, lack affection, and gossip incessantly".' + }, + b: { + $: "::", + a: { + text: + 'This translation uses the word "werewolf", but the Latin is literally "ambiguous wolf." 🐺\u{1F937}' + } + } + } + } + } + } + } + } + } + } + }, + { + $: "BookChosen", + a: { id: 5, title: "Too Like the Lightning", isbn: "[FILTERED]" } + }, + { + $: "QuoteListReceived", + a: { + $: "Ok", + a: { + $: "::", + a: { + id: { $: "Just", a: 48 }, + text: + '"that desperate Middle Age when images were objects of utility more than art."', + page: { $: "Just", a: "232" }, + kind: { $: "DirectQuote" }, + bookId: 5 + }, + b: { + $: "::", + a: { + id: { $: "Just", a: 49 }, + text: + "One of the most striking aspects to this book's world is how alien the flows of information and trust are. It's coherent, just alien.", + page: { $: "Just", a: "161" }, + kind: { $: "Thought" }, + bookId: 5 + }, + b: { + $: "::", + a: { + id: { $: "Just", a: 54 }, + text: '"the disapproval of a nun is extremely powerful"', + page: { $: "Just", a: "304" }, + kind: { $: "DirectQuote" }, + bookId: 5 + }, + b: { + $: "::", + a: { + id: { $: "Just", a: 55 }, + text: + '"Celibacy is the most extreme of sexual perversions."', + page: { $: "Just", a: "305" }, + kind: { $: "DirectQuote" }, + bookId: 5 + }, + b: { + $: "::", + a: { + id: { $: "Just", a: 56 }, + text: + '"lips which had tasted many vitamins but never candy"', + page: { $: "Just", a: "357" }, + kind: { $: "DirectQuote" }, + bookId: 5 + }, + b: { + $: "::", + a: { + id: { $: "Just", a: 57 }, + text: + '"words with only one chance to persuade, or fail and perish"', + page: { $: "Just", a: "358" }, + kind: { $: "DirectQuote" }, + bookId: 5 + }, + b: { $: "[]" } + } + } + } + } + } + } + } + }, + { $: "NewQuoteTextEntered", a: "[FILTERED]" }, + { $: "NewQuoteTextEntered", a: "[FILTERED]" }, + { $: "NewQuoteTextEntered", a: "[FILTERED]" } + ]); + }); }); }); - describe("with a real example", () => { - let watchWords; - beforeEach(() => { - // one constructor for an Elm type, one field in a record - watchWords = ["NewQuote", "isbn"]; + describe("for 0.18", () => { + describe("with a simple example", () => { + beforeEach(() => { + exportData = { + history: [ + { + ctor: "MySecretData", + _0: "access_token", + _1: { password: "myP@ssw0rd", expiration: "tomorrow" } + } + ] + }; + watchWords = ["MySecretData", "password"]; + }); + + const sanitize = elmObjectOrRecord => { + if (elmObjectOrRecord.ctor == "MySecretData") { + // replace the access token + // make sure to return the updated object! + return { ...elmObjectOrRecord, _0: "[FILTERED]" }; + } else { + // we have the record + return { ...elmObjectOrRecord, password: "[FILTERED]" }; + } + }; + + it("sanitizes properly", () => { + expect( + sanitizeElmHistory(exportData, watchWords, sanitize).history + ).toEqual([ + { + ctor: "MySecretData", + _0: "[FILTERED]", + _1: { password: "[FILTERED]", expiration: "tomorrow" } + } + ]); + }); }); - const sanitize = elmObjectOrRecord => { - if (/NewQuote/.test(elmObjectOrRecord.ctor)) { - return { ...elmObjectOrRecord, _0: "[FILTERED]" }; - } else { - // it's an ISBN value in a record - const result = {}; - Object.keys(elmObjectOrRecord).forEach(key => { - result[key] = key == "isbn" ? "[FILTERED]" : elmObjectOrRecord[key]; - }); - return result; - } - }; - it("properly sanitizes the history", () => { - expect( - sanitizeElmHistory(historyFixture, watchWords, sanitize).history - ).toEqual([ - { - ctor: "BookListReceived", - _0: { - ctor: "Ok", + describe("with a real example", () => { + let watchWords; + beforeEach(() => { + // one constructor for an Elm type, one field in a record + watchWords = ["NewQuote", "isbn"]; + }); + const sanitize = elmObjectOrRecord => { + if (/NewQuote/.test(elmObjectOrRecord.ctor)) { + return { ...elmObjectOrRecord, _0: "[FILTERED]" }; + } else { + // it's an ISBN value in a record + const result = {}; + Object.keys(elmObjectOrRecord).forEach(key => { + result[key] = key == "isbn" ? "[FILTERED]" : elmObjectOrRecord[key]; + }); + return result; + } + }; + + it("properly sanitizes the history", () => { + expect( + sanitizeElmHistory(historyFixture18, watchWords, sanitize).history + ).toEqual([ + { + ctor: "BookListReceived", _0: { - ctor: "::", + ctor: "Ok", _0: { - id: 1, - title: "The Book of the City of Ladies", - isbn: "[FILTERED]" - }, - _1: { ctor: "::", _0: { - id: 2, - title: "Good Strategy, Bad Strategy", + id: 1, + title: "The Book of the City of Ladies", isbn: "[FILTERED]" }, _1: { ctor: "::", _0: { - id: 3, - title: "The Metamorphoses of Ovid", + id: 2, + title: "Good Strategy, Bad Strategy", isbn: "[FILTERED]" }, _1: { ctor: "::", _0: { - id: 4, - title: "Parable of the Sower", + id: 3, + title: "The Metamorphoses of Ovid", isbn: "[FILTERED]" }, _1: { ctor: "::", _0: { - id: 5, - title: "Too Like the Lightning", + id: 4, + title: "Parable of the Sower", isbn: "[FILTERED]" }, _1: { ctor: "::", _0: { - id: 6, - title: "The Fear of Barbarians", + id: 5, + title: "Too Like the Lightning", isbn: "[FILTERED]" }, _1: { ctor: "::", _0: { - id: 7, - title: "Evicted", + id: 6, + title: "The Fear of Barbarians", isbn: "[FILTERED]" + }, + _1: { + ctor: "::", + _0: { + id: 7, + title: "Evicted", + isbn: "[FILTERED]" + } } } } @@ -125,56 +399,56 @@ describe("sanitizeElmHistory", () => { } } } - } - }, - { - ctor: "QuoteListReceived", - _0: { - ctor: "Ok", + }, + { + ctor: "QuoteListReceived", _0: { - ctor: "::", + ctor: "Ok", _0: { - text: - "I am amused how Reason, despite being a visitor from Heaven, keeps referencing a particular Italian writer as her source." - }, - _1: { ctor: "::", _0: { text: - '"certain writers…maintain…the world was a better place before human beings learned more sophisticated ways and simply lived off acorns" ' + "I am amused how Reason, despite being a visitor from Heaven, keeps referencing a particular Italian writer as her source." }, _1: { ctor: "::", _0: { text: - "The idea that culture bad, state of nature good is thus at least 600 years old, and surely older." + '"certain writers…maintain…the world was a better place before human beings learned more sophisticated ways and simply lived off acorns" ' }, _1: { ctor: "::", _0: { text: - '"Don\'t hesitate to mix the mortar well in your inkpot and set to on the masonry work with great strokes of your pen."' + "The idea that culture bad, state of nature good is thus at least 600 years old, and surely older." }, _1: { ctor: "::", _0: { text: - "I can't tell if the author truly believes good upbringing will lead to dutiful children or if it's just what one had to write back then. " + '"Don\'t hesitate to mix the mortar well in your inkpot and set to on the masonry work with great strokes of your pen."' }, _1: { ctor: "::", - _0: { text: '"A new Realm of Femininia is at hand"' }, + _0: { + text: + "I can't tell if the author truly believes good upbringing will lead to dutiful children or if it's just what one had to write back then. " + }, _1: { ctor: "::", - _0: { - text: - 'Another misogynist idea that\'s over 600 years old: women " cause trouble, lack affection, and gossip incessantly".' - }, + _0: { text: '"A new Realm of Femininia is at hand"' }, _1: { ctor: "::", _0: { text: - 'This translation uses the word "werewolf", but the Latin is literally "ambiguous wolf." 🐺\u{1F937}' + 'Another misogynist idea that\'s over 600 years old: women " cause trouble, lack affection, and gossip incessantly".' + }, + _1: { + ctor: "::", + _0: { + text: + 'This translation uses the word "werewolf", but the Latin is literally "ambiguous wolf." 🐺\u{1F937}' + } } } } @@ -184,88 +458,88 @@ describe("sanitizeElmHistory", () => { } } } - } - }, - { - ctor: "BookChosen", - _0: { id: 5, title: "Too Like the Lightning", isbn: "[FILTERED]" } - }, - { - ctor: "QuoteListReceived", - _0: { - ctor: "Ok", + }, + { + ctor: "BookChosen", + _0: { id: 5, title: "Too Like the Lightning", isbn: "[FILTERED]" } + }, + { + ctor: "QuoteListReceived", _0: { - ctor: "::", + ctor: "Ok", _0: { - id: { ctor: "Just", _0: 48 }, - text: - '"that desperate Middle Age when images were objects of utility more than art."', - page: { ctor: "Just", _0: "232" }, - kind: { ctor: "DirectQuote" }, - bookId: 5 - }, - _1: { ctor: "::", _0: { - id: { ctor: "Just", _0: 49 }, + id: { ctor: "Just", _0: 48 }, text: - "One of the most striking aspects to this book's world is how alien the flows of information and trust are. It's coherent, just alien.", - page: { ctor: "Just", _0: "161" }, - kind: { ctor: "Thought" }, + '"that desperate Middle Age when images were objects of utility more than art."', + page: { ctor: "Just", _0: "232" }, + kind: { ctor: "DirectQuote" }, bookId: 5 }, _1: { ctor: "::", _0: { - id: { ctor: "Just", _0: 54 }, - text: '"the disapproval of a nun is extremely powerful"', - page: { ctor: "Just", _0: "304" }, - kind: { ctor: "DirectQuote" }, + id: { ctor: "Just", _0: 49 }, + text: + "One of the most striking aspects to this book's world is how alien the flows of information and trust are. It's coherent, just alien.", + page: { ctor: "Just", _0: "161" }, + kind: { ctor: "Thought" }, bookId: 5 }, _1: { ctor: "::", _0: { - id: { ctor: "Just", _0: 55 }, - text: - '"Celibacy is the most extreme of sexual perversions."', - page: { ctor: "Just", _0: "305" }, + id: { ctor: "Just", _0: 54 }, + text: '"the disapproval of a nun is extremely powerful"', + page: { ctor: "Just", _0: "304" }, kind: { ctor: "DirectQuote" }, bookId: 5 }, _1: { ctor: "::", _0: { - id: { ctor: "Just", _0: 56 }, + id: { ctor: "Just", _0: 55 }, text: - '"lips which had tasted many vitamins but never candy"', - page: { ctor: "Just", _0: "357" }, + '"Celibacy is the most extreme of sexual perversions."', + page: { ctor: "Just", _0: "305" }, kind: { ctor: "DirectQuote" }, bookId: 5 }, _1: { ctor: "::", _0: { - id: { ctor: "Just", _0: 57 }, + id: { ctor: "Just", _0: 56 }, text: - '"words with only one chance to persuade, or fail and perish"', - page: { ctor: "Just", _0: "358" }, + '"lips which had tasted many vitamins but never candy"', + page: { ctor: "Just", _0: "357" }, kind: { ctor: "DirectQuote" }, bookId: 5 }, - _1: { ctor: "[]" } + _1: { + ctor: "::", + _0: { + id: { ctor: "Just", _0: 57 }, + text: + '"words with only one chance to persuade, or fail and perish"', + page: { ctor: "Just", _0: "358" }, + kind: { ctor: "DirectQuote" }, + bookId: 5 + }, + _1: { ctor: "[]" } + } } } } } } } - } - }, - { ctor: "NewQuoteTextEntered", _0: "[FILTERED]" }, - { ctor: "NewQuoteTextEntered", _0: "[FILTERED]" }, - { ctor: "NewQuoteTextEntered", _0: "[FILTERED]" } - ]); + }, + { ctor: "NewQuoteTextEntered", _0: "[FILTERED]" }, + { ctor: "NewQuoteTextEntered", _0: "[FILTERED]" }, + { ctor: "NewQuoteTextEntered", _0: "[FILTERED]" } + ]); + }); }); }); }); diff --git a/test/Utils_test.js b/test/Utils_test.js index 5bfaebb..0d11881 100644 --- a/test/Utils_test.js +++ b/test/Utils_test.js @@ -4,55 +4,111 @@ describe("Utils", () => { describe("transformObject", () => { let sampleObject; - beforeEach(() => { - sampleObject = { - ctor: "TestMessage", - _0: "a primitive value", - _1: { - type: "record", - containing: { - ctor: "AnObject", - _0: "SomeValue" + describe("for 0.19", () => { + beforeEach(() => { + sampleObject = { + $: "TestMessage", + a: "a primitive value", + b: { + type: "record", + containing: { + $: "AnObject", + a: "SomeValue" + } + }, + c: { + $: "AnotherObject" } - }, - _2: { - ctor: "AnotherObject" - } - }; - }); + }; + }); + + it("transforms the entry according to the block provided", () => { + const transformation = entry => { + const result = {}; + Object.keys(entry).forEach(key => { + if (key == "$") { + result.constructor = entry.$; + } else { + result[key.toUpperCase() + "processed"] = transformObject( + entry[key], + transformation + ); + } + }); - it("transforms the entry according to the block provided", () => { - const transformation = entry => { - const result = {}; - Object.keys(entry).forEach(key => { - if (key == "ctor") { - result.constructor = entry.ctor; - } else { - result[key.toUpperCase() + "processed"] = transformObject( - entry[key], - transformation - ); + return result; + }; + + expect(transformObject(sampleObject, transformation)).toEqual({ + constructor: "TestMessage", + Aprocessed: "a primitive value", + Bprocessed: { + // records are handled differently than objects + type: "record", + containing: { + // this shows that embedded objects are also processed + constructor: "AnObject", + Aprocessed: "SomeValue" + } + }, + Cprocessed: { + constructor: "AnotherObject" } }); + }); + }); - return result; - }; - - expect(transformObject(sampleObject, transformation)).toEqual({ - constructor: "TestMessage", - _0processed: "a primitive value", - _1processed: { - // records are handled differently than objects - type: "record", - containing: { - // this shows that embedded objects are also processed - constructor: "AnObject", - _0processed: "SomeValue" + describe("for 0.18", () => { + beforeEach(() => { + sampleObject = { + ctor: "TestMessage", + _0: "a primitive value", + _1: { + type: "record", + containing: { + ctor: "AnObject", + _0: "SomeValue" + } + }, + _2: { + ctor: "AnotherObject" } - }, - _2processed: { - constructor: "AnotherObject" - } + }; + }); + + it("transforms the entry according to the block provided", () => { + const transformation = entry => { + const result = {}; + Object.keys(entry).forEach(key => { + if (key == "ctor") { + result.constructor = entry.ctor; + } else { + result[key.toUpperCase() + "processed"] = transformObject( + entry[key], + transformation + ); + } + }); + + return result; + }; + + expect(transformObject(sampleObject, transformation)).toEqual({ + constructor: "TestMessage", + _0processed: "a primitive value", + _1processed: { + // records are handled differently than objects + type: "record", + containing: { + // this shows that embedded objects are also processed + constructor: "AnObject", + _0processed: "SomeValue" + } + }, + _2processed: { + constructor: "AnotherObject" + } + }); }); }); }); diff --git a/test/fixtures/elm-history.js b/test/fixtures/elm-history-0.18.js similarity index 100% rename from test/fixtures/elm-history.js rename to test/fixtures/elm-history-0.18.js diff --git a/test/fixtures/elm-history-0.19.js b/test/fixtures/elm-history-0.19.js new file mode 100644 index 0000000..d2d2111 --- /dev/null +++ b/test/fixtures/elm-history-0.19.js @@ -0,0 +1,379 @@ +export default { + $: 0, + a: { + metadata: { + versions: { + elm: "0.19.0" + }, + types: { + message: "Messages.Msg", + aliases: { + "Http.Response": { + args: ["body"], + type: + "{ url : String , status : { code : Int, message : String } , headers : Dict.Dict String String , body : body }" + }, + "Models.Book.Book": { + args: [], + type: "{ id : Int, title : String, isbn : String }" + }, + "Models.Quote.Quote": { + args: [], + type: "{ text : String }" + } + }, + unions: { + "Dict.Dict": { + args: ["k", "v"], + tags: { + RBEmpty_elm_builtin: ["Dict.LeafColor"], + RBNode_elm_builtin: [ + "Dict.NColor", + "k", + "v", + "Dict.Dict k v", + "Dict.Dict k v" + ] + } + }, + "Dict.LeafColor": { + args: [], + tags: { + LBBlack: [], + LBlack: [] + } + }, + "Dict.NColor": { + args: [], + tags: { + BBlack: [], + Black: [], + NBlack: [], + Red: [] + } + }, + "Http.Error": { + args: [], + tags: { + BadPayload: ["String", "Http.Response String"], + BadStatus: ["Http.Response String"], + BadUrl: ["String"], + NetworkError: [], + Timeout: [] + } + }, + "Maybe.Maybe": { + args: ["a"], + tags: { + Just: ["a"], + Nothing: [] + } + }, + "Messages.Msg": { + args: [], + tags: { + BookChoiceCleared: [], + BookChosen: ["Models.Book.Book"], + BookCreated: ["Result.Result Http.Error Models.Book.Book"], + BookListReceived: [ + "Result.Result Http.Error (List Models.Book.Book)" + ], + BookSaved: [], + NewBookISBNEntered: ["String"], + NewBookTitleEntered: ["String"], + NewQuoteKindSelected: ["Models.Quote.QuoteKind"], + NewQuotePageEntered: ["String"], + NewQuoteTextEntered: ["String"], + QuoteCreated: ["Result.Result Http.Error Models.Quote.Quote"], + QuoteListReceived: [ + "Result.Result Http.Error (List Models.Quote.Quote)" + ], + QuoteSaved: [] + } + }, + "Models.Quote.QuoteKind": { + args: [], + tags: { + DirectQuote: [], + Thought: [] + } + }, + "Result.Result": { + args: ["error", "value"], + tags: { + Err: ["error"], + Ok: ["value"] + } + } + } + } + }, + history: [ + { + $: "BookListReceived", + a: { + $: "Ok", + a: { + $: "::", + a: { + id: 1, + title: "The Book of the City of Ladies", + isbn: "0140446893" + }, + b: { + $: "::", + a: { + id: 2, + title: "Good Strategy, Bad Strategy", + isbn: "9780307886231" + }, + b: { + $: "::", + a: { + id: 3, + title: "The Metamorphoses of Ovid", + isbn: "9780156001267" + }, + b: { + $: "::", + a: { + id: 4, + title: "Parable of the Sower", + isbn: "9780446675505" + }, + b: { + $: "::", + a: { + id: 5, + title: "Too Like the Lightning", + isbn: "9780765378019" + }, + b: { + $: "::", + a: { + id: 6, + title: "The Fear of Barbarians", + isbn: "97802268065757" + }, + b: { + $: "::", + a: { + id: 7, + title: "Evicted", + isbn: "9780553447453" + } + } + } + } + } + } + } + } + } + }, + { + $: "QuoteListReceived", + a: { + $: "Ok", + a: { + $: "::", + a: { + text: + "I am amused how Reason, despite being a visitor from Heaven, keeps referencing a particular Italian writer as her source." + }, + b: { + $: "::", + a: { + text: + '"certain writers…maintain…the world was a better place before human beings learned more sophisticated ways and simply lived off acorns" ' + }, + b: { + $: "::", + a: { + text: + "The idea that culture bad, state of nature good is thus at least 600 years old, and surely older." + }, + b: { + $: "::", + a: { + text: + '"Don\'t hesitate to mix the mortar well in your inkpot and set to on the masonry work with great strokes of your pen."' + }, + b: { + $: "::", + a: { + text: + "I can't tell if the author truly believes good upbringing will lead to dutiful children or if it's just what one had to write back then. " + }, + b: { + $: "::", + a: { + text: '"A new Realm of Femininia is at hand"' + }, + b: { + $: "::", + a: { + text: + 'Another misogynist idea that\'s over 600 years old: women " cause trouble, lack affection, and gossip incessantly".' + }, + b: { + $: "::", + a: { + text: + 'This translation uses the word "werewolf", but the Latin is literally "ambiguous wolf." 🐺🤷' + } + } + } + } + } + } + } + } + } + } + }, + { + $: "BookChosen", + a: { + id: 5, + title: "Too Like the Lightning", + isbn: "9780765378019" + } + }, + { + $: "QuoteListReceived", + a: { + $: "Ok", + a: { + $: "::", + a: { + id: { + $: "Just", + a: 48 + }, + text: + '"that desperate Middle Age when images were objects of utility more than art."', + page: { + $: "Just", + a: "232" + }, + kind: { + $: "DirectQuote" + }, + bookId: 5 + }, + b: { + $: "::", + a: { + id: { + $: "Just", + a: 49 + }, + text: + "One of the most striking aspects to this book's world is how alien the flows of information and trust are. It's coherent, just alien.", + page: { + $: "Just", + a: "161" + }, + kind: { + $: "Thought" + }, + bookId: 5 + }, + b: { + $: "::", + a: { + id: { + $: "Just", + a: 54 + }, + text: '"the disapproval of a nun is extremely powerful"', + page: { + $: "Just", + a: "304" + }, + kind: { + $: "DirectQuote" + }, + bookId: 5 + }, + b: { + $: "::", + a: { + id: { + $: "Just", + a: 55 + }, + text: + '"Celibacy is the most extreme of sexual perversions."', + page: { + $: "Just", + a: "305" + }, + kind: { + $: "DirectQuote" + }, + bookId: 5 + }, + b: { + $: "::", + a: { + id: { + $: "Just", + a: 56 + }, + text: + '"lips which had tasted many vitamins but never candy"', + page: { + $: "Just", + a: "357" + }, + kind: { + $: "DirectQuote" + }, + bookId: 5 + }, + b: { + $: "::", + a: { + id: { + $: "Just", + a: 57 + }, + text: + '"words with only one chance to persuade, or fail and perish"', + page: { + $: "Just", + a: "358" + }, + kind: { + $: "DirectQuote" + }, + bookId: 5 + }, + b: { + $: "[]" + } + } + } + } + } + } + } + } + }, + { + $: "NewQuoteTextEntered", + a: "a" + }, + { + $: "NewQuoteTextEntered", + a: "ab" + }, + { + $: "NewQuoteTextEntered", + a: "abc" + } + ] + } +}; diff --git a/yarn.lock b/yarn.lock index fa8749f..0271455 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,523 +3,697 @@ "@babel/cli@^7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.0.0-beta.42.tgz#6ba43578d6c47c1cc96a4de8f67f61763d780a0e" + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.0.0.tgz#108b395fd43fff6681d36fb41274df4d8ffeb12e" dependencies: commander "^2.8.1" convert-source-map "^1.1.0" - fs-readdir-recursive "^1.0.0" + fs-readdir-recursive "^1.1.0" glob "^7.0.0" - lodash "^4.2.0" + lodash "^4.17.10" + mkdirp "^0.5.1" output-file-sync "^2.0.0" - slash "^1.0.0" + slash "^2.0.0" source-map "^0.5.0" optionalDependencies: - chokidar "^1.6.1" + chokidar "^2.0.3" -"@babel/code-frame@7.0.0-beta.42", "@babel/code-frame@^7.0.0-beta.35": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.42.tgz#a9c83233fa7cd06b39dc77adbb908616ff4f1962" +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.0.0-beta.35": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" dependencies: - "@babel/highlight" "7.0.0-beta.42" + "@babel/highlight" "^7.0.0" "@babel/core@^7.0.0-beta.40": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.0-beta.42.tgz#b3a838fddbd19663369a0b4892189fd8d3f82001" - dependencies: - "@babel/code-frame" "7.0.0-beta.42" - "@babel/generator" "7.0.0-beta.42" - "@babel/helpers" "7.0.0-beta.42" - "@babel/template" "7.0.0-beta.42" - "@babel/traverse" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - babylon "7.0.0-beta.42" + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.0.0.tgz#0cb0c0fd2e78a0a2bec97698f549ae9ce0b99515" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.0.0" + "@babel/helpers" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" convert-source-map "^1.1.0" debug "^3.1.0" json5 "^0.5.0" - lodash "^4.2.0" - micromatch "^2.3.11" + lodash "^4.17.10" resolve "^1.3.2" semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0-beta.42.tgz#777bb50f39c94a7e57f73202d833141f8159af33" +"@babel/generator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.0.0.tgz#1efd58bffa951dc846449e58ce3a1d7f02d393aa" dependencies: - "@babel/types" "7.0.0-beta.42" + "@babel/types" "^7.0.0" jsesc "^2.5.1" - lodash "^4.2.0" + lodash "^4.17.10" source-map "^0.5.0" trim-right "^1.0.1" -"@babel/helper-annotate-as-pure@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0-beta.42.tgz#f2b0a3be684018b55fc308eb5408326f78479085" +"@babel/helper-annotate-as-pure@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz#323d39dd0b50e10c7c06ca7d7638e6864d8c5c32" dependencies: - "@babel/types" "7.0.0-beta.42" + "@babel/types" "^7.0.0" -"@babel/helper-builder-binary-assignment-operator-visitor@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0-beta.42.tgz#7305281eb996954c47f87ec7710e2a9a8edd8077" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.0.0.tgz#ba26336beb2abb547d58b6eba5b84d77975a39eb" dependencies: - "@babel/helper-explode-assignable-expression" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" + "@babel/helper-explode-assignable-expression" "^7.0.0" + "@babel/types" "^7.0.0" -"@babel/helper-call-delegate@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0-beta.42.tgz#53294eb8c5e6e53af3efda4293ff3c1237772d37" +"@babel/helper-call-delegate@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.0.0.tgz#e036956bb33d76e59c07a04a1fff144e9f62ab78" dependencies: - "@babel/helper-hoist-variables" "7.0.0-beta.42" - "@babel/traverse" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" -"@babel/helper-define-map@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.0.0-beta.42.tgz#e5aa10bd7eed2c23cc2873e5d15fbb4b40a30620" +"@babel/helper-define-map@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.0.0.tgz#a5684dd2adf30f0137cf9b0bde436f8c2db17225" dependencies: - "@babel/helper-function-name" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - lodash "^4.2.0" + "@babel/helper-function-name" "^7.0.0" + "@babel/types" "^7.0.0" + lodash "^4.17.10" -"@babel/helper-explode-assignable-expression@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0-beta.42.tgz#ae05c9e7ef9a085b0080b9e4f7a076851a2b17b5" +"@babel/helper-explode-assignable-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.0.0.tgz#fdfa4c88603ae3e954d0fc3244d5ca82fb468497" dependencies: - "@babel/traverse" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" -"@babel/helper-function-name@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.42.tgz#b38b8f4f85168d1812c543dd700b5d549b0c4658" +"@babel/helper-function-name@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.0.0.tgz#a68cc8d04420ccc663dd258f9cc41b8261efa2d4" dependencies: - "@babel/helper-get-function-arity" "7.0.0-beta.42" - "@babel/template" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/types" "^7.0.0" -"@babel/helper-get-function-arity@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.42.tgz#ad072e32f912c033053fc80478169aeadc22191e" +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" dependencies: - "@babel/types" "7.0.0-beta.42" + "@babel/types" "^7.0.0" -"@babel/helper-hoist-variables@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0-beta.42.tgz#6e51d75192923d96972a24c223b81126a7fabca1" +"@babel/helper-hoist-variables@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.0.0.tgz#46adc4c5e758645ae7a45deb92bab0918c23bb88" dependencies: - "@babel/types" "7.0.0-beta.42" + "@babel/types" "^7.0.0" -"@babel/helper-module-imports@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0-beta.42.tgz#4de334b42fa889d560f15122f66c3bfe1f30cb77" +"@babel/helper-member-expression-to-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" dependencies: - "@babel/types" "7.0.0-beta.42" - lodash "^4.2.0" + "@babel/types" "^7.0.0" -"@babel/helper-module-transforms@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0-beta.42.tgz#4d260cc786e712e8440bef58dae28040b77a6183" +"@babel/helper-module-imports@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz#96081b7111e486da4d2cd971ad1a4fe216cc2e3d" dependencies: - "@babel/helper-module-imports" "7.0.0-beta.42" - "@babel/helper-simple-access" "7.0.0-beta.42" - "@babel/helper-split-export-declaration" "7.0.0-beta.42" - "@babel/template" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - lodash "^4.2.0" + "@babel/types" "^7.0.0" -"@babel/helper-optimise-call-expression@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0-beta.42.tgz#9ba770079001672a578fe833190cf03f973568b1" +"@babel/helper-module-transforms@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.0.0.tgz#b01ee7d543e81e8c3fc404b19c9f26acb6e4cf4c" dependencies: - "@babel/types" "7.0.0-beta.42" + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.0.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/types" "^7.0.0" + lodash "^4.17.10" -"@babel/helper-plugin-utils@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0-beta.42.tgz#9aa8b3e5dc72abea6b4f686712a7363cb29ea057" +"@babel/helper-optimise-call-expression@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" + dependencies: + "@babel/types" "^7.0.0" -"@babel/helper-regex@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0-beta.42.tgz#ba01d0cd94786561e2afeb8c8b0e544aa034a1e1" +"@babel/helper-plugin-utils@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250" + +"@babel/helper-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.0.0.tgz#2c1718923b57f9bbe64705ffe5640ac64d9bdb27" dependencies: - lodash "^4.2.0" + lodash "^4.17.10" -"@babel/helper-remap-async-to-generator@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0-beta.42.tgz#c27dd7789f3a9973493a67a7914ac9253e879071" +"@babel/helper-remap-async-to-generator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.0.0.tgz#6512273c2feb91587822335cf913fdf680c26901" dependencies: - "@babel/helper-annotate-as-pure" "7.0.0-beta.42" - "@babel/helper-wrap-function" "7.0.0-beta.42" - "@babel/template" "7.0.0-beta.42" - "@babel/traverse" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-wrap-function" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" -"@babel/helper-replace-supers@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0-beta.42.tgz#fd984b6022982b71a1237d82d932ab69ff988aa4" +"@babel/helper-replace-supers@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.0.0.tgz#b6f21237280e0be54f591f63a464b66627ced707" dependencies: - "@babel/helper-optimise-call-expression" "7.0.0-beta.42" - "@babel/template" "7.0.0-beta.42" - "@babel/traverse" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" -"@babel/helper-simple-access@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.0.0-beta.42.tgz#9d32bed186b0bc365115c600817e791c22d72c74" +"@babel/helper-simple-access@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.0.0.tgz#ff36a27983ae4c27122da2f7f294dced80ecbd08" dependencies: - "@babel/template" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - lodash "^4.2.0" + "@babel/template" "^7.0.0" + "@babel/types" "^7.0.0" -"@babel/helper-split-export-declaration@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0-beta.42.tgz#0d0d5254220a9cc4e7e226240306b939dc210ee7" +"@babel/helper-split-export-declaration@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" dependencies: - "@babel/types" "7.0.0-beta.42" + "@babel/types" "^7.0.0" -"@babel/helper-wrap-function@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0-beta.42.tgz#5ffc6576902aa2a10fe6666e063bd45029c36db3" +"@babel/helper-wrap-function@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.0.0.tgz#1c8e42a2cfb0808e3140189dfe9490782a6fa740" dependencies: - "@babel/helper-function-name" "7.0.0-beta.42" - "@babel/template" "7.0.0-beta.42" - "@babel/traverse" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" + "@babel/helper-function-name" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" -"@babel/helpers@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.0.0-beta.42.tgz#151c1c4e9da1b6ce83d54c1be5fb8c9c57aa5044" +"@babel/helpers@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.0.0.tgz#7213388341eeb07417f44710fd7e1d00acfa6ac0" dependencies: - "@babel/template" "7.0.0-beta.42" - "@babel/traverse" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" -"@babel/highlight@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.42.tgz#a502a1c0d6f99b2b0e81d468a1b0c0e81e3f3623" +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" dependencies: chalk "^2.0.0" esutils "^2.0.2" - js-tokens "^3.0.0" + js-tokens "^4.0.0" + +"@babel/parser@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.0.0.tgz#697655183394facffb063437ddf52c0277698775" -"@babel/plugin-proposal-async-generator-functions@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0-beta.42.tgz#81465d19b6f5559092d9be4d11d6351131d08696" +"@babel/plugin-proposal-async-generator-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.0.0.tgz#5d1eb6b44fd388b97f964350007ab9da090b1d70" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" - "@babel/helper-remap-async-to-generator" "7.0.0-beta.42" - "@babel/plugin-syntax-async-generators" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.0.0" + "@babel/plugin-syntax-async-generators" "^7.0.0" -"@babel/plugin-proposal-object-rest-spread@7.0.0-beta.42", "@babel/plugin-proposal-object-rest-spread@^7.0.0-beta.40": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0-beta.42.tgz#56ebd55a8268165cb7cb43a5a232b60f5435a822" +"@babel/plugin-proposal-json-strings@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.0.0.tgz#3b4d7b5cf51e1f2e70f52351d28d44fc2970d01e" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" - "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings" "^7.0.0" -"@babel/plugin-proposal-optional-catch-binding@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0-beta.42.tgz#d885ba187d2ce6bbae0c227a67a38389c6f930f8" +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.0.0-beta.40": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.0.0.tgz#9a17b547f64d0676b6c9cecd4edf74a82ab85e7e" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" - "@babel/plugin-syntax-optional-catch-binding" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" -"@babel/plugin-proposal-unicode-property-regex@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0-beta.42.tgz#84f209398368c194c217edd8131420e0ddb79661" +"@babel/plugin-proposal-optional-catch-binding@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.0.0.tgz#b610d928fe551ff7117d42c8bb410eec312a6425" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" - "@babel/helper-regex" "7.0.0-beta.42" - regexpu-core "^4.1.3" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" -"@babel/plugin-syntax-async-generators@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0-beta.42.tgz#deccff2f01c2ed280493b0ba256b14df232ca299" +"@babel/plugin-proposal-unicode-property-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.0.0.tgz#498b39cd72536cd7c4b26177d030226eba08cd33" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" + regexpu-core "^4.2.0" -"@babel/plugin-syntax-object-rest-spread@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0-beta.42.tgz#aa789865abe78a4895d4a0be9de4d34b1a1d5063" +"@babel/plugin-syntax-async-generators@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.0.0.tgz#bf0891dcdbf59558359d0c626fdc9490e20bc13c" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-syntax-optional-catch-binding@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0-beta.42.tgz#d3ebfaa463f42f5a35be5cbd2f27c1fc3bf96c1b" +"@babel/plugin-syntax-json-strings@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.0.0.tgz#0d259a68090e15b383ce3710e01d5b23f3770cbd" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-arrow-functions@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0-beta.42.tgz#b918eb8760c38d6503a1a9858fa073786b60ab2b" +"@babel/plugin-syntax-object-rest-spread@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.0.0.tgz#37d8fbcaf216bd658ea1aebbeb8b75e88ebc549b" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-async-to-generator@7.0.0-beta.42", "@babel/plugin-transform-async-to-generator@^7.0.0-beta.40": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0-beta.42.tgz#c74e278b9722efeb7f2c7da5fbff7540c4a7f353" +"@babel/plugin-syntax-optional-catch-binding@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.0.0.tgz#886f72008b3a8b185977f7cb70713b45e51ee475" dependencies: - "@babel/helper-module-imports" "7.0.0-beta.42" - "@babel/helper-plugin-utils" "7.0.0-beta.42" - "@babel/helper-remap-async-to-generator" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoped-functions@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0-beta.42.tgz#34742dcf409106038e413e0d64b90e98df15f9eb" +"@babel/plugin-transform-arrow-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.0.0.tgz#a6c14875848c68a3b4b3163a486535ef25c7e749" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-block-scoping@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0-beta.42.tgz#272c5cc2b46613ebcd2e19491b19263c36d2c3f4" +"@babel/plugin-transform-async-to-generator@^7.0.0", "@babel/plugin-transform-async-to-generator@^7.0.0-beta.40": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.0.0.tgz#feaf18f4bfeaf2236eea4b2d4879da83006cc8f5" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" - lodash "^4.2.0" + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.0.0" -"@babel/plugin-transform-classes@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0-beta.42.tgz#3b9fdb2e36f9f16b011a2ddc4ebb610e3dc9edfb" +"@babel/plugin-transform-block-scoped-functions@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.0.0.tgz#482b3f75103927e37288b3b67b65f848e2aa0d07" + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-block-scoping@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.0.0.tgz#1745075edffd7cdaf69fab2fb6f9694424b7e9bc" dependencies: - "@babel/helper-annotate-as-pure" "7.0.0-beta.42" - "@babel/helper-define-map" "7.0.0-beta.42" - "@babel/helper-function-name" "7.0.0-beta.42" - "@babel/helper-optimise-call-expression" "7.0.0-beta.42" - "@babel/helper-plugin-utils" "7.0.0-beta.42" - "@babel/helper-replace-supers" "7.0.0-beta.42" - "@babel/helper-split-export-declaration" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.10" + +"@babel/plugin-transform-classes@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.0.0.tgz#9e65ca401747dde99e344baea90ab50dccb4c468" + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.0.0" + "@babel/helper-function-name" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.0.0" + "@babel/helper-split-export-declaration" "^7.0.0" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0-beta.42.tgz#153662309475099c6948827fc86edbd7fb26f09d" +"@babel/plugin-transform-computed-properties@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.0.0.tgz#2fbb8900cd3e8258f2a2ede909b90e7556185e31" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-destructuring@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0-beta.42.tgz#1aaca42a00d9ef2b0307557c748f32e83ac44899" +"@babel/plugin-transform-destructuring@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.0.0.tgz#68e911e1935dda2f06b6ccbbf184ffb024e9d43a" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-dotall-regex@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0-beta.42.tgz#af7ead30c1b6c3ea8a53973cfcfdbda9edc3c967" +"@babel/plugin-transform-dotall-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.0.0.tgz#73a24da69bc3c370251f43a3d048198546115e58" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" - "@babel/helper-regex" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" -"@babel/plugin-transform-duplicate-keys@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0-beta.42.tgz#9678ab9480c6120e9b08014371c010bed481485a" +"@babel/plugin-transform-duplicate-keys@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.0.0.tgz#a0601e580991e7cace080e4cf919cfd58da74e86" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-exponentiation-operator@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0-beta.42.tgz#fe637583e8d00ff6d63461e274a63dd2f373baf5" +"@babel/plugin-transform-exponentiation-operator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.0.0.tgz#c51b45e090a01876f64d32b5b46c0799c85ea56c" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "7.0.0-beta.42" - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-for-of@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0-beta.42.tgz#acf51c5986050e1aff054c8d2a95ef3f6bec153e" +"@babel/plugin-transform-for-of@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.0.0.tgz#f2ba4eadb83bd17dc3c7e9b30f4707365e1c3e39" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-function-name@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0-beta.42.tgz#1eb004a9abde01010d47ec7629d46b1e4e2c6228" +"@babel/plugin-transform-function-name@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.0.0.tgz#eeda18dc22584e13c3581a68f6be4822bb1d1d81" dependencies: - "@babel/helper-function-name" "7.0.0-beta.42" - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-function-name" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-literals@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0-beta.42.tgz#61a34a82d757be4ddf937eda4b2d6c36b63b9c4e" +"@babel/plugin-transform-literals@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.0.0.tgz#2aec1d29cdd24c407359c930cdd89e914ee8ff86" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-amd@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0-beta.42.tgz#f4c634f49b5051abf6cefcbae100b41ba1369eb6" +"@babel/plugin-transform-modules-amd@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.0.0.tgz#2430ab73db9960c4ca89966f425b803f5d0d0468" dependencies: - "@babel/helper-module-transforms" "7.0.0-beta.42" - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-module-transforms" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-commonjs@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0-beta.42.tgz#bdfb30e194c8841ec3ddd8a011974102d0d74afc" +"@babel/plugin-transform-modules-commonjs@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.0.0.tgz#20b906e5ab130dd8e456b694a94d9575da0fd41f" dependencies: - "@babel/helper-module-transforms" "7.0.0-beta.42" - "@babel/helper-plugin-utils" "7.0.0-beta.42" - "@babel/helper-simple-access" "7.0.0-beta.42" + "@babel/helper-module-transforms" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.0.0" -"@babel/plugin-transform-modules-systemjs@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0-beta.42.tgz#424e25542b4d6ea6ea5f933df6ec9c345358b070" +"@babel/plugin-transform-modules-systemjs@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.0.0.tgz#8873d876d4fee23209decc4d1feab8f198cf2df4" dependencies: - "@babel/helper-hoist-variables" "7.0.0-beta.42" - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-hoist-variables" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-modules-umd@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0-beta.42.tgz#2fbad368c83471c76f8dcace98492e4e3fdddc76" +"@babel/plugin-transform-modules-umd@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.0.0.tgz#e7bb4f2a6cd199668964241951a25013450349be" dependencies: - "@babel/helper-module-transforms" "7.0.0-beta.42" - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-module-transforms" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-new-target@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0-beta.42.tgz#8b309b67b6a92fd1ab6cb93bea0fa12359795c20" +"@babel/plugin-transform-new-target@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-object-super@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0-beta.42.tgz#f19ae6007ff675ea0f52499d09f73ae9f96db1a0" +"@babel/plugin-transform-object-super@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.0.0.tgz#b8587d511309b3a0e96e9e38169908b3e392041e" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" - "@babel/helper-replace-supers" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.0.0" -"@babel/plugin-transform-parameters@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0-beta.42.tgz#58434afb01afb0a3aa82402142807fb70eb3fb56" +"@babel/plugin-transform-parameters@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.0.0.tgz#da864efa111816a6df161d492f33de10e74b1949" dependencies: - "@babel/helper-call-delegate" "7.0.0-beta.42" - "@babel/helper-get-function-arity" "7.0.0-beta.42" - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-call-delegate" "^7.0.0" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-regenerator@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0-beta.42.tgz#af164751340a7e513c53e614c6f1f90279e459ef" +"@babel/plugin-transform-regenerator@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" dependencies: - regenerator-transform "^0.12.3" + regenerator-transform "^0.13.3" -"@babel/plugin-transform-shorthand-properties@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0-beta.42.tgz#fb0b66f4afd4a5a67d9d84a85cbf6f7fef0a7b4f" +"@babel/plugin-transform-shorthand-properties@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.0.0.tgz#85f8af592dcc07647541a0350e8c95c7bf419d15" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-spread@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0-beta.42.tgz#4d7dde45c95e55d418477e1ea95dd6d9b71f15e4" +"@babel/plugin-transform-spread@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.0.0.tgz#93583ce48dd8c85e53f3a46056c856e4af30b49b" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-sticky-regex@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0-beta.42.tgz#b0a5585ec24013dd6f0b1b8cc7a73423c4bc082f" +"@babel/plugin-transform-sticky-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.0.0.tgz#30a9d64ac2ab46eec087b8530535becd90e73366" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" - "@babel/helper-regex" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" -"@babel/plugin-transform-template-literals@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0-beta.42.tgz#7f05c5c003da8e485462cfc36f9d482b0a9a75df" +"@babel/plugin-transform-template-literals@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.0.0.tgz#084f1952efe5b153ddae69eb8945f882c7a97c65" dependencies: - "@babel/helper-annotate-as-pure" "7.0.0-beta.42" - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-typeof-symbol@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0-beta.42.tgz#7d93fcd194db78b839488cddddefbaa46032e327" +"@babel/plugin-transform-typeof-symbol@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.0.0.tgz#4dcf1e52e943e5267b7313bff347fdbe0f81cec9" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" -"@babel/plugin-transform-unicode-regex@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0-beta.42.tgz#1e7bdcf678d9a9066d06e6d334ab41ca11ca00ad" +"@babel/plugin-transform-unicode-regex@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.0.0.tgz#c6780e5b1863a76fe792d90eded9fcd5b51d68fc" dependencies: - "@babel/helper-plugin-utils" "7.0.0-beta.42" - "@babel/helper-regex" "7.0.0-beta.42" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" "@babel/preset-env@^7.0.0-beta.40": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.0.0-beta.42.tgz#671e688057c010b22a7811b965f7da5d79c472d3" - dependencies: - "@babel/helper-module-imports" "7.0.0-beta.42" - "@babel/helper-plugin-utils" "7.0.0-beta.42" - "@babel/plugin-proposal-async-generator-functions" "7.0.0-beta.42" - "@babel/plugin-proposal-object-rest-spread" "7.0.0-beta.42" - "@babel/plugin-proposal-optional-catch-binding" "7.0.0-beta.42" - "@babel/plugin-proposal-unicode-property-regex" "7.0.0-beta.42" - "@babel/plugin-syntax-async-generators" "7.0.0-beta.42" - "@babel/plugin-syntax-object-rest-spread" "7.0.0-beta.42" - "@babel/plugin-syntax-optional-catch-binding" "7.0.0-beta.42" - "@babel/plugin-transform-arrow-functions" "7.0.0-beta.42" - "@babel/plugin-transform-async-to-generator" "7.0.0-beta.42" - "@babel/plugin-transform-block-scoped-functions" "7.0.0-beta.42" - "@babel/plugin-transform-block-scoping" "7.0.0-beta.42" - "@babel/plugin-transform-classes" "7.0.0-beta.42" - "@babel/plugin-transform-computed-properties" "7.0.0-beta.42" - "@babel/plugin-transform-destructuring" "7.0.0-beta.42" - "@babel/plugin-transform-dotall-regex" "7.0.0-beta.42" - "@babel/plugin-transform-duplicate-keys" "7.0.0-beta.42" - "@babel/plugin-transform-exponentiation-operator" "7.0.0-beta.42" - "@babel/plugin-transform-for-of" "7.0.0-beta.42" - "@babel/plugin-transform-function-name" "7.0.0-beta.42" - "@babel/plugin-transform-literals" "7.0.0-beta.42" - "@babel/plugin-transform-modules-amd" "7.0.0-beta.42" - "@babel/plugin-transform-modules-commonjs" "7.0.0-beta.42" - "@babel/plugin-transform-modules-systemjs" "7.0.0-beta.42" - "@babel/plugin-transform-modules-umd" "7.0.0-beta.42" - "@babel/plugin-transform-new-target" "7.0.0-beta.42" - "@babel/plugin-transform-object-super" "7.0.0-beta.42" - "@babel/plugin-transform-parameters" "7.0.0-beta.42" - "@babel/plugin-transform-regenerator" "7.0.0-beta.42" - "@babel/plugin-transform-shorthand-properties" "7.0.0-beta.42" - "@babel/plugin-transform-spread" "7.0.0-beta.42" - "@babel/plugin-transform-sticky-regex" "7.0.0-beta.42" - "@babel/plugin-transform-template-literals" "7.0.0-beta.42" - "@babel/plugin-transform-typeof-symbol" "7.0.0-beta.42" - "@babel/plugin-transform-unicode-regex" "7.0.0-beta.42" - browserslist "^3.0.0" + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.0.0.tgz#f450f200c14e713f98cb14d113bf0c2cfbb89ca9" + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.0.0" + "@babel/plugin-proposal-json-strings" "^7.0.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/plugin-proposal-optional-catch-binding" "^7.0.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.0.0" + "@babel/plugin-syntax-async-generators" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.0.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.0.0" + "@babel/plugin-transform-arrow-functions" "^7.0.0" + "@babel/plugin-transform-async-to-generator" "^7.0.0" + "@babel/plugin-transform-block-scoped-functions" "^7.0.0" + "@babel/plugin-transform-block-scoping" "^7.0.0" + "@babel/plugin-transform-classes" "^7.0.0" + "@babel/plugin-transform-computed-properties" "^7.0.0" + "@babel/plugin-transform-destructuring" "^7.0.0" + "@babel/plugin-transform-dotall-regex" "^7.0.0" + "@babel/plugin-transform-duplicate-keys" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator" "^7.0.0" + "@babel/plugin-transform-for-of" "^7.0.0" + "@babel/plugin-transform-function-name" "^7.0.0" + "@babel/plugin-transform-literals" "^7.0.0" + "@babel/plugin-transform-modules-amd" "^7.0.0" + "@babel/plugin-transform-modules-commonjs" "^7.0.0" + "@babel/plugin-transform-modules-systemjs" "^7.0.0" + "@babel/plugin-transform-modules-umd" "^7.0.0" + "@babel/plugin-transform-new-target" "^7.0.0" + "@babel/plugin-transform-object-super" "^7.0.0" + "@babel/plugin-transform-parameters" "^7.0.0" + "@babel/plugin-transform-regenerator" "^7.0.0" + "@babel/plugin-transform-shorthand-properties" "^7.0.0" + "@babel/plugin-transform-spread" "^7.0.0" + "@babel/plugin-transform-sticky-regex" "^7.0.0" + "@babel/plugin-transform-template-literals" "^7.0.0" + "@babel/plugin-transform-typeof-symbol" "^7.0.0" + "@babel/plugin-transform-unicode-regex" "^7.0.0" + browserslist "^4.1.0" invariant "^2.2.2" + js-levenshtein "^1.1.3" semver "^5.3.0" -"@babel/template@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0-beta.42.tgz#7186d4e70d44cdec975049ba0a73bdaf5cdee052" - dependencies: - "@babel/code-frame" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - babylon "7.0.0-beta.42" - lodash "^4.2.0" - -"@babel/traverse@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0-beta.42.tgz#f4bf4d1e33d41baf45205e2d0463591d57326285" - dependencies: - "@babel/code-frame" "7.0.0-beta.42" - "@babel/generator" "7.0.0-beta.42" - "@babel/helper-function-name" "7.0.0-beta.42" - "@babel/helper-split-export-declaration" "7.0.0-beta.42" - "@babel/types" "7.0.0-beta.42" - babylon "7.0.0-beta.42" +"@babel/template@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.0.0.tgz#c2bc9870405959c89a9c814376a2ecb247838c80" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/types" "^7.0.0" + +"@babel/traverse@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.0.0.tgz#b1fe9b6567fdf3ab542cfad6f3b31f854d799a61" + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.0.0" + "@babel/helper-function-name" "^7.0.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/types" "^7.0.0" debug "^3.1.0" globals "^11.1.0" - invariant "^2.2.0" - lodash "^4.2.0" + lodash "^4.17.10" -"@babel/types@7.0.0-beta.42": - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0-beta.42.tgz#1e2118767684880f6963801b272fd2b3348efacc" +"@babel/types@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.0.0.tgz#6e191793d3c854d19c6749989e3bc55f0e962118" dependencies: esutils "^2.0.2" - lodash "^4.2.0" + lodash "^4.17.10" to-fast-properties "^2.0.0" +"@mrmlnc/readdir-enhanced@^2.2.1": + version "2.2.1" + resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + dependencies: + call-me-maybe "^1.0.1" + glob-to-regexp "^0.3.0" + +"@nodelib/fs.stat@^1.0.1": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.2.tgz#54c5a964462be3d4d78af631363c18d6fa91ac26" + +"@samverschueren/stream-to-observable@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz#ecdf48d532c58ea477acfcab80348424f8d0662f" + dependencies: + any-observable "^0.3.0" + "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" -abab@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" +"@webassemblyjs/ast@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.5.13.tgz#81155a570bd5803a30ec31436bc2c9c0ede38f25" + dependencies: + "@webassemblyjs/helper-module-context" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/wast-parser" "1.5.13" + debug "^3.1.0" + mamacro "^0.0.3" + +"@webassemblyjs/floating-point-hex-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.5.13.tgz#29ce0baa97411f70e8cce68ce9c0f9d819a4e298" + +"@webassemblyjs/helper-api-error@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.5.13.tgz#e49b051d67ee19a56e29b9aa8bd949b5b4442a59" + +"@webassemblyjs/helper-buffer@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.5.13.tgz#873bb0a1b46449231137c1262ddfd05695195a1e" + dependencies: + debug "^3.1.0" + +"@webassemblyjs/helper-code-frame@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.5.13.tgz#1bd2181b6a0be14e004f0fe9f5a660d265362b58" + dependencies: + "@webassemblyjs/wast-printer" "1.5.13" + +"@webassemblyjs/helper-fsm@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.5.13.tgz#cdf3d9d33005d543a5c5e5adaabf679ffa8db924" + +"@webassemblyjs/helper-module-context@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.5.13.tgz#dc29ddfb51ed657655286f94a5d72d8a489147c5" + dependencies: + debug "^3.1.0" + mamacro "^0.0.3" + +"@webassemblyjs/helper-wasm-bytecode@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.5.13.tgz#03245817f0a762382e61733146f5773def15a747" + +"@webassemblyjs/helper-wasm-section@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.5.13.tgz#efc76f44a10d3073b584b43c38a179df173d5c7d" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + debug "^3.1.0" + +"@webassemblyjs/ieee754@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.5.13.tgz#573e97c8c12e4eebb316ca5fde0203ddd90b0364" + dependencies: + ieee754 "^1.1.11" + +"@webassemblyjs/leb128@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.5.13.tgz#ab52ebab9cec283c1c1897ac1da833a04a3f4cee" + dependencies: + long "4.0.0" + +"@webassemblyjs/utf8@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.5.13.tgz#6b53d2cd861cf94fa99c1f12779dde692fbc2469" + +"@webassemblyjs/wasm-edit@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.5.13.tgz#c9cef5664c245cf11b3b3a73110c9155831724a8" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/helper-wasm-section" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + "@webassemblyjs/wasm-opt" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + "@webassemblyjs/wast-printer" "1.5.13" + debug "^3.1.0" + +"@webassemblyjs/wasm-gen@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.5.13.tgz#8e6ea113c4b432fa66540189e79b16d7a140700e" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/ieee754" "1.5.13" + "@webassemblyjs/leb128" "1.5.13" + "@webassemblyjs/utf8" "1.5.13" + +"@webassemblyjs/wasm-opt@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.5.13.tgz#147aad7717a7ee4211c36b21a5f4c30dddf33138" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-buffer" "1.5.13" + "@webassemblyjs/wasm-gen" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + debug "^3.1.0" + +"@webassemblyjs/wasm-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.5.13.tgz#6f46516c5bb23904fbdf58009233c2dd8a54c72f" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-api-error" "1.5.13" + "@webassemblyjs/helper-wasm-bytecode" "1.5.13" + "@webassemblyjs/ieee754" "1.5.13" + "@webassemblyjs/leb128" "1.5.13" + "@webassemblyjs/utf8" "1.5.13" + +"@webassemblyjs/wast-parser@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.5.13.tgz#5727a705d397ae6a3ae99d7f5460acf2ec646eea" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/floating-point-hex-parser" "1.5.13" + "@webassemblyjs/helper-api-error" "1.5.13" + "@webassemblyjs/helper-code-frame" "1.5.13" + "@webassemblyjs/helper-fsm" "1.5.13" + long "^3.2.0" + mamacro "^0.0.3" + +"@webassemblyjs/wast-printer@1.5.13": + version "1.5.13" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.5.13.tgz#bb34d528c14b4f579e7ec11e793ec50ad7cd7c95" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/wast-parser" "1.5.13" + long "^3.2.0" + +abab@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" abbrev@1: version "1.1.1" @@ -544,22 +718,19 @@ acorn-globals@^4.1.0: dependencies: acorn "^5.0.0" -acorn@^5.0.0, acorn@^5.3.0: - version "5.5.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" +acorn@^5.0.0, acorn@^5.5.3, acorn@^5.6.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.2.tgz#91fa871883485d06708800318404e72bfb26dcc5" -ajv-keywords@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" +ajv-errors@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.0.tgz#ecf021fa108fd17dfb5e6b383f2dd233e31ffc59" -ajv@^4.9.1: - version "4.11.8" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" - dependencies: - co "^4.6.0" - json-stable-stringify "^1.0.1" +ajv-keywords@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.2.0.tgz#e86b819c602cf8821ad637413698f1dec021847a" -ajv@^5.1.0: +ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" dependencies: @@ -569,29 +740,21 @@ ajv@^5.1.0: json-schema-traverse "^0.3.0" ajv@^6.1.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.4.0.tgz#d3aff78e9277549771daf0164cff48482b754fc6" + version "6.5.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.3.tgz#71a569d189ecf4f4f321224fecb166f071dd90f9" dependencies: - fast-deep-equal "^1.0.0" + fast-deep-equal "^2.0.1" fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.3.0" - uri-js "^3.0.2" - -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" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" alphanum-sort@^1.0.1, alphanum-sort@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" +ansi-colors@^3.0.0: + version "3.0.5" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.0.5.tgz#cb9dc64993b64fd6945485f797fc3853137d9a7b" ansi-escapes@^1.0.0: version "1.4.0" @@ -627,16 +790,9 @@ ansi-styles@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" -any-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.2.0.tgz#c67870058003579009083f54ac0abafb5c33d242" - -anymatch@^1.3.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" - dependencies: - micromatch "^2.1.5" - normalize-path "^2.0.0" +any-observable@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/any-observable/-/any-observable-0.3.0.tgz#af933475e5806a67d0d7df090dd5e8bef65d119b" anymatch@^2.0.0: version "2.0.0" @@ -656,8 +812,8 @@ aproba@^1.0.3, aproba@^1.1.1: resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" are-we-there-yet@~1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + version "1.1.5" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -719,13 +875,6 @@ array-flatten@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-2.1.1.tgz#426bb9da84090c1838d812c8150af20a8331e296" -array-includes@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" @@ -748,10 +897,6 @@ arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" -asap@~2.0.3: - version "2.0.6" - resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" - asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" @@ -761,17 +906,15 @@ asn1.js@^4.0.0: minimalistic-assert "^1.0.0" asn1@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + version "0.2.4" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" + dependencies: + safer-buffer "~2.1.0" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" -assert-plus@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" - assert@^1.1.1: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" @@ -786,9 +929,9 @@ ast-types@0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" -ast-types@0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8" +ast-types@0.11.5: + version "0.11.5" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.5.tgz#9890825d660c03c28339f315e9fa0a360e31ec28" astral-regex@^1.0.0: version "1.0.0" @@ -802,23 +945,23 @@ async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" -async@^1.4.0, async@^1.5.0, async@^1.5.2: +async@^1.5.0, async@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^2.0.1, async@^2.1.4, async@^2.4.1, async@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" +async@^2.1.4, async@^2.4.1, async@^2.5.0, async@^2.6.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" dependencies: - lodash "^4.14.0" + lodash "^4.17.10" asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" -atob@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.0.tgz#ab2b150e51d7b122b9efc8d7340c06b6c41076bc" +atob@^2.1.1: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" autoprefixer@^6.3.1: version "6.7.7" @@ -832,27 +975,23 @@ autoprefixer@^6.3.1: postcss-value-parser "^3.2.3" autoprefixer@^8.1.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.2.0.tgz#1e49b611b31a5259b86b7a6b2b1b8faf091abe2a" + version "8.6.5" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9" dependencies: - browserslist "^3.2.0" - caniuse-lite "^1.0.30000817" + browserslist "^3.2.8" + caniuse-lite "^1.0.30000864" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^6.0.20" + postcss "^6.0.23" postcss-value-parser "^3.2.3" -aws-sign2@~0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" - aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" -aws4@^1.2.1, aws4@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" babel-code-frame@^6.26.0: version "6.26.0" @@ -863,8 +1002,8 @@ babel-code-frame@^6.26.0: js-tokens "^3.0.2" babel-core@^6.0.0, babel-core@^6.26.0: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" dependencies: babel-code-frame "^6.26.0" babel-generator "^6.26.0" @@ -876,15 +1015,15 @@ babel-core@^6.0.0, babel-core@^6.26.0: babel-traverse "^6.26.0" babel-types "^6.26.0" babylon "^6.18.0" - convert-source-map "^1.5.0" - debug "^2.6.8" + convert-source-map "^1.5.1" + debug "^2.6.9" json5 "^0.5.1" lodash "^4.17.4" minimatch "^3.0.4" path-is-absolute "^1.0.1" - private "^0.1.7" + private "^0.1.8" slash "^1.0.0" - source-map "^0.5.6" + source-map "^0.5.7" babel-core@^7.0.0-0: version "7.0.0-bridge.0" @@ -1021,20 +1160,21 @@ babel-helpers@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-jest@^22.4.1, babel-jest@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.3.tgz#4b7a0b6041691bbd422ab49b3b73654a49a6627a" +babel-jest@^22.4.1, babel-jest@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.4.tgz#977259240420e227444ebe49e226a61e49ea659d" dependencies: babel-plugin-istanbul "^4.1.5" - babel-preset-jest "^22.4.3" + babel-preset-jest "^22.4.4" babel-loader@^8.0.0-beta.2: - version "8.0.0-beta.2" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.0-beta.2.tgz#4d5b67c964dc8c9cba866fd13d6b90df3acf8723" + version "8.0.2" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.2.tgz#2079b8ec1628284a929241da3d90f5b3de2a5ae5" dependencies: find-cache-dir "^1.0.0" loader-utils "^1.0.2" mkdirp "^0.5.1" + util.promisify "^1.0.0" babel-messages@^6.23.0: version "6.23.0" @@ -1049,56 +1189,57 @@ babel-plugin-check-es2015-constants@^6.22.0: babel-runtime "^6.22.0" babel-plugin-istanbul@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" + version "4.1.6" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" dependencies: + babel-plugin-syntax-object-rest-spread "^6.13.0" find-up "^2.1.0" - istanbul-lib-instrument "^1.7.5" - test-exclude "^4.1.1" + istanbul-lib-instrument "^1.10.1" + test-exclude "^4.2.1" -babel-plugin-jest-hoist@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.3.tgz#7d8bcccadc2667f96a0dcc6afe1891875ee6c14a" +babel-plugin-jest-hoist@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.4.tgz#b9851906eab34c7bf6f8c895a2b08bea1a844c0b" babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + resolved "http://registry.npmjs.org/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" babel-plugin-syntax-async-generators@^6.5.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + resolved "http://registry.npmjs.org/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" babel-plugin-syntax-class-constructor-call@^6.18.0: version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + resolved "http://registry.npmjs.org/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" babel-plugin-syntax-class-properties@^6.8.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + resolved "http://registry.npmjs.org/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" babel-plugin-syntax-decorators@^6.13.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + resolved "http://registry.npmjs.org/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" babel-plugin-syntax-dynamic-import@^6.18.0: version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + resolved "http://registry.npmjs.org/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + resolved "http://registry.npmjs.org/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" babel-plugin-syntax-export-extensions@^6.8.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + resolved "http://registry.npmjs.org/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" babel-plugin-syntax-flow@^6.18.0: version "6.18.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + resolved "http://registry.npmjs.org/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" babel-plugin-syntax-object-rest-spread@^6.13.0, babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" - resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + resolved "http://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" @@ -1232,8 +1373,8 @@ babel-plugin-transform-es2015-modules-amd@^6.24.1: babel-template "^6.24.1" babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.26.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + version "6.26.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" dependencies: babel-plugin-transform-strict-mode "^6.24.1" babel-runtime "^6.26.0" @@ -1386,11 +1527,11 @@ babel-preset-es2015@^6.9.0: babel-plugin-transform-es2015-unicode-regex "^6.24.1" babel-plugin-transform-regenerator "^6.24.1" -babel-preset-jest@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.3.tgz#e92eef9813b7026ab4ca675799f37419b5a44156" +babel-preset-jest@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.4.tgz#ec9fbd8bcd7dfd24b8b5320e0e688013235b7c39" dependencies: - babel-plugin-jest-hoist "^22.4.3" + babel-plugin-jest-hoist "^22.4.4" babel-plugin-syntax-object-rest-spread "^6.13.0" babel-preset-stage-1@^6.5.0: @@ -1472,14 +1613,14 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26 lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@7.0.0-beta.42, babylon@^7.0.0-beta.30: - version "7.0.0-beta.42" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.42.tgz#67cfabcd4f3ec82999d29031ccdea89d0ba99657" - babylon@^6.17.3, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" +babylon@^7.0.0-beta.47: + version "7.0.0-beta.47" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80" + balanced-match@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838" @@ -1489,8 +1630,8 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" base64-js@^1.0.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" + version "1.3.0" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.0.tgz#cab1e6118f051095e58b5281aea8c1cd22bfc0e3" base@^0.11.1: version "0.11.2" @@ -1509,8 +1650,8 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" bcrypt-pbkdf@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" dependencies: tweetnacl "^0.14.3" @@ -1522,15 +1663,39 @@ binary-extensions@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" +"binary@>= 0.3.0 < 1", binary@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + binaryextensions@2: version "2.1.1" resolved "https://registry.yarnpkg.com/binaryextensions/-/binaryextensions-2.1.1.tgz#3209a51ca4a4ad541a3b8d3d6a6d5b83a2485935" -bl@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.1.2.tgz#fdca871a99713aa00d19e3bbba41c44787a65398" +bindings@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" + +binwrap@0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/binwrap/-/binwrap-0.1.4.tgz#ca1f7870302212518fa24b07726f9c50a15c7559" + dependencies: + request "^2.81.0" + request-promise "^4.2.0" + tar "^2.2.1" + unzip "^0.1.11" + +binwrap@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/binwrap/-/binwrap-0.2.0.tgz#572d0f48c4e767d72d622f0b805ed7ce1db16f9a" dependencies: - readable-stream "~2.0.5" + mustache "^2.3.0" + request "^2.87.0" + request-promise "^4.2.0" + tar "^2.2.1" + unzip-stream "^0.3.0" block-stream@*: version "0.0.9" @@ -1538,9 +1703,9 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.5.1: - version "3.5.1" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" +bluebird@^3.5.0, bluebird@^3.5.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a" bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" @@ -1576,24 +1741,6 @@ boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" -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" - -boom@4.x.x: - version "4.3.1" - resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" - dependencies: - hoek "4.x.x" - -boom@5.x.x: - version "5.2.0" - resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" - dependencies: - hoek "4.x.x" - brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -1610,16 +1757,14 @@ braces@^1.8.2: repeat-element "^1.1.2" braces@^2.3.0, braces@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" - define-property "^1.0.0" extend-shallow "^2.0.1" fill-range "^4.0.0" isobject "^3.0.1" - kind-of "^6.0.2" repeat-element "^1.1.2" snapdragon "^0.8.1" snapdragon-node "^2.0.1" @@ -1635,14 +1780,14 @@ browser-process-hrtime@^0.1.2: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" browser-resolve@^1.11.2: - version "1.11.2" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + version "1.11.3" + resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" dependencies: resolve "1.1.7" browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.1.1" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" dependencies: buffer-xor "^1.0.3" cipher-base "^1.0.0" @@ -1652,20 +1797,21 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: safe-buffer "^5.0.1" browserify-cipher@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + version "1.0.1" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" evp_bytestokey "^1.0.0" browserify-des@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + version "1.0.2" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" dependencies: cipher-base "^1.0.1" des.js "^1.0.0" inherits "^2.0.1" + safe-buffer "^5.1.2" browserify-rsa@^4.0.0: version "4.0.1" @@ -1699,12 +1845,20 @@ browserslist@^1.3.6, browserslist@^1.5.2, browserslist@^1.7.6: caniuse-db "^1.0.30000639" electron-to-chromium "^1.2.7" -browserslist@^3.0.0, browserslist@^3.2.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.4.tgz#fb9ad70fd09875137ae943a31ab815ed76896031" +browserslist@^3.2.8: + version "3.2.8" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" dependencies: - caniuse-lite "^1.0.30000821" - electron-to-chromium "^1.3.41" + caniuse-lite "^1.0.30000844" + electron-to-chromium "^1.3.47" + +browserslist@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.1.1.tgz#328eb4ff1215b12df6589e9ab82f8adaa4fc8cd6" + dependencies: + caniuse-lite "^1.0.30000884" + electron-to-chromium "^1.3.62" + node-releases "^1.0.0-alpha.11" bser@^2.0.0: version "2.0.0" @@ -1712,9 +1866,24 @@ bser@^2.0.0: dependencies: node-int64 "^0.4.0" -buffer-from@^1.0.0: +buffer-alloc-unsafe@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz#bd7dc26ae2972d0eda253be061dba992349c19f0" + +buffer-alloc@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/buffer-alloc/-/buffer-alloc-1.2.0.tgz#890dd90d923a873e08e10e5fd51a57e5b7cce0ec" + dependencies: + buffer-alloc-unsafe "^1.1.0" + buffer-fill "^1.0.0" + +buffer-fill@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.0.0.tgz#4cb8832d23612589b0406e9e2956c17f06fdf531" + resolved "https://registry.yarnpkg.com/buffer-fill/-/buffer-fill-1.0.0.tgz#f8f78b76789888ef39f205cd637f68e702122b2c" + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" buffer-indexof@^1.0.0: version "1.1.1" @@ -1726,12 +1895,16 @@ buffer-xor@^1.0.3: buffer@^4.3.0: version "4.9.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + resolved "http://registry.npmjs.org/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" isarray "^1.0.0" +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -1788,6 +1961,10 @@ cacheable-request@^2.1.1: normalize-url "2.0.1" responselike "1.0.2" +call-me-maybe@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" @@ -1799,21 +1976,6 @@ camel-case@3.0.x: no-case "^2.2.0" upper-case "^1.1.1" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" @@ -1832,39 +1994,53 @@ caniuse-api@^1.5.2: lodash.uniq "^4.5.0" caniuse-db@^1.0.30000529, caniuse-db@^1.0.30000634, caniuse-db@^1.0.30000639: - version "1.0.30000821" - resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000821.tgz#3fcdc67c446a94a9cdd848248a4e3e54b2da7419" + version "1.0.30000884" + resolved "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30000884.tgz#d02b25dc885ffdf80434cf68b0941ea3161a4c8b" -caniuse-lite@^1.0.30000817, caniuse-lite@^1.0.30000821: - version "1.0.30000821" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000821.tgz#0f3223f1e048ed96451c56ca6cf197058c42cb93" +caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864, caniuse-lite@^1.0.30000884: + version "1.0.30000884" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000884.tgz#eb82a959698745033b26a4dcd34d89dba7cc6eb3" -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" +capture-exit@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" + dependencies: + rsvp "^3.3.3" + +capture-stack-trace@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" -center-align@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" +caw@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/caw/-/caw-2.0.1.tgz#6c3ca071fc194720883c2dc5da9b074bfc7e9e95" + dependencies: + get-proxy "^2.0.0" + isurl "^1.0.0-alpha5" + tunnel-agent "^0.6.0" + url-to-options "^1.0.1" + +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" dependencies: - align-text "^0.1.3" - lazy-cache "^1.0.3" + traverse ">=0.3.0 <0.4" -chalk@2.3.x, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.2: +chalk@2.3.x: version "2.3.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" + resolved "http://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "http://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -1872,9 +2048,17 @@ chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" +chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0, chalk@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + chalk@~0.4.0: version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + resolved "http://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" dependencies: ansi-styles "~1.0.0" has-color "~0.1.0" @@ -1884,24 +2068,13 @@ chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" -chokidar@^1.6.1: - version "1.7.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" - 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" +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" -chokidar@^2.0.0, chokidar@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.3.tgz#dcbd4f6cbb2a55b4799ba8a840ac527e5f4b1176" +chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" dependencies: anymatch "^2.0.0" async-each "^1.0.0" @@ -1910,24 +2083,27 @@ chokidar@^2.0.0, chokidar@^2.0.2: inherits "^2.0.1" is-binary-path "^1.0.0" is-glob "^4.0.0" + lodash.debounce "^4.0.8" normalize-path "^2.1.1" path-is-absolute "^1.0.0" readdirp "^2.0.0" - upath "^1.0.0" + upath "^1.0.5" optionalDependencies: - fsevents "^1.1.2" + fsevents "^1.2.2" chownr@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" -chrome-trace-event@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-0.1.2.tgz#90f36885d5345a50621332f0717b595883d5d982" +chrome-trace-event@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chrome-trace-event/-/chrome-trace-event-1.0.0.tgz#45a91bd2c20c9411f0963b5aaeb9a1b95e09cc48" + dependencies: + tslib "^1.9.0" -ci-info@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.1.3.tgz#710193264bb05c77b8c90d02f5aaf22216a667b2" +ci-info@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.4.0.tgz#4841d53cad49f11b827b648ebde27a6e189b412f" cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" @@ -1951,11 +2127,11 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-css@4.1.x: - version "4.1.11" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.11.tgz#2ecdf145aba38f54740f26cefd0ff3e03e125d6a" +clean-css@4.2.x: + version "4.2.1" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" dependencies: - source-map "0.5.x" + source-map "~0.6.0" cli-cursor@^1.0.2: version "1.0.2" @@ -1969,10 +2145,6 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0: dependencies: restore-cursor "^2.0.0" -cli-spinners@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-0.1.2.tgz#bb764d88e185fb9e1e6a2a1f19772318f605e31c" - cli-table@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.1.tgz#f53b05266a8b1a0b934b3d0821e6e2dc5914ae23" @@ -1987,16 +2159,8 @@ cli-truncate@^0.2.1: string-width "^1.0.1" cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - -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" + version "2.2.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" cliui@^3.2.0: version "3.2.0" @@ -2007,8 +2171,8 @@ cliui@^3.2.0: wrap-ansi "^2.0.0" cliui@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" + version "4.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" dependencies: string-width "^2.1.1" strip-ansi "^4.0.0" @@ -2070,12 +2234,12 @@ collection-visit@^1.0.0: object-visit "^1.0.0" color-convert@^1.3.0, color-convert@^1.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" dependencies: - color-name "^1.1.1" + color-name "1.1.3" -color-name@^1.0.0, color-name@^1.1.1: +color-name@1.1.3, color-name@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" @@ -2106,14 +2270,14 @@ colors@1.0.3: resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" colors@^1.1.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.1.tgz#f4a3d302976aaf042356ba1ade3b1a2c62d9d794" + version "1.3.2" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.2.tgz#2df8ff573dfbf255af562f8ce7181d6b971a359b" colors@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" -combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: +combined-stream@1.0.6, combined-stream@~1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" dependencies: @@ -2129,9 +2293,9 @@ command-line-args@^5.0.2: lodash.camelcase "^4.3.0" typical "^2.6.1" -commander@2.15.x, commander@^2.8.1, commander@^2.9.0, commander@~2.15.0: - version "2.15.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.15.1.tgz#df46e867d0fc2aec66a34662b406a9ccafff5b0f" +commander@2.17.x, commander@^2.8.1, commander@~2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" commander@~2.13.0: version "2.13.0" @@ -2141,30 +2305,26 @@ commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" -compare-versions@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.1.0.tgz#43310256a5c555aaed4193c04d8f154cf9c6efd5" - component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" -compressible@~2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.13.tgz#0d1020ab924b2fdb4d6279875c7d6daba6baa7a9" +compressible@~2.0.14: + version "2.0.14" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.14.tgz#326c5f507fbb055f54116782b969a81b67a29da7" dependencies: - mime-db ">= 1.33.0 < 2" + mime-db ">= 1.34.0 < 2" compression@^1.5.2: - version "1.7.2" - resolved "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz#aaffbcd6aaf854b44ebb280353d5ad1651f59a69" + version "1.7.3" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.3.tgz#27e0e176aaf260f7f2c2813c3e440adb9f1993db" dependencies: - accepts "~1.3.4" + accepts "~1.3.5" bytes "3.0.0" - compressible "~2.0.13" + compressible "~2.0.14" debug "2.6.9" on-headers "~1.0.1" - safe-buffer "5.1.1" + safe-buffer "5.1.2" vary "~1.1.2" concat-map@0.0.1: @@ -2180,6 +2340,13 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" +config-chain@^1.1.11: + version "1.1.11" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.11.tgz#aba09747dfbe4c3e70e766a6e41586e1859fc6f2" + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + connect-history-api-fallback@^1.3.0: version "1.5.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" @@ -2202,17 +2369,15 @@ content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" -content-type-parser@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" - content-type@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" -convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.0: - version "1.5.1" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" +convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + dependencies: + safe-buffer "~5.1.1" cookie-signature@1.0.6: version "1.0.6" @@ -2238,32 +2403,39 @@ copy-descriptor@^0.1.0: resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0: - version "2.5.4" - resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.4.tgz#f2c8bf181f2a80b92f360121429ce63a2f0aeae0" + version "2.5.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" core-util-is@1.0.2, 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" create-ecdh@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + version "4.0.3" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" dependencies: bn.js "^4.1.0" elliptic "^6.0.0" +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + dependencies: + capture-stack-trace "^1.0.0" + create-hash@^1.1.0, create-hash@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" dependencies: cipher-base "^1.0.1" inherits "^2.0.1" - ripemd160 "^2.0.0" + md5.js "^1.3.4" + ripemd160 "^2.0.1" sha.js "^2.4.0" create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.6" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" @@ -2279,7 +2451,7 @@ cross-spawn@4.0.0: lru-cache "^4.0.1" which "^1.2.9" -cross-spawn@^5.0.1, cross-spawn@^5.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: @@ -2287,7 +2459,7 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^6.0.5: +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" dependencies: @@ -2297,18 +2469,6 @@ cross-spawn@^6.0.5: 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" - -cryptiles@3.x.x: - version "3.1.2" - resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" - dependencies: - boom "5.x.x" - crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" @@ -2418,12 +2578,12 @@ csso@~2.3.1: source-map "^0.5.3" 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" + version "0.3.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" -"cssstyle@>= 0.2.37 < 0.3.0": - version "0.2.37" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" +cssstyle@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" dependencies: cssom "0.3.x" @@ -2447,6 +2607,14 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" +data-urls@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.1.tgz#d416ac3896918f29ca84d81085bc3705834da579" + dependencies: + abab "^2.0.0" + whatwg-mimetype "^2.1.0" + whatwg-url "^7.0.0" + date-fns@^1.27.2: version "1.29.0" resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" @@ -2455,11 +2623,11 @@ date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -dateformat@^3.0.2: +dateformat@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8: +debug@2.6.9, debug@^2.1.2, debug@^2.2.0, debug@^2.3.3, debug@^2.6.6, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: @@ -2471,10 +2639,16 @@ debug@^3.1.0: dependencies: ms "2.0.0" -decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.1.2: +decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" +decamelize@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-2.0.0.tgz#656d7bbc8094c4c788ea53c5840908c9c7d063c7" + dependencies: + xregexp "4.0.0" + decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" @@ -2489,14 +2663,21 @@ deep-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" -deep-extend@^0.4.0, deep-extend@~0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +default-gateway@^2.6.0: + version "2.7.2" + resolved "https://registry.yarnpkg.com/default-gateway/-/default-gateway-2.7.2.tgz#b7ef339e5e024b045467af403d50348db4642d0f" + dependencies: + execa "^0.10.0" + ip-regex "^2.1.0" + 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" @@ -2504,11 +2685,10 @@ default-require-extensions@^1.0.0: strip-bom "^2.0.0" define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" + object-keys "^1.0.12" define-property@^0.2.5: version "0.2.5" @@ -2590,21 +2770,28 @@ detect-newline@^2.1.0: resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" detect-node@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.3.tgz#a2033c09cc8e158d37748fbde7507832bd6ce127" + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" -diff@^3.2.0, diff@^3.3.1, diff@^3.5.0: +diff@^3.2.0, diff@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" diffie-hellman@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + version "5.0.3" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" randombytes "^2.0.0" +dir-glob@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + dependencies: + arrify "^1.0.1" + path-type "^3.0.0" + dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -2647,7 +2834,7 @@ domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" -domexception@^1.0.0: +domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" dependencies: @@ -2676,9 +2863,9 @@ duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" -duplexify@^3.4.2, duplexify@^3.5.3: - version "3.5.4" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.4.tgz#4bb46c1796eabebeec4ca9a2e66b808cb7a3d8b4" +duplexify@^3.4.2, duplexify@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -2686,10 +2873,11 @@ duplexify@^3.4.2, duplexify@^3.5.3: stream-shift "^1.0.0" ecc-jsbn@~0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" dependencies: jsbn "~0.1.0" + safer-buffer "^2.1.0" editions@^1.3.3: version "1.3.4" @@ -2699,21 +2887,21 @@ ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" -ejs@^2.3.1: - version "2.5.8" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.8.tgz#2ab6954619f225e6193b7ac5f7c39c48fefe4380" +ejs@^2.5.9: + version "2.6.1" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.6.1.tgz#498ec0d495655abc6f23cd61868d926464071aa0" -electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.41: - version "1.3.41" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.41.tgz#7e33643e00cd85edfd17e04194f6d00e73737235" +electron-to-chromium@^1.2.7, electron-to-chromium@^1.3.47, electron-to-chromium@^1.3.62: + version "1.3.62" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.62.tgz#2e8e2dc070c800ec8ce23ff9dfcceb585d6f9ed8" elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" elliptic@^6.0.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + version "6.4.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.1.tgz#c2d0b7776911b86722c632c3c06c60f2f819939a" dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -2729,24 +2917,40 @@ elm-assets-loader@^0.3.0: dependencies: loader-utils "^1.0.2" +elm-format@0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/elm-format/-/elm-format-0.8.0.tgz#f0d59efd0414c081d3759c35e52d466cc5f7d62c" + dependencies: + binwrap "^0.2.0" + +elm-upgrade@^0.19.1: + version "0.19.6" + resolved "https://registry.yarnpkg.com/elm-upgrade/-/elm-upgrade-0.19.6.tgz#5df3e2acb438f53f1035fbc4ec0cefa7ab5342d1" + dependencies: + caw "^2.0.1" + fs-extra "^0.30.0" + got "^6.6.3" + safename "^1.0.2" + semver "^5.3.0" + syncprompt "^2.0.0" + which "^1.2.11" + yn "^2.0.0" + elm-webpack-loader@elm-community/elm-webpack-loader#master: - version "4.3.1" - resolved "https://codeload.github.com/elm-community/elm-webpack-loader/tar.gz/7d1c6d939ea5b8b8a8f2aa2eb497e7fba49e6c71" + version "5.0.0" + resolved "https://codeload.github.com/elm-community/elm-webpack-loader/tar.gz/80f76663b8c838d3ec86f51819bb34f00902ce20" dependencies: - elm "^0.18.0" + elm "^0.19.0" glob "^7.1.1" loader-utils "^1.0.2" - node-elm-compiler "^4.5.0" + node-elm-compiler "^5.0.0" yargs "^6.5.0" -elm@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/elm/-/elm-0.18.0.tgz#919b8309cd939dfe2ff9d252d961b6c89509b970" +elm@0.19, elm@^0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/elm/-/elm-0.19.0.tgz#c6ad86afea9e971424ebe75e36c9d03412a787fa" dependencies: - mkdirp "0.5.1" - promise "7.1.1" - request "2.74.0" - tar "2.2.1" + binwrap "0.1.4" emojis-list@^2.0.0: version "2.1.0" @@ -2762,9 +2966,9 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.0.0.tgz#e34a6eaa790f62fccd71d93959f56b2b432db10a" +enhanced-resolve@^4.0.0, enhanced-resolve@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" dependencies: graceful-fs "^4.1.2" memory-fs "^0.4.0" @@ -2774,6 +2978,10 @@ entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" +envinfo@^5.7.0: + version "5.10.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-5.10.0.tgz#503a9774ae15b93ea68bdfae2ccd6306624ea6df" + errno@^0.1.3, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" @@ -2781,8 +2989,8 @@ errno@^0.1.3, errno@~0.1.7: prr "~1.0.1" error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" dependencies: is-arrayish "^0.2.1" @@ -2793,9 +3001,9 @@ error@^7.0.2: string-template "~0.2.1" xtend "~4.0.0" -es-abstract@^1.5.1, es-abstract@^1.7.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.11.0.tgz#cce87d518f0496893b1a30cd8461835535480681" +es-abstract@^1.5.1: + version "1.12.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -2819,9 +3027,9 @@ 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.9.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" +escodegen@^1.9.1: + version "1.11.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" dependencies: esprima "^3.1.3" estraverse "^4.2.0" @@ -2830,9 +3038,9 @@ escodegen@^1.9.0: optionalDependencies: source-map "~0.6.1" -eslint-scope@^3.7.1: - version "3.7.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" +eslint-scope@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -2846,8 +3054,8 @@ esprima@^3.1.3: resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" esprima@^4.0.0, esprima@~4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" esrecurse@^4.1.0: version "4.2.1" @@ -2867,9 +3075,9 @@ etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" -eventemitter3@1.x.x: - version "1.2.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-1.2.0.tgz#1c86991d816ad1e504750e73874224ecf3bec508" +eventemitter3@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.0.tgz#090b4d6cdbd645ed10bf750d4b5407942d7ba163" events@^1.0.0: version "1.1.1" @@ -2889,10 +3097,22 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: safe-buffer "^5.1.1" exec-sh@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.1.tgz#163b98a6e89e6b65b47c2a28d215bc1f63989c38" + version "0.2.2" + resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" dependencies: - merge "^1.1.3" + merge "^1.2.0" + +execa@^0.10.0: + version "0.10.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.10.0.tgz#ff456a8f53f90f8eccc71a96d11bdfc7f082cb50" + dependencies: + cross-spawn "^6.0.0" + 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" execa@^0.7.0: version "0.7.0" @@ -2956,7 +3176,7 @@ expand-tilde@^2.0.0, expand-tilde@^2.0.2: dependencies: homedir-polyfill "^1.0.1" -expect@^22.4.3: +expect@^22.4.0: version "22.4.3" resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.3.tgz#d5a29d0a0e1fb2153557caef2674d4547e914674" dependencies: @@ -3015,18 +3235,26 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" -extend@~3.0.0, extend@~3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" -external-editor@^2.0.4, external-editor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" +external-editor@^2.1.0: + version "2.2.0" + resolved "http://registry.npmjs.org/external-editor/-/external-editor-2.2.0.tgz#045511cfd8d133f3846673d1047c154e214ad3d5" dependencies: chardet "^0.4.0" iconv-lite "^0.4.17" tmp "^0.0.33" +external-editor@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -3067,6 +3295,21 @@ fast-deep-equal@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz#c053477817c86b51daa853c81e059b733d023614" +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + +fast-glob@^2.0.2: + version "2.2.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.2.tgz#71723338ac9b4e0e2fff1d6748a2a13d5ed352bf" + dependencies: + "@mrmlnc/readdir-enhanced" "^2.2.1" + "@nodelib/fs.stat" "^1.0.1" + glob-parent "^3.1.0" + is-glob "^4.0.0" + merge2 "^1.2.1" + micromatch "^3.1.10" + fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" @@ -3129,12 +3372,12 @@ fileset@^2.0.2: 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" + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" dependencies: is-number "^2.1.0" isobject "^2.0.0" - randomatic "^1.1.3" + randomatic "^3.0.0" repeat-element "^1.1.2" repeat-string "^1.5.2" @@ -3167,12 +3410,12 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" -find-elm-dependencies@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/find-elm-dependencies/-/find-elm-dependencies-1.0.2.tgz#737adc0ce34dfde0c3bf85f568658555329e4953" +find-elm-dependencies@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-elm-dependencies/-/find-elm-dependencies-2.0.0.tgz#435aa05a6544a0ecf54c5d1ac85cc1ca1044e4e4" dependencies: firstline "1.2.0" - lodash "4.14.2" + lodash "4.17.10" find-replace@^2.0.1: version "2.0.1" @@ -3194,6 +3437,12 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + dependencies: + locate-path "^3.0.0" + first-chunk-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/first-chunk-stream/-/first-chunk-stream-2.0.0.tgz#1bdecdb8e083c0664b91945581577a43a9f31d70" @@ -3209,8 +3458,8 @@ flatten@^1.0.2: resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" flow-parser@^0.*: - version "0.69.0" - resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.69.0.tgz#378b5128d6d0b554a8b2f16a4ca3e1ab9649f00e" + version "0.80.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.80.0.tgz#90704d27eca33eb8c8454c61df76f08f498aaae6" flush-write-stream@^1.0.0: version "1.0.3" @@ -3219,6 +3468,12 @@ flush-write-stream@^1.0.0: inherits "^2.0.1" readable-stream "^2.0.4" +follow-redirects@^1.0.0: + version "1.5.7" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.5.7.tgz#a39e4804dacb90202bca76a9e2ac10433ca6a69a" + dependencies: + debug "^3.1.0" + for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -3229,31 +3484,11 @@ for-own@^0.1.4: dependencies: for-in "^1.0.1" -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - 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@~1.0.0-rc4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-1.0.1.tgz#ae315db9a4907fa065502304a66d7733475ee37c" - dependencies: - async "^2.0.1" - combined-stream "^1.0.5" - mime-types "^2.1.11" - -form-data@~2.1.1: - version "2.1.4" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.5" - mime-types "^2.1.12" - -form-data@~2.3.1: +form-data@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" dependencies: @@ -3292,7 +3527,13 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-readdir-recursive@^1.0.0: +fs-minipass@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + dependencies: + minipass "^2.2.1" + +fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" @@ -3309,22 +3550,23 @@ 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, fsevents@^1.1.1, fsevents@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" +fsevents@^1.2.2, fsevents@^1.2.3: + version "1.2.4" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" dependencies: - nan "^2.3.0" - node-pre-gyp "^0.6.39" + nan "^2.9.2" + node-pre-gyp "^0.10.0" -fstream-ignore@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" +"fstream@>= 0.1.30 < 1": + version "0.1.31" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz#7337f058fbbbbefa8c9f561a28cab0849202c988" dependencies: - fstream "^1.0.0" - inherits "2" - minimatch "^3.0.0" + graceful-fs "~3.0.2" + inherits "~2.0.0" + mkdirp "0.5" + rimraf "2" -fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: +fstream@^1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" dependencies: @@ -3333,7 +3575,7 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.1: +function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -3350,23 +3592,15 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.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" + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" +get-proxy@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/get-proxy/-/get-proxy-2.1.0.tgz#349f2b4d91d44c4d4d4e9cba2ad90143fac5ef93" + dependencies: + npm-conf "^1.1.0" get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" @@ -3422,9 +3656,13 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-to-regexp@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2: - version "7.1.2" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -3452,8 +3690,8 @@ global-prefix@^1.0.1: which "^1.2.14" globals@^11.1.0: - version "11.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.4.0.tgz#b85c793349561c16076a3c13549238a27945f1bc" + version "11.7.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.7.0.tgz#a583faa43055b1aca771914bf68258e2fc125673" globals@^9.18.0: version "9.18.0" @@ -3469,6 +3707,45 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" +globby@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +globby@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" + dependencies: + array-union "^1.0.1" + dir-glob "^2.0.0" + fast-glob "^2.0.2" + glob "^7.1.2" + ignore "^3.3.5" + pify "^3.0.0" + slash "^1.0.0" + +got@^6.6.3: + version "6.7.1" + resolved "http://registry.npmjs.org/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + got@^7.0.0: version "7.1.0" resolved "https://registry.yarnpkg.com/got/-/got-7.1.0.tgz#05450fd84094e6bbea56f451a43a9c289166385a" @@ -3488,9 +3765,9 @@ got@^7.0.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -got@^8.2.0: - version "8.3.0" - resolved "https://registry.yarnpkg.com/got/-/got-8.3.0.tgz#6ba26e75f8a6cc4c6b3eb1fe7ce4fec7abac8533" +got@^8.3.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" dependencies: "@sindresorhus/is" "^0.7.0" cacheable-request "^2.1.1" @@ -3514,6 +3791,12 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" +graceful-fs@~3.0.2: + version "3.0.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.11.tgz#7613c778a1afea62f25c630a086d7f3acbbdd818" + dependencies: + natives "^1.1.0" + grouped-queue@^0.3.3: version "0.3.3" resolved "https://registry.yarnpkg.com/grouped-queue/-/grouped-queue-0.3.3.tgz#c167d2a5319c5a0e0964ef6a25b7c2df8996c85c" @@ -3529,44 +3812,24 @@ handle-thing@^1.2.5: resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-1.2.5.tgz#fd7aad726bf1a5fd16dfc29b2f7a6601d27139c4" handlebars@^4.0.3: - version "4.0.11" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + version "4.0.12" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" dependencies: - async "^1.4.0" + async "^2.5.0" optimist "^0.6.1" - source-map "^0.4.4" + source-map "^0.6.1" optionalDependencies: - uglify-js "^2.6" - -har-schema@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + uglify-js "^3.1.4" har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" -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" - -har-validator@~4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" - dependencies: - ajv "^4.9.1" - har-schema "^1.0.5" - -har-validator@~5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" +har-validator@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" dependencies: - ajv "^5.1.0" + ajv "^5.3.0" har-schema "^2.0.0" has-ansi@^2.0.0: @@ -3629,16 +3892,10 @@ has-values@^1.0.0: kind-of "^4.0.0" has@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" - dependencies: - function-bind "^1.0.2" - -hash-base@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" dependencies: - inherits "^2.0.1" + function-bind "^1.1.1" hash-base@^3.0.0: version "3.0.4" @@ -3648,29 +3905,11 @@ hash-base@^3.0.0: safe-buffer "^5.0.1" hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + version "1.1.5" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.5.tgz#e38ab4b85dfb1e0c40fe9265c0e9b54854c23812" dependencies: inherits "^2.0.3" - minimalistic-assert "^1.0.0" - -hawk@3.1.3, 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" - -hawk@~6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" - dependencies: - boom "4.x.x" - cryptiles "3.x.x" - hoek "4.x.x" - sntp "2.x.x" + minimalistic-assert "^1.0.1" he@1.1.x: version "1.1.1" @@ -3684,14 +3923,6 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoek@2.x.x: - version "2.16.3" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" - -hoek@4.x.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" - 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" @@ -3706,8 +3937,8 @@ homedir-polyfill@^1.0.1: parse-passwd "^1.0.0" hosted-git-info@^2.1.4: - version "2.6.0" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.6.0.tgz#23235b29ab230c576aab0d4f13fc046b0b038222" + version "2.7.1" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" hpack.js@^2.1.6: version "2.1.6" @@ -3733,20 +3964,20 @@ html-entities@^1.2.0: resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" html-minifier@^3.2.3: - version "3.5.13" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.13.tgz#6bca6d533a7f18a476dc6aeb3d113071ab5c165e" + version "3.5.20" + resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.20.tgz#7b19fd3caa0cb79f7cde5ee5c3abdf8ecaa6bb14" dependencies: camel-case "3.0.x" - clean-css "4.1.x" - commander "2.15.x" + clean-css "4.2.x" + commander "2.17.x" he "1.1.x" param-case "2.1.x" relateurl "0.2.x" - uglify-js "3.3.x" + uglify-js "3.4.x" html-webpack-plugin@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.1.0.tgz#6e02baaedb1e906310917f03239c793a75af2885" + version "3.2.0" + resolved "http://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" dependencies: html-minifier "^3.2.3" loader-utils "^0.2.16" @@ -3792,32 +4023,25 @@ http-errors@~1.6.2: statuses ">= 1.4.0 < 2" http-parser-js@>=0.4.0: - version "0.4.11" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.11.tgz#5b720849c650903c27e521633d94696ee95f3529" + version "0.4.13" + resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.13.tgz#3bd6d6fde6e3172c9334c3b33b6c193d80fe1137" -http-proxy-middleware@~0.17.4: - version "0.17.4" - resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.17.4.tgz#642e8848851d66f09d4f124912846dbaeb41b833" +http-proxy-middleware@~0.18.0: + version "0.18.0" + resolved "http://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.18.0.tgz#0987e6bb5a5606e5a69168d8f967a87f15dd8aab" dependencies: http-proxy "^1.16.2" - is-glob "^3.1.0" - lodash "^4.17.2" - micromatch "^2.3.11" + is-glob "^4.0.0" + lodash "^4.17.5" + micromatch "^3.1.9" http-proxy@^1.16.2: - version "1.16.2" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.16.2.tgz#06dff292952bf64dbe8471fa9df73066d4f37742" - dependencies: - eventemitter3 "1.x.x" - requires-port "1.x.x" - -http-signature@~1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + version "1.17.0" + resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.17.0.tgz#7ad38494658f84605e2f6db4436df410f4e5be9a" dependencies: - assert-plus "^0.2.0" - jsprim "^1.2.2" - sshpk "^1.7.0" + eventemitter3 "^3.0.0" + follow-redirects "^1.0.0" + requires-port "^1.0.0" http-signature@~1.2.0: version "1.2.0" @@ -3839,10 +4063,22 @@ husky@^0.14.3: normalize-path "^1.0.0" strip-indent "^2.0.0" -iconv-lite@0.4.19, iconv-lite@^0.4.17: +iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +iconv-lite@0.4.23: + version "0.4.23" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.4.17, iconv-lite@^0.4.24, iconv-lite@^0.4.4: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + dependencies: + safer-buffer ">= 2.1.2 < 3" + icss-replace-symbols@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz#06ea6f83679a7749e386cfe1fe812ae5db223ded" @@ -3853,17 +4089,23 @@ icss-utils@^2.1.0: dependencies: postcss "^6.0.1" -ieee754@^1.1.4: - version "1.1.11" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.11.tgz#c16384ffe00f5b7835824e67b6f2bd44a5229455" +ieee754@^1.1.11, ieee754@^1.1.4: + version "1.1.12" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.12.tgz#50bf24e5b9c8bb98af4964c941cdb0918da7b60b" iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" -ignore@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" +ignore-walk@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" + dependencies: + minimatch "^3.0.4" + +ignore@^3.3.5, ignore@^3.3.7: + version "3.3.10" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" import-local@^1.0.0: version "1.0.0" @@ -3876,12 +4118,6 @@ 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.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" @@ -3913,50 +4149,50 @@ ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" -inquirer@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" +inquirer@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" cli-cursor "^2.1.0" cli-width "^2.0.0" - external-editor "^2.0.4" + external-editor "^2.1.0" figures "^2.0.0" lodash "^4.3.0" mute-stream "0.0.7" run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" + rxjs "^5.5.2" string-width "^2.1.0" strip-ansi "^4.0.0" through "^2.3.6" -inquirer@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-5.2.0.tgz#db350c2b73daca77ff1243962e9f22f099685726" +inquirer@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" cli-cursor "^2.1.0" cli-width "^2.0.0" - external-editor "^2.1.0" + external-editor "^3.0.0" figures "^2.0.0" - lodash "^4.3.0" + lodash "^4.17.10" mute-stream "0.0.7" run-async "^2.2.0" - rxjs "^5.5.2" + rxjs "^6.1.0" string-width "^2.1.0" strip-ansi "^4.0.0" through "^2.3.6" -internal-ip@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-1.2.0.tgz#ae9fbf93b984878785d50a8de1b356956058cf5c" +internal-ip@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/internal-ip/-/internal-ip-3.0.1.tgz#df5c99876e1d2eb2ea2d74f520e3f669a00ece27" dependencies: - meow "^3.3.0" + default-gateway "^2.6.0" + ipaddr.js "^1.5.2" -interpret@^1.0.0, interpret@^1.0.4: +interpret@^1.0.0, interpret@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" @@ -3967,7 +4203,7 @@ into-stream@^3.1.0: from2 "^2.1.1" p-is-promise "^1.1.0" -invariant@^2.2.0, invariant@^2.2.2: +invariant@^2.2.2: version "2.2.4" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" dependencies: @@ -3977,13 +4213,21 @@ invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" +ip-regex@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" + ip@^1.1.0, ip@^1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" -ipaddr.js@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.6.0.tgz#e3fa357b773da619f26e95f049d055c72796f86b" +ipaddr.js@1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.0.tgz#eaa33d6ddd7ace8f7f6fe0c9ca0440e706738b1e" + +ipaddr.js@^1.5.2: + version "1.8.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.8.1.tgz#fa4b79fa47fd3def5e3b159825161c0a519c9427" is-absolute-url@^2.0.0: version "2.1.0" @@ -4022,14 +4266,14 @@ is-builtin-module@^1.0.0: builtin-modules "^1.0.0" is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" is-ci@^1.0.10: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.0.tgz#3f4a08d6303a09882cef3f0fb97439c5f5ce2d53" dependencies: - ci-info "^1.0.0" + ci-info "^1.3.0" is-data-descriptor@^0.1.4: version "0.1.4" @@ -4129,20 +4373,6 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" -is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - -is-my-json-valid@^2.12.4: - version "2.17.2" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -4163,17 +4393,11 @@ is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" -is-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-0.2.0.tgz#b361311d83c6e5d726cabf5e250b0237106f5ae2" - dependencies: - symbol-observable "^0.2.2" - -is-odd@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" +is-observable@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-observable/-/is-observable-1.1.0.tgz#b3e986c8f44de950867cab5403f5a3465005975e" dependencies: - is-number "^4.0.0" + symbol-observable "^1.1.0" is-path-cwd@^1.0.0: version "1.0.0" @@ -4213,9 +4437,9 @@ 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-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" is-regex@^1.0.4: version "1.0.4" @@ -4271,6 +4495,12 @@ 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" +isbinaryfile@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/isbinaryfile/-/isbinaryfile-3.0.3.tgz#5d6def3edebf6e8ca8cae9c30183a804b5f8be80" + dependencies: + buffer-alloc "^1.2.0" + isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" @@ -4290,80 +4520,69 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul-api@^1.1.14: - version "1.3.1" - resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" + version "1.3.7" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.7.tgz#a86c770d2b03e11e3f778cd7aedd82d2722092aa" dependencies: async "^2.1.4" - compare-versions "^3.1.0" fileset "^2.0.2" - istanbul-lib-coverage "^1.2.0" - istanbul-lib-hook "^1.2.0" - istanbul-lib-instrument "^1.10.1" - istanbul-lib-report "^1.1.4" - istanbul-lib-source-maps "^1.2.4" - istanbul-reports "^1.3.0" + istanbul-lib-coverage "^1.2.1" + istanbul-lib-hook "^1.2.2" + istanbul-lib-instrument "^1.10.2" + istanbul-lib-report "^1.1.5" + istanbul-lib-source-maps "^1.2.6" + istanbul-reports "^1.5.1" js-yaml "^3.7.0" mkdirp "^0.5.1" once "^1.4.0" -istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.1.2, istanbul-lib-coverage@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" +istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" -istanbul-lib-hook@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz#ae556fd5a41a6e8efa0b1002b1e416dfeaf9816c" +istanbul-lib-hook@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.2.tgz#bc6bf07f12a641fbf1c85391d0daa8f0aea6bf86" dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.8.0: - version "1.10.1" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" +istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.10.2, istanbul-lib-instrument@^1.8.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" babylon "^6.18.0" - istanbul-lib-coverage "^1.2.0" + istanbul-lib-coverage "^1.2.1" semver "^5.3.0" -istanbul-lib-report@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" +istanbul-lib-report@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.5.tgz#f2a657fc6282f96170aaf281eb30a458f7f4170c" dependencies: - istanbul-lib-coverage "^1.2.0" + istanbul-lib-coverage "^1.2.1" mkdirp "^0.5.1" path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6" - dependencies: - debug "^3.1.0" - istanbul-lib-coverage "^1.1.2" - mkdirp "^0.5.1" - rimraf "^2.6.1" - source-map "^0.5.3" - -istanbul-lib-source-maps@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz#cc7ccad61629f4efff8e2f78adb8c522c9976ec7" +istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.6: + version "1.2.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.6.tgz#37b9ff661580f8fca11232752ee42e08c6675d8f" dependencies: debug "^3.1.0" - istanbul-lib-coverage "^1.2.0" + istanbul-lib-coverage "^1.2.1" mkdirp "^0.5.1" rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" +istanbul-reports@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" dependencies: handlebars "^4.0.3" -istextorbinary@^2.1.0: +istextorbinary@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/istextorbinary/-/istextorbinary-2.2.1.tgz#a5231a08ef6dd22b268d0895084cf8d58b5bec53" dependencies: @@ -4378,15 +4597,15 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" -jest-changed-files@^22.4.3: +jest-changed-files@^22.2.0: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.4.3.tgz#8882181e022c38bd46a2e4d18d44d19d90a90fb2" dependencies: throat "^4.0.0" -jest-cli@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.3.tgz#bf16c4a5fb7edc3fa5b9bb7819e34139e88a72c7" +jest-cli@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.4.tgz#68cd2a2aae983adb1e6638248ca21082fd6d9e90" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.1" @@ -4399,20 +4618,20 @@ jest-cli@^22.4.3: istanbul-lib-coverage "^1.1.1" istanbul-lib-instrument "^1.8.0" istanbul-lib-source-maps "^1.2.1" - jest-changed-files "^22.4.3" - jest-config "^22.4.3" - jest-environment-jsdom "^22.4.3" - jest-get-type "^22.4.3" - jest-haste-map "^22.4.3" - jest-message-util "^22.4.3" - jest-regex-util "^22.4.3" - jest-resolve-dependencies "^22.4.3" - jest-runner "^22.4.3" - jest-runtime "^22.4.3" - jest-snapshot "^22.4.3" - jest-util "^22.4.3" - jest-validate "^22.4.3" - jest-worker "^22.4.3" + jest-changed-files "^22.2.0" + jest-config "^22.4.4" + jest-environment-jsdom "^22.4.1" + jest-get-type "^22.1.0" + jest-haste-map "^22.4.2" + jest-message-util "^22.4.0" + jest-regex-util "^22.1.0" + jest-resolve-dependencies "^22.1.0" + jest-runner "^22.4.4" + jest-runtime "^22.4.4" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" + jest-validate "^22.4.4" + jest-worker "^22.2.2" micromatch "^2.3.11" node-notifier "^5.2.1" realpath-native "^1.0.0" @@ -4423,23 +4642,23 @@ jest-cli@^22.4.3: which "^1.2.12" yargs "^10.0.3" -jest-config@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.3.tgz#0e9d57db267839ea31309119b41dc2fa31b76403" +jest-config@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.4.tgz#72a521188720597169cd8b4ff86934ef5752d86a" dependencies: chalk "^2.0.1" glob "^7.1.1" - jest-environment-jsdom "^22.4.3" - jest-environment-node "^22.4.3" - jest-get-type "^22.4.3" - jest-jasmine2 "^22.4.3" - jest-regex-util "^22.4.3" - jest-resolve "^22.4.3" - jest-util "^22.4.3" - jest-validate "^22.4.3" - pretty-format "^22.4.3" - -jest-diff@^22.4.3: + jest-environment-jsdom "^22.4.1" + jest-environment-node "^22.4.1" + jest-get-type "^22.1.0" + jest-jasmine2 "^22.4.4" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.4" + pretty-format "^22.4.0" + +jest-diff@^22.4.0, jest-diff@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.3.tgz#e18cc3feff0aeef159d02310f2686d4065378030" dependencies: @@ -4448,13 +4667,13 @@ jest-diff@^22.4.3: jest-get-type "^22.4.3" pretty-format "^22.4.3" -jest-docblock@^22.4.3: +jest-docblock@^22.4.0, jest-docblock@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.3.tgz#50886f132b42b280c903c592373bb6e93bb68b19" dependencies: detect-newline "^2.1.0" -jest-environment-jsdom@^22.4.3: +jest-environment-jsdom@^22.4.1: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.3.tgz#d67daa4155e33516aecdd35afd82d4abf0fa8a1e" dependencies: @@ -4462,18 +4681,18 @@ jest-environment-jsdom@^22.4.3: jest-util "^22.4.3" jsdom "^11.5.1" -jest-environment-node@^22.4.3: +jest-environment-node@^22.4.1: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.3.tgz#54c4eaa374c83dd52a9da8759be14ebe1d0b9129" dependencies: jest-mock "^22.4.3" jest-util "^22.4.3" -jest-get-type@^22.4.3: +jest-get-type@^22.1.0, jest-get-type@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.4.3.tgz#e3a8504d8479342dd4420236b322869f18900ce4" -jest-haste-map@^22.4.3: +jest-haste-map@^22.4.2: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.3.tgz#25842fa2ba350200767ac27f658d58b9d5c2e20b" dependencies: @@ -4485,29 +4704,29 @@ jest-haste-map@^22.4.3: micromatch "^2.3.11" sane "^2.0.0" -jest-jasmine2@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.3.tgz#4daf64cd14c793da9db34a7c7b8dcfe52a745965" +jest-jasmine2@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.4.tgz#c55f92c961a141f693f869f5f081a79a10d24e23" dependencies: chalk "^2.0.1" co "^4.6.0" - expect "^22.4.3" + expect "^22.4.0" graceful-fs "^4.1.11" is-generator-fn "^1.0.0" - jest-diff "^22.4.3" - jest-matcher-utils "^22.4.3" - jest-message-util "^22.4.3" - jest-snapshot "^22.4.3" - jest-util "^22.4.3" + jest-diff "^22.4.0" + jest-matcher-utils "^22.4.0" + jest-message-util "^22.4.0" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" source-map-support "^0.5.0" -jest-leak-detector@^22.4.3: +jest-leak-detector@^22.4.0: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.3.tgz#2b7b263103afae8c52b6b91241a2de40117e5b35" dependencies: pretty-format "^22.4.3" -jest-matcher-utils@^22.4.3: +jest-matcher-utils@^22.4.0, jest-matcher-utils@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.3.tgz#4632fe428ebc73ebc194d3c7b65d37b161f710ff" dependencies: @@ -4515,7 +4734,7 @@ jest-matcher-utils@^22.4.3: jest-get-type "^22.4.3" pretty-format "^22.4.3" -jest-message-util@^22.4.3: +jest-message-util@^22.4.0, jest-message-util@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.3.tgz#cf3d38aafe4befddbfc455e57d65d5239e399eb7" dependencies: @@ -4529,56 +4748,56 @@ jest-mock@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.4.3.tgz#f63ba2f07a1511772cdc7979733397df770aabc7" -jest-regex-util@^22.4.3: +jest-regex-util@^22.1.0, jest-regex-util@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.4.3.tgz#a826eb191cdf22502198c5401a1fc04de9cef5af" -jest-resolve-dependencies@^22.4.3: +jest-resolve-dependencies@^22.1.0: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.4.3.tgz#e2256a5a846732dc3969cb72f3c9ad7725a8195e" dependencies: jest-regex-util "^22.4.3" -jest-resolve@^22.4.3: +jest-resolve@^22.4.2: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.3.tgz#0ce9d438c8438229aa9b916968ec6b05c1abb4ea" dependencies: browser-resolve "^1.11.2" chalk "^2.0.1" -jest-runner@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.3.tgz#298ddd6a22b992c64401b4667702b325e50610c3" +jest-runner@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.4.tgz#dfca7b7553e0fa617e7b1291aeb7ce83e540a907" dependencies: exit "^0.1.2" - jest-config "^22.4.3" - jest-docblock "^22.4.3" - jest-haste-map "^22.4.3" - jest-jasmine2 "^22.4.3" - jest-leak-detector "^22.4.3" - jest-message-util "^22.4.3" - jest-runtime "^22.4.3" - jest-util "^22.4.3" - jest-worker "^22.4.3" + jest-config "^22.4.4" + jest-docblock "^22.4.0" + jest-haste-map "^22.4.2" + jest-jasmine2 "^22.4.4" + jest-leak-detector "^22.4.0" + jest-message-util "^22.4.0" + jest-runtime "^22.4.4" + jest-util "^22.4.1" + jest-worker "^22.2.2" throat "^4.0.0" -jest-runtime@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.3.tgz#b69926c34b851b920f666c93e86ba2912087e3d0" +jest-runtime@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.4.tgz#9ba7792fc75582a5be0f79af6f8fe8adea314048" dependencies: babel-core "^6.0.0" - babel-jest "^22.4.3" + babel-jest "^22.4.4" babel-plugin-istanbul "^4.1.5" chalk "^2.0.1" convert-source-map "^1.4.0" exit "^0.1.2" graceful-fs "^4.1.11" - jest-config "^22.4.3" - jest-haste-map "^22.4.3" - jest-regex-util "^22.4.3" - jest-resolve "^22.4.3" - jest-util "^22.4.3" - jest-validate "^22.4.3" + jest-config "^22.4.4" + jest-haste-map "^22.4.2" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.4" json-stable-stringify "^1.0.1" micromatch "^2.3.11" realpath-native "^1.0.0" @@ -4591,7 +4810,7 @@ jest-serializer@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.3.tgz#a679b81a7f111e4766235f4f0c46d230ee0f7436" -jest-snapshot@^22.4.3: +jest-snapshot@^22.4.0: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.3.tgz#b5c9b42846ffb9faccb76b841315ba67887362d2" dependencies: @@ -4602,7 +4821,7 @@ jest-snapshot@^22.4.3: natural-compare "^1.4.0" pretty-format "^22.4.3" -jest-util@^22.4.3: +jest-util@^22.4.1, jest-util@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.3.tgz#c70fec8eec487c37b10b0809dc064a7ecf6aafac" dependencies: @@ -4614,15 +4833,15 @@ jest-util@^22.4.3: mkdirp "^0.5.1" source-map "^0.6.0" -jest-validate@^22.4.3: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.3.tgz#0780954a5a7daaeec8d3c10834b9280865976b30" +jest-validate@^22.4.4: + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.4.tgz#1dd0b616ef46c995de61810d85f57119dbbcec4d" dependencies: chalk "^2.0.1" - jest-config "^22.4.3" - jest-get-type "^22.4.3" + jest-config "^22.4.4" + jest-get-type "^22.1.0" leven "^2.1.0" - pretty-format "^22.4.3" + pretty-format "^22.4.0" jest-webpack-resolver@^0.3.0: version "0.3.0" @@ -4633,30 +4852,38 @@ jest-webpack-resolver@^0.3.0: enhanced-resolve "^4.0.0" pkg-dir "^2.0.0" -jest-worker@^22.4.3: +jest-worker@^22.2.2, jest-worker@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.4.3.tgz#5c421417cba1c0abf64bf56bd5fb7968d79dd40b" dependencies: merge-stream "^1.0.1" jest@^22.4.0: - version "22.4.3" - resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.3.tgz#2261f4b117dc46d9a4a1a673d2150958dee92f16" + version "22.4.4" + resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.4.tgz#ffb36c9654b339a13e10b3d4b338eb3e9d49f6eb" dependencies: import-local "^1.0.0" - jest-cli "^22.4.3" + jest-cli "^22.4.4" js-base64@^2.1.9: - version "2.4.3" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" + version "2.4.9" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03" + +js-levenshtein@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.3.tgz#3ef627df48ec8cf24bacf05c0f184ff30ef413c5" + +"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" -js-tokens@^3.0.0, js-tokens@^3.0.2: +js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" js-yaml@^3.7.0: - version "3.11.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" + version "3.12.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -4693,14 +4920,14 @@ jscodeshift@^0.4.0: write-file-atomic "^1.2.0" jscodeshift@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.5.0.tgz#bdb7b6cc20dd62c16aa728c3fa2d2fe66ca7c748" + version "0.5.1" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.5.1.tgz#4af6a721648be8638ae1464a190342da52960c33" dependencies: babel-plugin-transform-flow-strip-types "^6.8.0" babel-preset-es2015 "^6.9.0" babel-preset-stage-1 "^6.5.0" babel-register "^6.9.0" - babylon "^7.0.0-beta.30" + babylon "^7.0.0-beta.47" colors "^1.1.2" flow-parser "^0.*" lodash "^4.13.1" @@ -4708,39 +4935,39 @@ jscodeshift@^0.5.0: neo-async "^2.5.0" node-dir "0.1.8" nomnom "^1.8.1" - recast "^0.14.1" + recast "^0.15.0" temp "^0.8.1" write-file-atomic "^1.2.0" jsdom@^11.5.1: - version "11.6.2" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.2.tgz#25d1ef332d48adf77fc5221fe2619967923f16bb" + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" dependencies: - abab "^1.0.4" - acorn "^5.3.0" + abab "^2.0.0" + acorn "^5.5.3" acorn-globals "^4.1.0" array-equal "^1.0.0" - browser-process-hrtime "^0.1.2" - content-type-parser "^1.0.2" cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.2.37 < 0.3.0" - domexception "^1.0.0" - escodegen "^1.9.0" + cssstyle "^1.0.0" + data-urls "^1.0.0" + domexception "^1.0.1" + escodegen "^1.9.1" html-encoding-sniffer "^1.0.2" - left-pad "^1.2.0" - nwmatcher "^1.4.3" + left-pad "^1.3.0" + nwsapi "^2.0.7" parse5 "4.0.0" pn "^1.1.0" - request "^2.83.0" + request "^2.87.0" request-promise-native "^1.0.5" sax "^1.2.4" symbol-tree "^3.2.2" - tough-cookie "^2.3.3" + tough-cookie "^2.3.4" w3c-hr-time "^1.0.1" webidl-conversions "^4.0.2" whatwg-encoding "^1.0.3" - whatwg-url "^6.4.0" - ws "^4.0.0" + whatwg-mimetype "^2.1.0" + whatwg-url "^6.4.1" + ws "^5.2.0" xml-name-validator "^3.0.0" jsesc@^1.3.0: @@ -4760,10 +4987,10 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" json-formatter-js@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/json-formatter-js/-/json-formatter-js-2.2.0.tgz#1ed987223ef2f1d945304597faae78b580a8212b" + version "2.2.1" + resolved "https://registry.yarnpkg.com/json-formatter-js/-/json-formatter-js-2.2.1.tgz#b101d628e86f028dc9cf9a7e1c83c65e536c9f87" -json-parse-better-errors@^1.0.1: +json-parse-better-errors@^1.0.1, json-parse-better-errors@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -4771,6 +4998,10 @@ json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -4803,10 +5034,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.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -4852,19 +5079,15 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" -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" -left-pad@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" +left-pad@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" leven@^2.1.0: version "2.1.0" @@ -4903,27 +5126,19 @@ listr-verbose-renderer@^0.4.0: date-fns "^1.27.2" figures "^1.7.0" -listr@^0.13.0: - version "0.13.0" - resolved "https://registry.yarnpkg.com/listr/-/listr-0.13.0.tgz#20bb0ba30bae660ee84cc0503df4be3d5623887d" +listr@^0.14.1: + version "0.14.2" + resolved "https://registry.yarnpkg.com/listr/-/listr-0.14.2.tgz#cbe44b021100a15376addfc2d79349ee430bfe14" dependencies: - chalk "^1.1.3" - cli-truncate "^0.2.1" - figures "^1.7.0" - indent-string "^2.1.0" - is-observable "^0.2.0" + "@samverschueren/stream-to-observable" "^0.3.0" + is-observable "^1.1.0" is-promise "^2.1.0" is-stream "^1.1.0" listr-silent-renderer "^1.1.1" listr-update-renderer "^0.4.0" listr-verbose-renderer "^0.4.0" - log-symbols "^1.0.2" - log-update "^1.0.2" - ora "^0.2.3" p-map "^1.1.1" - rxjs "^5.4.2" - stream-to-observable "^0.2.0" - strip-ansi "^3.0.1" + rxjs "^6.1.0" load-json-file@^1.0.0: version "1.1.0" @@ -4935,15 +5150,6 @@ load-json-file@^1.0.0: pinkie-promise "^2.0.0" strip-bom "^2.0.0" -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" @@ -4981,10 +5187,21 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -4997,13 +5214,9 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@4.14.2: - version "4.14.2" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.14.2.tgz#bbccce6373a400fbfd0a8c67ca42f6d1ef416432" - -"lodash@>=3.5 <5", lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.2.0, lodash@^4.3.0: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" +lodash@4.17.10, "lodash@>=3.5 <5", lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.2, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: + version "4.17.10" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" log-symbols@^1.0.2: version "1.0.2" @@ -5011,7 +5224,7 @@ log-symbols@^1.0.2: dependencies: chalk "^1.0.0" -log-symbols@^2.1.0, log-symbols@^2.2.0: +log-symbols@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" dependencies: @@ -5036,21 +5249,21 @@ loglevel@^1.4.1: version "1.6.1" resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.1.tgz#e0fc95133b6ef276cdc8887cdaf24aa6f156f8fa" -loglevelnext@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.3.tgz#0f69277e73bbbf2cd61b94d82313216bf87ac66e" +long@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/long/-/long-4.0.0.tgz#9a7b71cfb7d361a194ea555241c92f7468d5bf28" -longest@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" +long@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" loose-envify@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + version "1.4.0" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" dependencies: - js-tokens "^3.0.0" + js-tokens "^3.0.0 || ^4.0.0" -loud-rejection@^1.0.0, loud-rejection@^1.6.0: +loud-rejection@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" dependencies: @@ -5070,19 +5283,15 @@ lowercase-keys@^1.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" lru-cache@^4.0.1, lru-cache@^4.1.1: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.2.tgz#45234b2e6e2f2b33da125624c4664929a0224c3f" + version "4.1.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.3.tgz#a1175cf3496dfc8436c156c334b4955992bce69c" dependencies: pseudomap "^1.0.2" yallist "^2.1.2" -macaddress@^0.2.8: - version "0.2.8" - resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" - make-dir@^1.0.0, make-dir@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" dependencies: pify "^3.0.0" @@ -5092,24 +5301,35 @@ makeerror@1.0.x: dependencies: tmpl "1.0.x" +mamacro@^0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" + map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" dependencies: object-visit "^1.0.0" +"match-stream@>= 0.0.2 < 1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" + dependencies: + buffers "~0.1.1" + readable-stream "~1.0.0" + math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" +math-random@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" + md5.js@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" @@ -5121,15 +5341,16 @@ media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" -mem-fs-editor@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-3.0.2.tgz#dd0a6eaf2bb8a6b37740067aa549eb530105af9f" +mem-fs-editor@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/mem-fs-editor/-/mem-fs-editor-4.0.3.tgz#d282a0c4e0d796e9eff9d75661f25f68f389af53" dependencies: commondir "^1.0.1" - deep-extend "^0.4.0" - ejs "^2.3.1" + deep-extend "^0.6.0" + ejs "^2.5.9" glob "^7.0.3" - globby "^6.1.0" + globby "^7.1.1" + isbinaryfile "^3.0.2" mkdirp "^0.5.0" multimatch "^2.0.0" rimraf "^2.2.8" @@ -5157,21 +5378,6 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -5182,7 +5388,11 @@ merge-stream@^1.0.1: dependencies: readable-stream "^2.0.1" -merge@^1.1.3: +merge2@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.2.tgz#03212e3da8d86c4d8523cebd6318193414f94e34" + +merge@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" @@ -5190,7 +5400,7 @@ methods@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" -micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: +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: @@ -5208,7 +5418,7 @@ micromatch@^2.1.5, micromatch@^2.3.11, micromatch@^2.3.7: parse-glob "^3.0.4" regex-cache "^0.4.2" -micromatch@^3.1.4, micromatch@^3.1.8: +micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.8, micromatch@^3.1.9: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" dependencies: @@ -5233,35 +5443,35 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -"mime-db@>= 1.33.0 < 2", mime-db@~1.33.0: - version "1.33.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" +"mime-db@>= 1.34.0 < 2", mime-db@~1.36.0: + version "1.36.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.36.0.tgz#5020478db3c7fe93aad7bbcc4dcf869c43363397" -mime-types@^2.1.11, mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.7: - version "2.1.18" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.18, mime-types@~2.1.19: + version "2.1.20" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.20.tgz#930cb719d571e903738520f8470911548ca2cc19" dependencies: - mime-db "~1.33.0" + mime-db "~1.36.0" mime@1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" -mime@^2.0.3, mime@^2.1.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.2.2.tgz#6b4c109d88031d7b5c23635f5b923da336d79121" +mime@^2.0.3, mime@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" mimic-response@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" -minimalistic-assert@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" @@ -5275,19 +5485,32 @@ minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: minimist@0.0.8: version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" minimist@^0.1.0: version "0.1.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" + resolved "http://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz#99df657a52574c21c9057497df742790b2b4c0de" -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.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" + resolved "http://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" minimist@~0.0.1: version "0.0.10" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + resolved "http://registry.npmjs.org/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +minipass@^2.2.1, minipass@^2.3.3: + version "2.3.4" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.4.tgz#4768d7605ed6194d6d576169b9e12ef71e9d9957" + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + +minizlib@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + dependencies: + minipass "^2.2.1" mississippi@^2.0.0: version "2.0.0" @@ -5311,9 +5534,9 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5, mkdirp@0.5.x, "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" + resolved "http://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" @@ -5329,8 +5552,8 @@ move-concurrently@^1.0.1: run-queue "^1.0.3" mri@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.0.tgz#5c0a3f29c8ccffbbb1ec941dcec09d71fa32f36a" + version "1.1.1" + resolved "https://registry.yarnpkg.com/mri/-/mri-1.1.1.tgz#85aa26d3daeeeedf80dc5984af95cc5ca5cad9f1" ms@2.0.0: version "2.0.0" @@ -5356,24 +5579,27 @@ multimatch@^2.0.0: arrify "^1.0.0" minimatch "^3.0.0" +mustache@^2.3.0: + version "2.3.2" + resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.2.tgz#a6d4d9c3f91d13359ab889a812954f9230a3d0c5" + mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" -nan@^2.3.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" +nan@^2.4.0, nan@^2.9.2: + version "2.11.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.0.tgz#574e360e4d954ab16966ec102c0c049fd961a099" nanomatch@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" define-property "^2.0.2" extend-shallow "^3.0.2" fragment-cache "^0.2.1" - is-odd "^2.0.0" is-windows "^1.0.2" kind-of "^6.0.2" object.pick "^1.3.0" @@ -5381,21 +5607,33 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +natives@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.4.tgz#2f0f224fc9a7dd53407c7667c84cf8dbe773de58" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" +needle@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.2.tgz#1120ca4c41f2fcc6976fd28a8968afe239929418" + dependencies: + debug "^2.1.2" + iconv-lite "^0.4.4" + sax "^1.2.4" + negotiator@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" neo-async@^2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.0.tgz#76b1c823130cca26acfbaccc8fbaf0a2fa33b18f" + version "2.5.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.5.2.tgz#489105ce7bc54e709d736b195f82135048c50fcc" nice-try@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.4.tgz#d93962f6c52f2c1558c0fbda6d512819f1efe1c4" + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" no-case@^2.2.0: version "2.3.2" @@ -5407,18 +5645,18 @@ node-dir@0.1.8: version "0.1.8" resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.8.tgz#55fb8deb699070707fb67f91a460f0448294c77d" -node-elm-compiler@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/node-elm-compiler/-/node-elm-compiler-4.5.0.tgz#3029f053cfbfc68730e75a54f93495cc58bf7ceb" +node-elm-compiler@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/node-elm-compiler/-/node-elm-compiler-5.0.1.tgz#d62094ee72d6aad616ebaa71397b6cfac90381f6" dependencies: cross-spawn "4.0.0" - find-elm-dependencies "1.0.2" - lodash "4.14.2" + find-elm-dependencies "2.0.0" + lodash "4.17.10" temp "^0.8.3" -node-forge@0.7.1: - version "0.7.1" - resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.1.tgz#9da611ea08982f4b94206b3beb4cc9665f20c300" +node-forge@0.7.5: + version "0.7.5" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df" node-int64@^0.4.0: version "0.4.0" @@ -5461,25 +5699,26 @@ node-notifier@^5.2.1: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@^0.6.39: - version "0.6.39" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" +node-pre-gyp@^0.10.0: + version "0.10.3" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" dependencies: detect-libc "^1.0.2" - hawk "3.1.3" mkdirp "^0.5.1" + needle "^2.2.1" nopt "^4.0.1" + npm-packlist "^1.1.6" npmlog "^4.0.2" - rc "^1.1.7" - request "2.81.0" + rc "^1.2.7" rimraf "^2.6.1" semver "^5.3.0" - tar "^2.2.1" - tar-pack "^3.4.0" + tar "^4" -node-uuid@~1.4.7: - version "1.4.8" - resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" +node-releases@^1.0.0-alpha.11: + version "1.0.0-alpha.11" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.11.tgz#73c810acc2e5b741a17ddfbb39dfca9ab9359d8a" + dependencies: + semver "^5.3.0" nomnom@^1.8.1: version "1.8.1" @@ -5495,7 +5734,7 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: +normalize-package-data@^2.3.2: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: @@ -5508,7 +5747,7 @@ normalize-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-1.0.0.tgz#32d0e472f91ff345701c15a8311018d3b0a90379" -normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: +normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: @@ -5535,6 +5774,24 @@ normalize-url@^1.4.0: query-string "^4.1.0" sort-keys "^1.0.0" +npm-bundled@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.5.tgz#3c1732b7ba936b3a10325aef616467c0ccbcc979" + +npm-conf@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +npm-packlist@^1.1.6: + version "1.1.11" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" + dependencies: + ignore-walk "^3.0.1" + npm-bundled "^1.0.1" + 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" @@ -5564,13 +5821,13 @@ 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.4.3: - version "1.4.4" - resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.4.tgz#2285631f34a95f0d0395cd900c96ed39b58f346e" +nwsapi@^2.0.7: + version "2.0.9" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" -oauth-sign@~0.8.1, oauth-sign@~0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" @@ -5584,9 +5841,9 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" -object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" +object-keys@^1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" object-visit@^1.0.0: version "1.0.1" @@ -5628,7 +5885,7 @@ on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" -once@^1.3.0, once@^1.3.1, once@^1.3.3, once@^1.4.0: +once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: @@ -5668,20 +5925,11 @@ optionator@^0.8.1: 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" - original@>=0.0.5: - version "1.0.0" - resolved "https://registry.yarnpkg.com/original/-/original-1.0.0.tgz#9147f93fa1696d04be61e01bd50baeaca656bd3b" + version "1.0.2" + resolved "https://registry.yarnpkg.com/original/-/original-1.0.2.tgz#e442a61cffe1c5fd20a65f3261c26663b303f25f" dependencies: - url-parse "1.0.x" + url-parse "^1.4.3" os-browserify@^0.3.0: version "0.3.0" @@ -5693,7 +5941,7 @@ os-homedir@^1.0.0: os-locale@^1.4.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + resolved "http://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" dependencies: lcid "^1.0.0" @@ -5724,6 +5972,10 @@ output-file-sync@^2.0.0: is-plain-obj "^1.1.0" mkdirp "^0.5.1" +"over@>= 0.0.5 < 1": + version "0.0.5" + resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" + p-cancelable@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.3.0.tgz#b9e123800bcebb7ac13a479be195b507b98d30fa" @@ -5751,17 +6003,29 @@ p-lazy@^1.0.0: resolved "https://registry.yarnpkg.com/p-lazy/-/p-lazy-1.0.0.tgz#ec53c802f2ee3ac28f166cc82d0b2b02de27a835" p-limit@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" dependencies: p-try "^1.0.0" +p-limit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" + dependencies: + p-try "^2.0.0" + 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" +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + dependencies: + p-limit "^2.0.0" + p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" @@ -5786,6 +6050,10 @@ p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" +p-try@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" @@ -5805,8 +6073,8 @@ param-case@2.1.x: no-case "^2.2.0" parse-asn1@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + version "5.1.1" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.1.tgz#f6bf293818332bd0dab54efb16087724745e6ca8" dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" @@ -5883,8 +6151,8 @@ path-key@^2.0.0, path-key@^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" + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" path-to-regexp@0.1.7: version "0.1.7" @@ -5898,12 +6166,6 @@ path-type@^1.0.0: pify "^2.0.0" pinkie-promise "^2.0.0" -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - dependencies: - pify "^2.0.0" - path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -5911,8 +6173,8 @@ path-type@^3.0.0: pify "^3.0.0" pbkdf2@^3.0.3: - version "3.0.14" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" + version "3.0.16" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.16.tgz#7404208ec6b01b62d85bf83853a8064f8d9c2a5c" dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -5920,10 +6182,6 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" -performance-now@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" - performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" @@ -5957,8 +6215,8 @@ pn@^1.1.0: resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" portfinder@^1.0.9: - version "1.0.13" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.13.tgz#bb32ecd87c27104ae6ee44b5a3ccbf0ebb1aede9" + version "1.0.17" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.17.tgz#a8a1691143e46c4735edefcf4fbcccedad26456a" dependencies: async "^1.5.2" debug "^2.2.0" @@ -6023,11 +6281,10 @@ postcss-discard-unused@^2.2.1: uniqs "^2.0.0" postcss-filter-plugins@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.2.tgz#6d85862534d735ac420e4a85806e1f5d4286d84c" + version "2.0.3" + resolved "https://registry.yarnpkg.com/postcss-filter-plugins/-/postcss-filter-plugins-2.0.3.tgz#82245fdf82337041645e477114d8e593aa18b8ec" dependencies: postcss "^5.0.4" - uniqid "^4.0.0" postcss-merge-idents@^2.1.5: version "2.1.7" @@ -6206,13 +6463,13 @@ postcss@^5.0.10, postcss@^5.0.11, postcss@^5.0.12, postcss@^5.0.13, postcss@^5.0 source-map "^0.5.6" supports-color "^3.2.3" -postcss@^6.0.1, postcss@^6.0.20: - version "6.0.21" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.21.tgz#8265662694eddf9e9a5960db6da33c39e4cd069d" +postcss@^6.0.1, postcss@^6.0.23: + version "6.0.23" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" dependencies: - chalk "^2.3.2" + chalk "^2.4.1" source-map "^0.6.1" - supports-color "^5.3.0" + supports-color "^5.4.0" prelude-ls@~1.1.2: version "1.1.2" @@ -6230,9 +6487,9 @@ preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" -prettier@^1.10.2, prettier@^1.5.3: - version "1.11.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.11.1.tgz#61e43fc4cd44e68f2b0dfc2c38cd4bb0fccdcc75" +prettier@^1.10.2, prettier@^1.12.1: + version "1.14.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.14.2.tgz#0ac1c6e1a90baa22a62925f41963c841983282f9" pretty-bytes@^4.0.2: version "4.0.2" @@ -6245,7 +6502,7 @@ pretty-error@^2.0.2: renderkid "^2.0.1" utila "~0.4" -pretty-format@^22.4.3: +pretty-format@^22.4.0, pretty-format@^22.4.3: version "22.4.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.3.tgz#f873d780839a9c02e9664c8a082e9ee79eaac16f" dependencies: @@ -6253,8 +6510,8 @@ pretty-format@^22.4.3: ansi-styles "^3.2.0" pretty-quick@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-1.4.1.tgz#9d41f778d2d4d940ec603d1293a0998e84c4722c" + version "1.6.0" + resolved "https://registry.yarnpkg.com/pretty-quick/-/pretty-quick-1.6.0.tgz#afc3591eb5c4cf37614a305d489a8a40e57c9258" dependencies: chalk "^2.3.0" execa "^0.8.0" @@ -6262,7 +6519,7 @@ pretty-quick@^1.2.0: ignore "^3.3.7" mri "^1.1.0" -private@^0.1.6, private@^0.1.7, private@~0.1.5: +private@^0.1.6, private@^0.1.8, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -6270,10 +6527,6 @@ process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" -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.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" @@ -6282,18 +6535,16 @@ promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" -promise@7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" - dependencies: - asap "~2.0.3" +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" proxy-addr@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.3.tgz#355f262505a621646b3130a728eb647e22055341" + version "2.0.4" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.4.tgz#ecfc733bf22ff8c6f407fa275327b9ab67e48b93" dependencies: forwarded "~0.1.2" - ipaddr.js "1.6.0" + ipaddr.js "1.8.0" prr@~1.0.1: version "1.0.1" @@ -6303,9 +6554,13 @@ pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" +psl@^1.1.24: + version "1.1.29" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + public-encrypt@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + version "4.0.2" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.2.tgz#46eb9107206bf73489f8b85b69d91334c6610994" dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" @@ -6313,6 +6568,15 @@ public-encrypt@^4.0.0: parse-asn1 "^5.0.0" randombytes "^2.0.1" +"pullstream@>= 0.4.1 < 1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/pullstream/-/pullstream-0.4.1.tgz#d6fb3bf5aed697e831150eb1002c25a3f8ae1314" + dependencies: + over ">= 0.0.5 < 1" + readable-stream "~1.0.31" + setimmediate ">= 1.0.2 < 2" + slice-stream ">= 1.0.0 < 2" + pump@^2.0.0, pump@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" @@ -6321,10 +6585,10 @@ pump@^2.0.0, pump@^2.0.1: once "^1.3.1" pumpify@^1.3.3: - version "1.4.0" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb" + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" dependencies: - duplexify "^3.5.3" + duplexify "^3.6.0" inherits "^2.0.3" pump "^2.0.0" @@ -6337,24 +6601,20 @@ punycode@^1.2.4, punycode@^1.4.1: resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" punycode@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + version "2.1.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" q@^1.1.2: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" -qs@6.5.1, qs@~6.5.1: +qs@6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" -qs@~6.2.0: - version "6.2.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.2.3.tgz#1cfcb25c10a9b2b483053ff39f5dfc9233908cfe" - -qs@~6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" query-string@^4.1.0: version "4.3.4" @@ -6379,20 +6639,17 @@ querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" -querystringify@0.0.x: - version "0.0.4" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-0.0.4.tgz#0cf7f84f9463ff0ae51c4c4b142d95be37724d9c" - -querystringify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-1.0.0.tgz#6286242112c5b712fa654e526652bf6a13ff05cb" +querystringify@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.0.0.tgz#fa3ed6e68eb15159457c89b37bc6472833195755" -randomatic@^1.1.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" +randomatic@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.0.tgz#36f2ca708e9e567f5ed2ec01949026d50aa10116" dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.0.6" @@ -6420,11 +6677,11 @@ raw-body@2.3.2: iconv-lite "0.4.19" unpipe "1.0.0" -rc@^1.1.7: - version "1.2.6" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.6.tgz#eb18989c6d4f4f162c399f79ddd29f3835568092" +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" dependencies: - deep-extend "~0.4.0" + deep-extend "^0.6.0" ini "~1.3.0" minimist "^1.2.0" strip-json-comments "~2.0.1" @@ -6443,13 +6700,6 @@ read-pkg-up@^1.0.1: find-up "^1.0.0" read-pkg "^1.0.0" -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" @@ -6465,14 +6715,6 @@ read-pkg@^1.0.0: normalize-package-data "^2.3.2" path-type "^1.0.0" -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" @@ -6481,37 +6723,26 @@ read-pkg@^3.0.0: normalize-package-data "^2.3.2" path-type "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.2.9, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" dependencies: core-util-is "~1.0.0" inherits "~2.0.3" isarray "~1.0.0" process-nextick-args "~2.0.0" safe-buffer "~5.1.1" - string_decoder "~1.0.3" + string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@1.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.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" +readable-stream@1.0, readable-stream@~1.0.0, readable-stream@~1.0.31: + 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 "~1.0.0" - process-nextick-args "~1.0.6" + isarray "0.0.1" string_decoder "~0.10.x" - util-deprecate "~1.0.1" readdirp@^2.0.0: version "2.1.0" @@ -6523,8 +6754,8 @@ readdirp@^2.0.0: set-immediate-shim "^1.0.1" realpath-native@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" + version "1.0.2" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.2.tgz#cd51ce089b513b45cf9b1516c82989b51ccc6560" dependencies: util.promisify "^1.0.0" @@ -6538,11 +6769,11 @@ recast@^0.12.5: private "~0.1.5" source-map "~0.6.1" -recast@^0.14.1: - version "0.14.7" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.14.7.tgz#4f1497c2b5826d42a66e8e3c9d80c512983ff61d" +recast@^0.15.0: + version "0.15.3" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.15.3.tgz#5fc1fd1c8e2d4d027ee3977a176bbb8d1c83305e" dependencies: - ast-types "0.11.3" + ast-types "0.11.5" esprima "~4.0.0" private "~0.1.5" source-map "~0.6.1" @@ -6553,13 +6784,6 @@ rechoir@^0.6.2: dependencies: resolve "^1.1.6" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - reduce-css-calc@^1.2.6: version "1.3.0" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" @@ -6574,15 +6798,15 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" -regenerate-unicode-properties@^5.1.1: - version "5.1.3" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-5.1.3.tgz#54f5891543468f36f2274b67c6bc4c033c27b308" +regenerate-unicode-properties@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-7.0.0.tgz#107405afcc4a190ec5ed450ecaa00ed0cafa7a4c" dependencies: - regenerate "^1.3.3" + regenerate "^1.4.0" -regenerate@^1.2.1, regenerate@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" +regenerate@^1.2.1, regenerate@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" regenerator-runtime@^0.11.0: version "0.11.1" @@ -6596,9 +6820,9 @@ regenerator-transform@^0.10.0: babel-types "^6.19.0" private "^0.1.6" -regenerator-transform@^0.12.3: - version "0.12.3" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.12.3.tgz#459adfb64f6a27164ab991b7873f45ab969eca8b" +regenerator-transform@^0.13.3: + version "0.13.3" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.13.3.tgz#264bd9ff38a8ce24b06e0636496b2c856b57bcbb" dependencies: private "^0.1.6" @@ -6631,24 +6855,24 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^4.1.3: - version "4.1.3" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.1.3.tgz#fb81616dbbc2a917a7419b33f8379144f51eb8d0" +regexpu-core@^4.1.3, regexpu-core@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.2.0.tgz#a3744fa03806cffe146dea4421a3e73bdcc47b1d" dependencies: - regenerate "^1.3.3" - regenerate-unicode-properties "^5.1.1" - regjsgen "^0.3.0" - regjsparser "^0.2.1" - unicode-match-property-ecmascript "^1.0.3" - unicode-match-property-value-ecmascript "^1.0.1" + regenerate "^1.4.0" + regenerate-unicode-properties "^7.0.0" + regjsgen "^0.4.0" + regjsparser "^0.3.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.0.2" regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" -regjsgen@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.3.0.tgz#0ee4a3e9276430cda25f1e789ea6c15b87b0cb43" +regjsgen@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.4.0.tgz#c1eb4c89a209263f8717c782591523913ede2561" regjsparser@^0.1.4: version "0.1.5" @@ -6656,9 +6880,9 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" -regjsparser@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.2.1.tgz#c3787553faf04e775c302102ef346d995000ec1c" +regjsparser@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.3.0.tgz#3c326da7fcfd69fa0d332575a41c8c0cdf588c96" dependencies: jsesc "~0.5.0" @@ -6681,8 +6905,8 @@ renderkid@^2.0.1: utila "~0.3" repeat-element@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" @@ -6716,85 +6940,39 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.0" tough-cookie ">=2.3.3" -request@2.74.0: - version "2.74.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.74.0.tgz#7693ca768bbb0ea5c8ce08c084a45efa05b892ab" +request-promise@^4.2.0: + version "4.2.2" + resolved "https://registry.yarnpkg.com/request-promise/-/request-promise-4.2.2.tgz#d1ea46d654a6ee4f8ee6a4fea1018c22911904b4" dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - bl "~1.1.2" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~1.0.0-rc4" - 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" - node-uuid "~1.4.7" - oauth-sign "~0.8.1" - qs "~6.2.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - -request@2.81.0: - version "2.81.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~4.2.1" - 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" - performance-now "^0.2.0" - qs "~6.4.0" - safe-buffer "^5.0.1" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "^0.6.0" - uuid "^3.0.0" + bluebird "^3.5.0" + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" -request@^2.83.0: - version "2.85.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" +request@^2.81.0, request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" dependencies: aws-sign2 "~0.7.0" - aws4 "^1.6.0" + aws4 "^1.8.0" caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" + combined-stream "~1.0.6" + extend "~3.0.2" forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" - hawk "~6.0.2" + form-data "~2.3.2" + har-validator "~5.1.0" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" + mime-types "~2.1.19" + oauth-sign "~0.9.0" performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - stringstream "~0.0.5" - tough-cookie "~2.3.3" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" tunnel-agent "^0.6.0" - uuid "^3.1.0" + uuid "^3.3.2" require-directory@^2.1.1: version "2.1.1" @@ -6804,7 +6982,7 @@ 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" -requires-port@1.0.x, requires-port@1.x.x, requires-port@~1.0.0: +requires-port@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" @@ -6834,8 +7012,8 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" resolve@^1.1.6, resolve@^1.3.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.6.0.tgz#0fbd21278b27b4004481c395349e7aba60a9ff5c" + version "1.8.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" dependencies: path-parse "^1.0.5" @@ -6863,13 +7041,7 @@ ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" -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.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -6877,15 +7049,19 @@ rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2. rimraf@~2.2.6: version "2.2.8" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + resolved "http://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" dependencies: - hash-base "^2.0.0" + hash-base "^3.0.0" inherits "^2.0.1" +rsvp@^3.3.3: + version "3.6.2" + resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-3.6.2.tgz#2e96491599a96cde1b515d5674a8f7a91452926a" + run-async@^2.0.0, run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" @@ -6898,37 +7074,46 @@ run-queue@^1.0.0, run-queue@^1.0.3: dependencies: aproba "^1.1.1" -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" +rxjs@^5.5.2: + version "5.5.12" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.12.tgz#6fa61b8a77c3d793dbaf270bee2f43f652d741cc" dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + symbol-observable "1.0.1" -rxjs@^5.4.2, rxjs@^5.5.2: - version "5.5.8" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-5.5.8.tgz#b2b0809a57614ad6254c03d7446dea0d83ca3791" +rxjs@^6.1.0: + version "6.3.2" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.2.tgz#6a688b16c4e6e980e62ea805ec30648e1c60907f" dependencies: - symbol-observable "1.0.1" + tslib "^1.9.0" -safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +safe-buffer@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" +safe-buffer@5.1.2, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" dependencies: ret "~0.1.10" +safename@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/safename/-/safename-1.0.2.tgz#e659f8ea3ce2148880fbf56de78d8e061f229031" + +"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + sane@^2.0.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.0.tgz#6359cd676f5efd9988b264d8ce3b827dd6b27bec" + version "2.5.2" + resolved "https://registry.yarnpkg.com/sane/-/sane-2.5.2.tgz#b4dc1861c21b427e929507a3e751e2a2cb8ab3fa" dependencies: anymatch "^2.0.0" + capture-exit "^1.2.0" exec-sh "^0.2.0" fb-watchman "^2.0.0" micromatch "^3.1.4" @@ -6936,19 +7121,27 @@ sane@^2.0.0: walker "~1.0.5" watch "~0.18.0" optionalDependencies: - fsevents "^1.1.1" + fsevents "^1.2.3" sax@^1.2.4, sax@~1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" -schema-utils@^0.4.2, schema-utils@^0.4.3, schema-utils@^0.4.5: - version "0.4.5" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" +schema-utils@^0.4.4, schema-utils@^0.4.5: + version "0.4.7" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.7.tgz#ba74f597d2be2ea880131746ee17d0a093c68187" dependencies: ajv "^6.1.0" ajv-keywords "^3.1.0" +schema-utils@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-1.0.0.tgz#0b79a93204d7b600d4b2850d1f66c2a34951c770" + dependencies: + ajv "^6.1.0" + ajv-errors "^1.0.0" + ajv-keywords "^3.1.0" + scoped-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/scoped-regex/-/scoped-regex-1.0.0.tgz#a346bb1acd4207ae70bd7c0c7ca9e566b6baddb8" @@ -6958,14 +7151,14 @@ select-hose@^2.0.0: resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" selfsigned@^1.9.1: - version "1.10.2" - resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.2.tgz#b4449580d99929b65b10a48389301a6592088758" + version "1.10.3" + resolved "https://registry.yarnpkg.com/selfsigned/-/selfsigned-1.10.3.tgz#d628ecf9e3735f84e8bafba936b3cf85bea43823" dependencies: - node-forge "0.7.1" + node-forge "0.7.5" "semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + version "5.5.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.1.tgz#7dfdd8814bdb7cabc7be0fb1d734cfb66c940477" send@0.16.2: version "0.16.2" @@ -6986,8 +7179,8 @@ send@0.16.2: statuses "~1.4.0" serialize-javascript@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" + version "1.5.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" serve-index@^1.7.2: version "1.9.1" @@ -7036,7 +7229,7 @@ set-value@^2.0.0: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: +"setimmediate@>= 1.0.1 < 2", "setimmediate@>= 1.0.2 < 2", setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -7066,8 +7259,8 @@ shebang-regex@^1.0.0: resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" shelljs@^0.8.0: - version "0.8.1" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.1.tgz#729e038c413a2254c4078b95ed46e0397154a9f1" + version "0.8.2" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.2.tgz#345b7df7763f4c2340d584abb532c5f752ca9e35" dependencies: glob "^7.0.0" interpret "^1.0.0" @@ -7093,10 +7286,20 @@ slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +slash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" + slice-ansi@0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" +"slice-stream@>= 1.0.0 < 2": + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-stream/-/slice-stream-1.0.0.tgz#5b33bd66f013b1a7f86460b03d463dec39ad3ea0" + dependencies: + readable-stream "~1.0.31" + slide@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" @@ -7128,21 +7331,9 @@ snapdragon@^0.8.1: source-map-resolve "^0.5.0" use "^3.1.0" -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" - -sntp@2.x.x: - version "2.1.0" - resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" - dependencies: - hoek "4.x.x" - -sockjs-client@1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.4.tgz#5babe386b775e4cf14e7520911452654016c8b12" +sockjs-client@1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/sockjs-client/-/sockjs-client-1.1.5.tgz#1bb7c0f7222c40f42adf14f4442cbd1269771a83" dependencies: debug "^2.6.6" eventsource "0.1.6" @@ -7175,10 +7366,10 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" source-map-resolve@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" + version "0.5.2" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.2.tgz#72e2cc34095543e43b2c62b2c4c10d4a9054f259" dependencies: - atob "^2.0.0" + atob "^2.1.1" decode-uri-component "^0.2.0" resolve-url "^0.2.1" source-map-url "^0.4.0" @@ -7191,26 +7382,21 @@ source-map-support@^0.4.15: source-map "^0.5.6" source-map-support@^0.5.0: - version "0.5.4" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.4.tgz#54456efa89caa9270af7cd624cc2f123e51fbae8" + version "0.5.9" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" dependencies: + buffer-from "^1.0.0" source-map "^0.6.0" source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" -source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: +source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@^0.4.4: - 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.6.0, source-map@^0.6.1, source-map@~0.6.1: +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -7270,13 +7456,14 @@ sprintf-js@~1.0.2: resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.1.tgz#130f5975eddad963f1d56f92b9ac6c51fa9f83eb" + version "1.14.2" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.14.2.tgz#c6fc61648a3d9c4e764fd3fcdf4ea105e492ba98" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" dashdash "^1.12.0" getpass "^0.1.1" + safer-buffer "^2.0.2" optionalDependencies: bcrypt-pbkdf "^1.0.0" ecc-jsbn "~0.1.1" @@ -7320,19 +7507,19 @@ stream-browserify@^2.0.1: readable-stream "^2.0.2" stream-each@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + version "1.2.3" + resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" dependencies: end-of-stream "^1.1.0" stream-shift "^1.0.0" stream-http@^2.7.2: - version "2.8.1" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.1.tgz#d0441be1a457a73a733a8a7b53570bebd9ef66a4" + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" - readable-stream "^2.3.3" + readable-stream "^2.3.6" to-arraybuffer "^1.0.0" xtend "^4.0.0" @@ -7340,12 +7527,6 @@ stream-shift@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" -stream-to-observable@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/stream-to-observable/-/stream-to-observable-0.2.0.tgz#59d6ea393d87c2c0ddac10aa0d561bc6ba6f0e10" - dependencies: - any-observable "^0.2.0" - strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" @@ -7369,14 +7550,14 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" -string_decoder@^1.0.0: +string_decoder@^1.0.0, string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" dependencies: @@ -7386,16 +7567,6 @@ string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" -string_decoder@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" - dependencies: - safe-buffer "~5.1.0" - -stringstream@~0.0.4, stringstream@~0.0.5: - 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" @@ -7433,12 +7604,6 @@ strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" - strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" @@ -7457,9 +7622,9 @@ supports-color@^3.1.2, supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^5.1.0, supports-color@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" +supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" dependencies: has-flag "^3.0.0" @@ -7479,32 +7644,26 @@ symbol-observable@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" -symbol-observable@^0.2.2: - version "0.2.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" +symbol-observable@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" +syncprompt@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/syncprompt/-/syncprompt-2.0.0.tgz#b4f303d385e6a0e214614a12d22e8d97234669a4" + dependencies: + bindings "^1.2.1" + nan "^2.4.0" + tapable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" -tar-pack@^3.4.0: - version "3.4.1" - resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" - 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, tar@^2.2.1: +tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: @@ -7512,6 +7671,18 @@ tar@2.2.1, tar@^2.2.1: fstream "^1.0.2" inherits "2" +tar@^4: + version "4.4.6" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" + dependencies: + chownr "^1.0.1" + fs-minipass "^1.2.5" + minipass "^2.3.3" + minizlib "^1.1.0" + mkdirp "^0.5.0" + safe-buffer "^5.1.2" + yallist "^3.0.2" + temp@^0.8.1, temp@^0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -7519,12 +7690,12 @@ temp@^0.8.1, temp@^0.8.3: os-tmpdir "^1.0.0" rimraf "~2.2.6" -test-exclude@^4.1.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.1.tgz#dfa222f03480bca69207ca728b37d74b45f724fa" +test-exclude@^4.2.1: + version "4.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.3.tgz#a9a5e64474e4398339245a0a769ad7c2f4a97c20" dependencies: arrify "^1.0.1" - micromatch "^3.1.8" + micromatch "^2.3.11" object-assign "^4.1.0" read-pkg-up "^1.0.1" require-main-filename "^1.0.1" @@ -7568,8 +7739,8 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" timers-browserify@^2.0.4: - version "2.0.6" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae" + version "2.0.10" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.10.tgz#1d28e3d2aadf1d5a5996c4e9f95601cd053480ae" dependencies: setimmediate "^1.0.4" @@ -7618,29 +7789,34 @@ to-regex@^3.0.1, to-regex@^3.0.2: safe-regex "^1.1.0" toposort@^1.0.0: - version "1.0.6" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec" + version "1.0.7" + resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" -tough-cookie@>=2.3.3, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: - version "2.3.4" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" +tough-cookie@>=2.3.3, tough-cookie@^2.3.4, tough-cookie@~2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" dependencies: + psl "^1.1.24" punycode "^1.4.1" -tr46@^1.0.0: +tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" dependencies: punycode "^2.1.0" -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -7651,10 +7827,6 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -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" @@ -7687,29 +7859,16 @@ uglify-es@^3.3.4: commander "~2.13.0" source-map "~0.6.1" -uglify-js@3.3.x: - version "3.3.17" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.17.tgz#f32a66b191fe18a5b6b4b66b75c0a195f7811f9e" +uglify-js@3.4.x, uglify-js@^3.1.4: + version "3.4.9" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" dependencies: - commander "~2.15.0" + commander "~2.17.1" source-map "~0.6.1" -uglify-js@^2.6: - version "2.8.29" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" - dependencies: - source-map "~0.5.1" - yargs "~3.10.0" - optionalDependencies: - uglify-to-browserify "~1.0.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" - uglifyjs-webpack-plugin@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.4.tgz#5eec941b2e9b8538be0a20fc6eda25b14c7c1043" + version "1.3.0" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.3.0.tgz#75f548160858163a08643e086d5fefe18a5d67de" dependencies: cacache "^10.0.4" find-cache-dir "^1.0.0" @@ -7720,32 +7879,28 @@ uglifyjs-webpack-plugin@^1.2.4: webpack-sources "^1.1.0" worker-farm "^1.5.2" -uid-number@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" - underscore@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" -unicode-canonical-property-names-ecmascript@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.3.tgz#f6119f417467593c0086357c85546b6ad5abc583" +unicode-canonical-property-names-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" -unicode-match-property-ecmascript@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.3.tgz#db9b1cb4ffc67e0c5583780b1b59370e4cbe97b9" +unicode-match-property-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" dependencies: - unicode-canonical-property-names-ecmascript "^1.0.2" - unicode-property-aliases-ecmascript "^1.0.3" + unicode-canonical-property-names-ecmascript "^1.0.4" + unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-value-ecmascript@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.1.tgz#fea059120a016f403afd3bf586162b4db03e0604" +unicode-match-property-value-ecmascript@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" -unicode-property-aliases-ecmascript@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.3.tgz#ac3522583b9e630580f916635333e00c5ead690d" +unicode-property-aliases-ecmascript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" union-value@^1.0.0: version "1.0.0" @@ -7760,12 +7915,6 @@ uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" -uniqid@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/uniqid/-/uniqid-4.1.1.tgz#89220ddf6b751ae52b5f72484863528596bb84c1" - dependencies: - macaddress "^0.2.8" - uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" @@ -7793,21 +7942,43 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" -untildify@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.2.tgz#7f1f302055b3fea0f3e81dc78eb36766cb65e3f1" +untildify@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/untildify/-/untildify-3.0.3.tgz#1e7b42b140bcfd922b22e70ca1265bfe3634c7c9" -upath@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + +unzip-stream@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/unzip-stream/-/unzip-stream-0.3.0.tgz#c30c054cd6b0d64b13a23cd3ece911eb0b2b52d8" + dependencies: + binary "^0.3.0" + mkdirp "^0.5.1" + +unzip@^0.1.11: + version "0.1.11" + resolved "https://registry.yarnpkg.com/unzip/-/unzip-0.1.11.tgz#89749c63b058d7d90d619f86b98aa1535d3b97f0" + dependencies: + binary ">= 0.3.0 < 1" + fstream ">= 0.1.30 < 1" + match-stream ">= 0.0.2 < 1" + pullstream ">= 0.4.1 < 1" + readable-stream "~1.0.31" + setimmediate ">= 1.0.1 < 2" + +upath@^1.0.5: + version "1.1.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" -uri-js@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-3.0.2.tgz#f90b858507f81dea4dcfbb3c4c3dbfa2b557faaa" +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" dependencies: punycode "^2.1.0" @@ -7820,12 +7991,12 @@ url-join@^4.0.0: resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.0.tgz#4d3340e807d3773bda9991f8305acdcc2a665d2a" url-loader@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.0.1.tgz#61bc53f1f184d7343da2728a1289ef8722ea45ee" + version "1.1.1" + resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-1.1.1.tgz#4d1f3b4f90dde89f02c008e662d604d7511167c1" dependencies: loader-utils "^1.1.0" mime "^2.0.3" - schema-utils "^0.4.3" + schema-utils "^1.0.0" url-parse-lax@^1.0.0: version "1.0.0" @@ -7839,19 +8010,12 @@ url-parse-lax@^3.0.0: dependencies: prepend-http "^2.0.0" -url-parse@1.0.x: - version "1.0.5" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.0.5.tgz#0854860422afdcfefeb6c965c662d4800169927b" - dependencies: - querystringify "0.0.x" - requires-port "1.0.x" - -url-parse@^1.1.8: - version "1.2.0" - resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.2.0.tgz#3a19e8aaa6d023ddd27dcc44cb4fc8f7fec23986" +url-parse@^1.1.8, url-parse@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.4.3.tgz#bfaee455c889023219d757e045fa6a684ec36c15" dependencies: - querystringify "~1.0.0" - requires-port "~1.0.0" + querystringify "^2.0.0" + requires-port "^1.0.0" url-to-options@^1.0.1: version "1.0.1" @@ -7865,10 +8029,8 @@ url@^0.11.0: querystring "0.2.0" use@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.0.tgz#14716bf03fdfefd03040aef58d8b4b85f3a7c544" - dependencies: - kind-of "^6.0.2" + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" util-deprecate@~1.0.1: version "1.0.2" @@ -7881,12 +8043,18 @@ util.promisify@1.0.0, util.promisify@^1.0.0: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" -util@0.10.3, 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" +util@^0.10.3: + version "0.10.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" + dependencies: + inherits "2.0.3" + utila@~0.3: version "0.3.3" resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" @@ -7899,17 +8067,17 @@ utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" -uuid@^3.0.0, uuid@^3.0.1, uuid@^3.1.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" +uuid@^3.0.1, uuid@^3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" -v8-compile-cache@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz#8d32e4f16974654657e676e0e467a348e89b0dc4" +v8-compile-cache@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.2.tgz#a428b28bb26790734c4fc8bc9fa106fccebf6a6c" validate-npm-package-license@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz#81643bcbef1bdfecd4623793dc4648948ba98338" + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" dependencies: spdx-correct "^3.0.0" spdx-expression-parse "^3.0.0" @@ -7919,8 +8087,8 @@ vary@~1.1.2: resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" vendors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.1.tgz#37ad73c8ee417fb3d580e785312307d274847f22" + version "1.0.2" + resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.2.tgz#7fcb5eef9f5623b156bcea89ec37d63676f21801" verror@1.10.0: version "1.10.0" @@ -7950,8 +8118,8 @@ vinyl@^1.1.0: replace-ext "0.0.1" vinyl@^2.0.1: - version "2.1.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c" + version "2.2.0" + resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" dependencies: clone "^2.1.1" clone-buffer "^1.0.0" @@ -7986,8 +8154,8 @@ watch@~0.18.0: minimist "^1.2.0" watchpack@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.5.0.tgz#231e783af830a22f8966f65c4c4bacc814072eed" + version "1.6.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" dependencies: chokidar "^2.0.2" graceful-fs "^4.1.2" @@ -7999,7 +8167,7 @@ wbuf@^1.1.0, wbuf@^1.7.2: dependencies: minimalistic-assert "^1.0.0" -webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: +webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" @@ -8010,53 +8178,53 @@ webpack-addons@^1.1.5: jscodeshift "^0.4.0" webpack-cli@^2.0.10: - version "2.0.13" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-2.0.13.tgz#6e2bd9ef91345344737217e22e29001ad8537518" + version "2.1.5" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-2.1.5.tgz#3081fdeb2f205f0a54aa397986880b0c20a71f7a" dependencies: - chalk "^2.3.2" + chalk "^2.4.1" cross-spawn "^6.0.5" diff "^3.5.0" enhanced-resolve "^4.0.0" + envinfo "^5.7.0" glob-all "^3.1.0" global-modules "^1.0.0" - got "^8.2.0" - inquirer "^5.1.0" - interpret "^1.0.4" + got "^8.3.1" + import-local "^1.0.0" + inquirer "^5.2.0" + interpret "^1.1.0" jscodeshift "^0.5.0" - listr "^0.13.0" + listr "^0.14.1" loader-utils "^1.1.0" - lodash "^4.17.5" + lodash "^4.17.10" log-symbols "^2.2.0" mkdirp "^0.5.1" p-each-series "^1.0.0" p-lazy "^1.0.0" - prettier "^1.5.3" - resolve-cwd "^2.0.0" - supports-color "^5.3.0" - v8-compile-cache "^1.1.2" + prettier "^1.12.1" + supports-color "^5.4.0" + v8-compile-cache "^2.0.0" webpack-addons "^1.1.5" - yargs "^11.0.0" - yeoman-environment "^2.0.0" - yeoman-generator "^2.0.3" + yargs "^11.1.0" + yeoman-environment "^2.1.1" + yeoman-generator "^2.0.5" -webpack-dev-middleware@3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.0.1.tgz#7ffd6d0192883c83d3f262e8d7dec822493c6166" +webpack-dev-middleware@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.2.0.tgz#a20ceef194873710052da678f3c6ee0aeed92552" dependencies: loud-rejection "^1.6.0" memory-fs "~0.4.1" - mime "^2.1.0" + mime "^2.3.1" path-is-absolute "^1.0.0" range-parser "^1.0.3" url-join "^4.0.0" - webpack-log "^1.0.1" + webpack-log "^2.0.0" webpack-dev-server@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.1.tgz#3c0fdd1ba3b50ebc79858a0e6b9ccdd1565b0c24" + version "3.1.7" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.1.7.tgz#cbf8071cc092d9493732aee4f062f0e065994854" dependencies: ansi-html "0.0.7" - array-includes "^3.0.3" bonjour "^3.5.0" chokidar "^2.0.0" compression "^1.5.2" @@ -8065,65 +8233,71 @@ webpack-dev-server@^3.1.1: del "^3.0.0" express "^4.16.2" html-entities "^1.2.0" - http-proxy-middleware "~0.17.4" + http-proxy-middleware "~0.18.0" import-local "^1.0.0" - internal-ip "1.2.0" + internal-ip "^3.0.1" ip "^1.1.5" killable "^1.0.0" loglevel "^1.4.1" opn "^5.1.0" portfinder "^1.0.9" + schema-utils "^1.0.0" selfsigned "^1.9.1" serve-index "^1.7.2" sockjs "0.3.19" - sockjs-client "1.1.4" + sockjs-client "1.1.5" spdy "^3.4.1" strip-ansi "^3.0.0" supports-color "^5.1.0" - webpack-dev-middleware "3.0.1" - webpack-log "^1.1.2" - yargs "9.0.1" + webpack-dev-middleware "3.2.0" + webpack-log "^2.0.0" + yargs "12.0.1" -webpack-log@^1.0.1, webpack-log@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.1.2.tgz#cdc76016537eed24708dc6aa3d1e52189efee107" +webpack-log@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" dependencies: - chalk "^2.1.0" - log-symbols "^2.1.0" - loglevelnext "^1.0.1" - uuid "^3.1.0" + ansi-colors "^3.0.0" + uuid "^3.3.2" webpack-manifest-plugin@^2.0.0-rc.2: - version "2.0.0-rc.2" - resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.0-rc.2.tgz#7e12abb805795fe256b085a214a15d9568f0e692" + version "2.0.3" + resolved "https://registry.yarnpkg.com/webpack-manifest-plugin/-/webpack-manifest-plugin-2.0.3.tgz#b42c5b08a0319cedb3ec45d9375a9ecee0acf5eb" dependencies: fs-extra "^0.30.0" lodash ">=3.5 <5" + tapable "^1.0.0" webpack-merge@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.2.tgz#5d372dddd3e1e5f8874f5bf5a8e929db09feb216" + version "4.1.4" + resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.4.tgz#0fde38eabf2d5fd85251c24a5a8c48f8a3f4eb7b" dependencies: lodash "^4.17.5" -webpack-sources@^1.0.1, webpack-sources@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" +webpack-sources@^1.1.0, webpack-sources@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.2.0.tgz#18181e0d013fce096faf6f8e6d41eeffffdceac2" dependencies: source-list-map "^2.0.0" source-map "~0.6.1" webpack@^4.1.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.4.1.tgz#b0105789890c28bfce9f392623ef5850254328a4" - dependencies: - acorn "^5.0.0" + version "4.17.2" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.17.2.tgz#49feb20205bd15f0a5f1fe0a12097d5d9931878d" + dependencies: + "@webassemblyjs/ast" "1.5.13" + "@webassemblyjs/helper-module-context" "1.5.13" + "@webassemblyjs/wasm-edit" "1.5.13" + "@webassemblyjs/wasm-opt" "1.5.13" + "@webassemblyjs/wasm-parser" "1.5.13" + acorn "^5.6.2" acorn-dynamic-import "^3.0.0" ajv "^6.1.0" ajv-keywords "^3.1.0" - chrome-trace-event "^0.1.1" - enhanced-resolve "^4.0.0" - eslint-scope "^3.7.1" + chrome-trace-event "^1.0.0" + enhanced-resolve "^4.1.0" + eslint-scope "^4.0.0" + json-parse-better-errors "^1.0.2" loader-runner "^2.3.0" loader-utils "^1.1.0" memory-fs "~0.4.1" @@ -8131,11 +8305,11 @@ webpack@^4.1.1: mkdirp "~0.5.0" neo-async "^2.5.0" node-libs-browser "^2.0.0" - schema-utils "^0.4.2" + schema-utils "^0.4.4" tapable "^1.0.0" uglifyjs-webpack-plugin "^1.2.4" watchpack "^1.5.0" - webpack-sources "^1.0.1" + webpack-sources "^1.2.0" websocket-driver@>=0.5.1: version "0.7.0" @@ -8149,18 +8323,30 @@ websocket-extensions@>=0.1.1: resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + version "1.0.4" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.4.tgz#63fb016b7435b795d9025632c086a5209dbd2621" dependencies: - iconv-lite "0.4.19" + iconv-lite "0.4.23" + +whatwg-mimetype@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" + +whatwg-url@^6.4.1: + version "6.5.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" -whatwg-url@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" +whatwg-url@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" dependencies: lodash.sortby "^4.7.0" - tr46 "^1.0.0" - webidl-conversions "^4.0.1" + tr46 "^1.0.1" + webidl-conversions "^4.0.2" whet.extend@~0.9.9: version "0.9.9" @@ -8174,25 +8360,17 @@ which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" -which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" +which@^1.2.11, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" dependencies: isexe "^2.0.0" wide-align@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" dependencies: - string-width "^1.0.2" - -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" + string-width "^1.0.2 || 2" wordwrap@~0.0.2: version "0.0.3" @@ -8210,7 +8388,7 @@ worker-farm@^1.5.2: wrap-ansi@^2.0.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + resolved "http://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -8242,17 +8420,20 @@ write-file-atomic@^2.1.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" -ws@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" dependencies: async-limiter "~1.0.0" - safe-buffer "~5.1.0" xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" +xregexp@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.0.0.tgz#e698189de49dd2a18cc5687b05e17c8e43943020" + xtend@^4.0.0, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -8261,7 +8442,7 @@ y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" -y18n@^4.0.0: +"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" @@ -8269,18 +8450,22 @@ yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" +yallist@^3.0.0, yallist@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + +yargs-parser@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + dependencies: + camelcase "^4.1.0" + 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-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" - dependencies: - camelcase "^4.1.0" - yargs-parser@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" @@ -8293,23 +8478,22 @@ yargs-parser@^9.0.2: dependencies: camelcase "^4.1.0" -yargs@9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" +yargs@12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.1.tgz#6432e56123bb4e7c3562115401e98374060261c2" dependencies: - camelcase "^4.1.0" - cliui "^3.2.0" - decamelize "^1.1.1" + cliui "^4.0.0" + decamelize "^2.0.0" + find-up "^3.0.0" get-caller-file "^1.0.1" os-locale "^2.0.0" - read-pkg-up "^2.0.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" string-width "^2.0.0" which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^7.0.0" + y18n "^3.2.1 || ^4.0.0" + yargs-parser "^10.1.0" yargs@^10.0.3: version "10.1.2" @@ -8328,9 +8512,9 @@ yargs@^10.0.3: y18n "^3.2.1" yargs-parser "^8.1.0" -yargs@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" +yargs@^11.1.0: + version "11.1.0" + resolved "http://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" dependencies: cliui "^4.0.0" decamelize "^1.1.1" @@ -8347,7 +8531,7 @@ yargs@^11.0.0: yargs@^6.5.0: version "6.6.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" + resolved "http://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz#782ec21ef403345f830a808ca3d513af56065208" dependencies: camelcase "^3.0.0" cliui "^3.2.0" @@ -8365,56 +8549,49 @@ yargs@^6.5.0: yargs@~1.2.6: version "1.2.6" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-1.2.6.tgz#9c7b4a82fd5d595b2bf17ab6dcc43135432fe34b" + resolved "http://registry.npmjs.org/yargs/-/yargs-1.2.6.tgz#9c7b4a82fd5d595b2bf17ab6dcc43135432fe34b" dependencies: minimist "^0.1.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" - -yeoman-environment@^2.0.0, yeoman-environment@^2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-2.0.6.tgz#ae1b21d826b363f3d637f88a7fc9ea7414cb5377" +yeoman-environment@^2.0.5, yeoman-environment@^2.1.1: + version "2.3.3" + resolved "https://registry.yarnpkg.com/yeoman-environment/-/yeoman-environment-2.3.3.tgz#1bd9720714cc49036e901503a789d809df8f51bf" dependencies: - chalk "^2.1.0" + chalk "^2.4.1" + cross-spawn "^6.0.5" debug "^3.1.0" - diff "^3.3.1" + diff "^3.5.0" escape-string-regexp "^1.0.2" - globby "^6.1.0" + globby "^8.0.1" grouped-queue "^0.3.3" - inquirer "^3.3.0" + inquirer "^6.0.0" is-scoped "^1.0.0" - lodash "^4.17.4" - log-symbols "^2.1.0" + lodash "^4.17.10" + log-symbols "^2.2.0" mem-fs "^1.1.0" + strip-ansi "^4.0.0" text-table "^0.2.0" - untildify "^3.0.2" + untildify "^3.0.3" -yeoman-generator@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-2.0.3.tgz#19426ed22687ffe05d31526c3f1c2cf67ba768f3" +yeoman-generator@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/yeoman-generator/-/yeoman-generator-2.0.5.tgz#57b0b3474701293cc9ec965288f3400b00887c81" dependencies: async "^2.6.0" chalk "^2.3.0" cli-table "^0.3.1" - cross-spawn "^5.1.0" + cross-spawn "^6.0.5" dargs "^5.1.0" - dateformat "^3.0.2" + dateformat "^3.0.3" debug "^3.1.0" detect-conflict "^1.0.0" error "^7.0.2" find-up "^2.1.0" github-username "^4.0.0" - istextorbinary "^2.1.0" - lodash "^4.17.4" + istextorbinary "^2.2.1" + lodash "^4.17.10" make-dir "^1.1.0" - mem-fs-editor "^3.0.2" + mem-fs-editor "^4.0.0" minimist "^1.2.0" pretty-bytes "^4.0.2" read-chunk "^2.1.0" @@ -8425,3 +8602,7 @@ yeoman-generator@^2.0.3: text-table "^0.2.0" through2 "^2.0.0" yeoman-environment "^2.0.5" + +yn@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yn/-/yn-2.0.0.tgz#e5adabc8acf408f6385fc76495684c88e6af689a"