From aa42e35376a437181efc5f9d5ec6a956036d482a Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Thu, 27 Feb 2020 17:51:55 -0800 Subject: [PATCH 01/73] Reload content cache on hot reload updates. --- generator/src/elm-file-constants.js | 7 +++++++ index.js | 10 ++++++++++ src/Pages/Internal.elm | 2 ++ src/Pages/Internal/Platform.elm | 26 ++++++++++++++++++++------ src/Pages/Internal/Platform/Cli.elm | 1 + src/Pages/Platform.elm | 1 + 6 files changed, 41 insertions(+), 6 deletions(-) diff --git a/generator/src/elm-file-constants.js b/generator/src/elm-file-constants.js index a37e839d..db882299 100644 --- a/generator/src/elm-file-constants.js +++ b/generator/src/elm-file-constants.js @@ -92,11 +92,14 @@ directoryWithoutIndex path = port toJsPort : Json.Encode.Value -> Cmd msg +port fromJsPort : (Json.Decode.Value -> msg) -> Sub msg + internals : Pages.Internal.Internal PathKey internals = { applicationType = Pages.Internal.Browser , toJsPort = toJsPort + , fromJsPort = fromJsPort identity , content = content , pathKey = PathKey } @@ -159,10 +162,14 @@ directoryWithoutIndex path = port toJsPort : Json.Encode.Value -> Cmd msg +port fromJsPort : (Json.Decode.Value -> msg) -> Sub msg + + internals : Pages.Internal.Internal PathKey internals = { applicationType = Pages.Internal.Cli , toJsPort = toJsPort + , fromJsPort = fromJsPort identity , content = content , pathKey = PathKey } diff --git a/index.js b/index.js index 20500019..ca5fbc4f 100644 --- a/index.js +++ b/index.js @@ -62,6 +62,16 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) } }); + + if (module.hot) { + module.hot.addStatusHandler(function(status) { + if (status === 'idle') { + console.log('Reloaded!!!!!!!!!!', status) + app.ports.fromJsPort.send({}); + } + }); + } + return app }); diff --git a/src/Pages/Internal.elm b/src/Pages/Internal.elm index 0523f299..e9f5adba 100644 --- a/src/Pages/Internal.elm +++ b/src/Pages/Internal.elm @@ -13,6 +13,7 @@ that is in the generated `Pages` module (see ). -} +import Json.Decode import Json.Encode import Pages.Internal.Platform @@ -31,4 +32,5 @@ type alias Internal pathKey = , content : Pages.Internal.Platform.Content , pathKey : pathKey , toJsPort : Json.Encode.Value -> Cmd Never + , fromJsPort : Sub Json.Decode.Value } diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index a87f384f..68e9fa15 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -372,6 +372,7 @@ type AppMsg userMsg metadata view | UpdateCache (Result Http.Error (ContentCache metadata view)) | UpdateCacheAndUrl Url (Result Http.Error (ContentCache metadata view)) | PageScrollComplete + | HotReloadComplete type Model userModel userMsg metadata view @@ -394,7 +395,8 @@ type Phase update : - List String + Content + -> List String -> String -> (List ( PagePath pathKey, metadata ) @@ -422,7 +424,7 @@ update : -> Msg userMsg metadata view -> ModelDetails userModel metadata view -> ( ModelDetails userModel metadata view, Cmd (AppMsg userMsg metadata view) ) -update allRoutes canonicalSiteUrl viewFunction pathKey onPageChangeMsg toJsPort document userUpdate msg model = +update content allRoutes canonicalSiteUrl viewFunction pathKey onPageChangeMsg toJsPort document userUpdate msg model = case msg of AppMsg appMsg -> case appMsg of @@ -558,6 +560,13 @@ update allRoutes canonicalSiteUrl viewFunction pathKey onPageChangeMsg toJsPort PageScrollComplete -> ( model, Cmd.none ) + HotReloadComplete -> + ( model + , ContentCache.init document content (Maybe.map (\cj -> { contentJson = cj, initialUrl = model.url }) Nothing) + |> ContentCache.lazyLoad document model.url + |> Task.attempt (UpdateCacheAndUrl model.url) + ) + CliMsg _ -> ( model, Cmd.none ) @@ -593,6 +602,7 @@ application : , document : Pages.Document.Document metadata view , content : Content , toJsPort : Json.Encode.Value -> Cmd Never + , fromJsPort : Sub Decode.Value , manifest : Manifest.Config pathKey , generateFiles : List @@ -658,7 +668,7 @@ application config = |> List.map (String.join "/") |> List.map (\route -> "/" ++ route) in - update allRoutes config.canonicalSiteUrl config.view config.pathKey config.onPageChange config.toJsPort config.document userUpdate msg model + update config.content allRoutes config.canonicalSiteUrl config.view config.pathKey config.onPageChange config.toJsPort config.document userUpdate msg model |> Tuple.mapFirst Model |> Tuple.mapSecond (Cmd.map AppMsg) @@ -668,9 +678,12 @@ application config = \outerModel -> case outerModel of Model model -> - config.subscriptions model.userModel - |> Sub.map UserMsg - |> Sub.map AppMsg + Sub.batch + [ config.subscriptions model.userModel + |> Sub.map UserMsg + |> Sub.map AppMsg + , config.fromJsPort |> Sub.map (\_ -> AppMsg HotReloadComplete) + ] CliModel _ -> Sub.none @@ -703,6 +716,7 @@ cliApplication : , document : Pages.Document.Document metadata view , content : Content , toJsPort : Json.Encode.Value -> Cmd Never + , fromJsPort : Sub Decode.Value , manifest : Manifest.Config pathKey , generateFiles : List diff --git a/src/Pages/Internal/Platform/Cli.elm b/src/Pages/Internal/Platform/Cli.elm index df8b5b77..4354f9ba 100644 --- a/src/Pages/Internal/Platform/Cli.elm +++ b/src/Pages/Internal/Platform/Cli.elm @@ -176,6 +176,7 @@ type alias Config pathKey userMsg userModel metadata view = , document : Pages.Document.Document metadata view , content : Content , toJsPort : Json.Encode.Value -> Cmd Never + , fromJsPort : Sub Decode.Value , manifest : Manifest.Config pathKey , generateFiles : List diff --git a/src/Pages/Platform.elm b/src/Pages/Platform.elm index 35c531cb..b5c0f415 100644 --- a/src/Pages/Platform.elm +++ b/src/Pages/Platform.elm @@ -123,6 +123,7 @@ application config = , content = config.internals.content , generateFiles = config.generateFiles , toJsPort = config.internals.toJsPort + , fromJsPort = config.internals.fromJsPort , manifest = config.manifest , canonicalSiteUrl = config.canonicalSiteUrl , onPageChange = config.onPageChange From 2179ec635abe0e37181db02e509d24f7efeb02a4 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sat, 4 Apr 2020 16:40:03 +0000 Subject: [PATCH 02/73] =?UTF-8?q?Create=20Docs=20=E2=80=9Ccore-concepts?= =?UTF-8?q?=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/docs/content/docs/core-concepts.md | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 examples/docs/content/docs/core-concepts.md diff --git a/examples/docs/content/docs/core-concepts.md b/examples/docs/content/docs/core-concepts.md new file mode 100644 index 00000000..fe6b7003 --- /dev/null +++ b/examples/docs/content/docs/core-concepts.md @@ -0,0 +1,7 @@ +--- +title: Core Concepts +type: doc +--- +\## StaticHttp + +Gives you a way to pull in data during the build step. This data changes every time you run a build. You won't see a loading spinner or error with this data in your built production site. You might get a build error that you can fix. \ No newline at end of file From d9855fe38a42b1ea60076d1dac49bd9b4502e8f3 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sat, 4 Apr 2020 16:40:23 +0000 Subject: [PATCH 03/73] =?UTF-8?q?Update=20Docs=20=E2=80=9Ccore-concepts?= =?UTF-8?q?=E2=80=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- examples/docs/content/docs/core-concepts.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/docs/content/docs/core-concepts.md b/examples/docs/content/docs/core-concepts.md index fe6b7003..42c06f99 100644 --- a/examples/docs/content/docs/core-concepts.md +++ b/examples/docs/content/docs/core-concepts.md @@ -2,6 +2,6 @@ title: Core Concepts type: doc --- -\## StaticHttp +## StaticHttp Gives you a way to pull in data during the build step. This data changes every time you run a build. You won't see a loading spinner or error with this data in your built production site. You might get a build error that you can fix. \ No newline at end of file From f20954e70734d29b9e83af0f7c6a95a8508d1e4b Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 6 Apr 2020 08:42:01 -0700 Subject: [PATCH 04/73] Fix a version in changelog. --- CHANGELOG-NPM.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG-NPM.md b/CHANGELOG-NPM.md index 0c0a28b9..2e99f6d2 100644 --- a/CHANGELOG-NPM.md +++ b/CHANGELOG-NPM.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. ## [Unreleased] -## [1.2.12] - 2020-03-28 +## [1.3.0] - 2020-03-28 ### Added - You can now host your `elm-pages` site in a sub-directory. For example, you could host it at mysite.com/blog, where the top-level mysite.com/ is hosting a different app. From 93913b2673dc3a92e27e97b66175f27fcb1ed136 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Fri, 10 Apr 2020 05:03:07 -0700 Subject: [PATCH 05/73] Add description to blog post. --- examples/docs/content/blog/static-http.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/docs/content/blog/static-http.md b/examples/docs/content/blog/static-http.md index 74cc7fc2..f69c33a3 100644 --- a/examples/docs/content/blog/static-http.md +++ b/examples/docs/content/blog/static-http.md @@ -3,7 +3,7 @@ "type": "blog", "author": "Dillon Kearns", "title": "A is for API - Introducing Static HTTP Requests", - "description": "", + "description": "The new StaticHttp API lets you fetch data when your site is built. That lets you remove loading spinners, and even access environment variables.", "image": "images/article-covers/static-http.jpg", "published": "2019-12-10", } From 384fd48de32b724f86c69b22a2ba0de4582e3821 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Fri, 10 Apr 2020 05:06:57 -0700 Subject: [PATCH 06/73] Working MVP for adding structured data (json-ld). --- examples/docs/src/Main.elm | 57 ++++++++++++--------- index.js | 53 +++++++++++++------- src/Head.elm | 33 ++++++++++-- src/StructuredData.elm | 100 +++++++++++++++++++++++++++++++++++++ 4 files changed, 197 insertions(+), 46 deletions(-) create mode 100644 src/StructuredData.elm diff --git a/examples/docs/src/Main.elm b/examples/docs/src/Main.elm index acfdd93d..cf01b087 100644 --- a/examples/docs/src/Main.elm +++ b/examples/docs/src/Main.elm @@ -20,6 +20,7 @@ import Html.Attributes as Attr import Index import Json.Decode as Decode exposing (Decoder) import Json.Decode.Exploration as D +import Json.Encode import MarkdownRenderer import Metadata exposing (Metadata) import MySitemap @@ -35,6 +36,7 @@ import Pages.StaticHttp as StaticHttp import Palette import Secrets import Showcase +import StructuredData manifest : Manifest.Config Pages.PathKey @@ -166,7 +168,7 @@ view siteMetadata page = ] } |> wrapBody stars page model - , head = head page.frontmatter + , head = head page.path page.frontmatter } ) (StaticHttp.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages") @@ -183,7 +185,7 @@ view siteMetadata page = \model viewForPage -> pageView stars model siteMetadata page viewForPage |> wrapBody stars page model - , head = head page.frontmatter + , head = head page.path page.frontmatter } ) @@ -506,8 +508,8 @@ commonHeadTags = -} -head : Metadata -> List (Head.Tag Pages.PathKey) -head metadata = +head : PagePath Pages.PathKey -> Metadata -> List (Head.Tag Pages.PathKey) +head currentPath metadata = commonHeadTags ++ (case metadata of Metadata.Page meta -> @@ -543,26 +545,35 @@ head metadata = |> Seo.website Metadata.Article meta -> - Seo.summaryLarge - { canonicalUrlOverride = Nothing - , siteName = "elm-pages" - , image = - { url = meta.image - , alt = meta.description - , dimensions = Nothing - , mimeType = Nothing - } - , description = meta.description - , locale = Nothing - , title = meta.title - } - |> Seo.article - { tags = [] - , section = Nothing - , publishedTime = Just (Date.toIsoString meta.published) - , modifiedTime = Nothing - , expirationTime = Nothing + Head.structuredData + (StructuredData.article + { title = meta.title + , description = meta.description + , url = canonicalSiteUrl ++ "/" ++ PagePath.toString currentPath + , datePublished = Date.toIsoString meta.published } + ) + :: (Seo.summaryLarge + { canonicalUrlOverride = Nothing + , siteName = "elm-pages" + , image = + { url = meta.image + , alt = meta.description + , dimensions = Nothing + , mimeType = Nothing + } + , description = meta.description + , locale = Nothing + , title = meta.title + } + |> Seo.article + { tags = [] + , section = Nothing + , publishedTime = Just (Date.toIsoString meta.published) + , modifiedTime = Nothing + , expirationTime = Nothing + } + ) Metadata.Author meta -> let diff --git a/index.js b/index.js index 3c61ca67..4be30bc1 100644 --- a/index.js +++ b/index.js @@ -11,9 +11,9 @@ module.exports = function pagesInit( prefetchedPages = [window.location.pathname]; initialLocationHash = document.location.hash.replace(/^#/, ""); - return new Promise(function(resolve, reject) { + return new Promise(function (resolve, reject) { document.addEventListener("DOMContentLoaded", _ => { - new MutationObserver(function() { + new MutationObserver(function () { elmViewRendered = true; if (headTagsAdded) { document.dispatchEvent(new Event("prerender-trigger")); @@ -32,7 +32,7 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) const isPrerendering = navigator.userAgent.indexOf("Headless") >= 0 const path = window.location.pathname.replace(/(\w)$/, "$1/") - return httpGet(`${window.location.origin}${path}content.json`).then(function(/** @type JSON */ contentJson) { + return httpGet(`${window.location.origin}${path}content.json`).then(function (/** @type JSON */ contentJson) { const app = mainElmModule.init({ flags: { @@ -46,13 +46,14 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) }); app.ports.toJsPort.subscribe(( - /** @type { { head: HeadTag[], allRoutes: string[] } } */ fromElm + /** @type { { head: SeoTag[], allRoutes: string[] } } */ fromElm ) => { appendTag({ - name: "meta", + type: 'head', + name: 'meta', attributes: [ - ["name", "generator"], - ["content", `elm-pages v${elmPagesVersion}`] + ['name', 'generator'], + ['content', `elm-pages v${elmPagesVersion}`] ] }); @@ -60,12 +61,18 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) if (navigator.userAgent.indexOf("Headless") >= 0) { fromElm.head.forEach(headTag => { - appendTag(headTag); - }); - headTagsAdded = true; - if (elmViewRendered) { - document.dispatchEvent(new Event("prerender-trigger")); + if (headTag.type === 'head') { + appendTag(headTag); + } else if (headTag.type === 'json-ld') { + appendJsonLdTag(headTag); + } else { + throw new Error(`Unknown tag type #{headTag}`) } + }); + headTagsAdded = true; + if (elmViewRendered) { + document.dispatchEvent(new Event("prerender-trigger")); + } } else { setupLinkPrefetching(); } @@ -132,7 +139,7 @@ function setupLinkPrefetchingHelp( const links = document.querySelectorAll("a"); links.forEach(link => { // console.log(link.pathname); - link.addEventListener("mouseenter", function(event) { + link.addEventListener("mouseenter", function (event) { if ( event && event.target && @@ -166,7 +173,9 @@ function prefetchIfNeeded(/** @type {HTMLAnchorElement} */ target) { } } -/** @typedef {{ name: string; attributes: string[][]; }} HeadTag */ +/** @typedef {HeadTag | JsonLdTag} SeoTag */ + +/** @typedef {{ name: string; attributes: string[][]; type: 'head' }} HeadTag */ function appendTag(/** @type {HeadTag} */ tagDetails) { const meta = document.createElement(tagDetails.name); tagDetails.attributes.forEach(([name, value]) => { @@ -175,12 +184,20 @@ function appendTag(/** @type {HeadTag} */ tagDetails) { document.getElementsByTagName("head")[0].appendChild(meta); } +/** @typedef {{ contents: Object; type: 'json-ld' }} JsonLdTag */ +function appendJsonLdTag(/** @type {JsonLdTag} */ tagDetails) { + let jsonLdScript = document.createElement('script'); + jsonLdScript.type = "application/ld+json"; + jsonLdScript.innerHTML = JSON.stringify(tagDetails.contents); + document.getElementsByTagName("head")[0].appendChild(jsonLdScript); +} + function httpGet(/** @type string */ theUrl) { - return new Promise(function(resolve, reject) { + return new Promise(function (resolve, reject) { const xmlHttp = new XMLHttpRequest(); - xmlHttp.onreadystatechange = function() { - if (xmlHttp.readyState == 4 && xmlHttp.status == 200) - resolve(JSON.parse(xmlHttp.responseText)); + xmlHttp.onreadystatechange = function () { + if (xmlHttp.readyState == 4 && xmlHttp.status == 200) + resolve(JSON.parse(xmlHttp.responseText)); } xmlHttp.onerror = reject; xmlHttp.open("GET", theUrl, true); // true for asynchronous diff --git a/src/Head.elm b/src/Head.elm index b3f93e1f..b4e2a987 100644 --- a/src/Head.elm +++ b/src/Head.elm @@ -1,6 +1,7 @@ module Head exposing ( Tag, metaName, metaProperty , rssLink, sitemapLink + , structuredData , AttributeValue , currentPageFullUrl, fullImageUrl, fullPageUrl, raw , toJson, canonicalLink @@ -19,6 +20,11 @@ writing a plugin package to extend `elm-pages`. @docs rssLink, sitemapLink +## Structured Data + +@docs structuredData + + ## `AttributeValue`s @docs AttributeValue @@ -42,6 +48,7 @@ through the `head` function. -} type Tag pathKey = Tag (Details pathKey) + | StructuredData Json.Encode.Value type alias Details pathKey = @@ -50,6 +57,13 @@ type alias Details pathKey = } +{-| TODO +-} +structuredData : Json.Encode.Value -> Tag pathKey +structuredData value = + StructuredData value + + {-| Create a raw `AttributeValue` (as opposed to some kind of absolute URL). -} raw : String -> AttributeValue pathKey @@ -196,11 +210,20 @@ node name attributes = code will run this for you to generate your `manifest.json` file automatically! -} toJson : String -> String -> Tag pathKey -> Json.Encode.Value -toJson canonicalSiteUrl currentPagePath (Tag tag) = - Json.Encode.object - [ ( "name", Json.Encode.string tag.name ) - , ( "attributes", Json.Encode.list (encodeProperty canonicalSiteUrl currentPagePath) tag.attributes ) - ] +toJson canonicalSiteUrl currentPagePath tag = + case tag of + Tag headTag -> + Json.Encode.object + [ ( "name", Json.Encode.string headTag.name ) + , ( "attributes", Json.Encode.list (encodeProperty canonicalSiteUrl currentPagePath) headTag.attributes ) + , ( "type", Json.Encode.string "head" ) + ] + + StructuredData value -> + Json.Encode.object + [ ( "contents", value ) + , ( "type", Json.Encode.string "json-ld" ) + ] encodeProperty : String -> String -> ( String, AttributeValue pathKey ) -> Json.Encode.Value diff --git a/src/StructuredData.elm b/src/StructuredData.elm new file mode 100644 index 00000000..ec8943f3 --- /dev/null +++ b/src/StructuredData.elm @@ -0,0 +1,100 @@ +module StructuredData exposing (..) + +import Json.Encode as Encode + + +{-| +-} +article : { title : String, description : String, url : String, datePublished : String } -> Encode.Value +article info = + Encode.object + [ ( "@context", Encode.string "http://schema.org/" ) + , ( "@type", Encode.string "Article" ) + , ( "name", Encode.string info.title ) + , ( "description", Encode.string info.description ) + , ( "url", Encode.string info.url ) + , ( "datePublished", Encode.string info.datePublished ) + ] + + +{-| + +```json + { + "@context": "http://schema.org/", + "@type": "PodcastSeries", + "image": "https://www.relay.fm/inquisitive_artwork.png", + "url": "http://www.relay.fm/inquisitive", + "name": "Inquisitive", + "description": "Inquisitive is a show for the naturally curious. Each week, Myke Hurley takes a look at what makes creative people successful and what steps they have taken to get there.", + "webFeed": "http://www.relay.fm//inquisitive/feed", + "author": { + "@type": "Person", + "name": "Myke Hurley" + } + } + } +``` + +-} +series : Encode.Value +series = + Encode.object + [ ( "@context", Encode.string "http://schema.org/" ) + , ( "@type", Encode.string "PodcastSeries" ) + , ( "image", Encode.string "TODO" ) + , ( "url", Encode.string "http://elm-radio.com/episode/getting-started-with-elm-pages" ) + , ( "name", Encode.string "Elm Radio" ) + , ( "description", Encode.string "TODO" ) + , ( "webFeed", Encode.string "https://elm-radio.com/feed.xml" ) + ] + + +{-| + +```json + { + "@context": "http://schema.org/", + "@type": "PodcastEpisode", + "url": "http://elm-radio.com/episode/getting-started-with-elm-pages", + "name": "001: Getting Started with elm-pages", + "datePublished": "2015-02-18", + "timeRequired": "PT37M", + "description": "In the first episode of “Behind the App”, a special series of Inquisitive, we take a look at the beginnings of iOS app development, by focusing on the introduction of the iPhone and the App Store.", + "associatedMedia": { + "@type": "MediaObject", + "contentUrl": "https://cdn.simplecast.com/audio/6a206b/6a206baa-9c8e-4c25-9037-2b674204ba84/ca009f6e-1710-4518-b869-ca34cb0b7d17/001-getting-started-elm-pages_tc.mp3 " + }, + "partOfSeries": { + "@type": "PodcastSeries", + "name": "Elm Radio", + "url": "https://elm-radio.com" + } + } +``` + +-} +episode : Encode.Value +episode = + Encode.object + [ ( "@context", Encode.string "http://schema.org/" ) + , ( "@type", Encode.string "PodcastEpisode" ) + , ( "url", Encode.string "http://elm-radio.com/episode/getting-started-with-elm-pages" ) + , ( "name", Encode.string "Getting Started with elm-pages" ) + , ( "datePublished", Encode.string "2015-02-18" ) + , ( "timeRequired", Encode.string "PT37M" ) + , ( "description", Encode.string "TODO" ) + , ( "associatedMedia" + , Encode.object + [ ( "@type", Encode.string "MediaObject" ) + , ( "contentUrl", Encode.string "https://cdn.simplecast.com/audio/6a206b/6a206baa-9c8e-4c25-9037-2b674204ba84/ca009f6e-1710-4518-b869-ca34cb0b7d17/001-getting-started-elm-pages_tc.mp3" ) + ] + ) + , ( "partOfSeries" + , Encode.object + [ ( "@type", Encode.string "PodcastSeries" ) + , ( "name", Encode.string "Elm Radio" ) + , ( "url", Encode.string "https://elm-radio.com" ) + ] + ) + ] From 7b8aa4cb1a2541f1b9e5c871c312e5d47c3d174a Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sat, 11 Apr 2020 08:18:14 -0700 Subject: [PATCH 07/73] Update structured data definitions. --- examples/docs/src/Main.elm | 10 +++++++ src/StructuredData.elm | 60 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/examples/docs/src/Main.elm b/examples/docs/src/Main.elm index cf01b087..2fe2c1f9 100644 --- a/examples/docs/src/Main.elm +++ b/examples/docs/src/Main.elm @@ -549,8 +549,18 @@ head currentPath metadata = (StructuredData.article { title = meta.title , description = meta.description + , author = meta.author.name + , publisher = "elm-pages blog" , url = canonicalSiteUrl ++ "/" ++ PagePath.toString currentPath + , imageUrl = canonicalSiteUrl ++ "/" ++ ImagePath.toString meta.image , datePublished = Date.toIsoString meta.published + , mainEntityOfPage = + StructuredData.softwareSourceCode + { codeRepositoryUrl = "https://github.com/dillonkearns/elm-pages" + , description = "A statically typed site generator for Elm." + , author = "Dillon Kearns" + , programmingLanguage = StructuredData.elmLang + } } ) :: (Seo.summaryLarge diff --git a/src/StructuredData.elm b/src/StructuredData.elm index ec8943f3..c35e5b39 100644 --- a/src/StructuredData.elm +++ b/src/StructuredData.elm @@ -3,17 +3,73 @@ module StructuredData exposing (..) import Json.Encode as Encode +{-| +-} +softwareSourceCode : + { codeRepositoryUrl : String + , description : String + , author : String + , programmingLanguage : Encode.Value + } + -> Encode.Value +softwareSourceCode info = + Encode.object + [ ( "@type", Encode.string "SoftwareSourceCode" ) + , ( "codeRepository", Encode.string info.codeRepositoryUrl ) + , ( "description", Encode.string info.description ) + , ( "author", Encode.string info.author ) + , ( "programmingLanguage", info.programmingLanguage ) + ] + + +{-| +-} +computerLanguage : { url : String, name : String, imageUrl : String, identifier : String } -> Encode.Value +computerLanguage info = + Encode.object + [ ( "@type", Encode.string "ComputerLanguage" ) + , ( "url", Encode.string info.url ) + , ( "name", Encode.string info.name ) + , ( "image", Encode.string info.imageUrl ) + , ( "identifier", Encode.string info.identifier ) + ] + + +elmLang : Encode.Value +elmLang = + computerLanguage + { url = "http://elm-lang.org/" + , name = "Elm" + , imageUrl = "http://elm-lang.org/" + , identifier = "http://elm-lang.org/" + } + + {-| -} -article : { title : String, description : String, url : String, datePublished : String } -> Encode.Value +article : + { title : String + , description : String + , author : String + , publisher : String + , url : String + , imageUrl : String + , datePublished : String + , mainEntityOfPage : Encode.Value + } + -> Encode.Value article info = Encode.object [ ( "@context", Encode.string "http://schema.org/" ) , ( "@type", Encode.string "Article" ) - , ( "name", Encode.string info.title ) + , ( "headline", Encode.string info.title ) , ( "description", Encode.string info.description ) + , ( "image", Encode.string info.imageUrl ) + , ( "author", Encode.string info.author ) + , ( "publisher", Encode.string info.publisher ) , ( "url", Encode.string info.url ) , ( "datePublished", Encode.string info.datePublished ) + , ( "mainEntityOfPage", info.mainEntityOfPage ) ] From 7e83160c738baab0039c12176c781d2eea313a65 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sat, 11 Apr 2020 09:32:59 -0700 Subject: [PATCH 08/73] Fix validation error in publisher Structured Data. --- examples/docs/src/Main.elm | 2 +- src/StructuredData.elm | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/examples/docs/src/Main.elm b/examples/docs/src/Main.elm index 2fe2c1f9..6bef2659 100644 --- a/examples/docs/src/Main.elm +++ b/examples/docs/src/Main.elm @@ -550,7 +550,7 @@ head currentPath metadata = { title = meta.title , description = meta.description , author = meta.author.name - , publisher = "elm-pages blog" + , publisher = StructuredData.person { name = "Dillon Kearns" } , url = canonicalSiteUrl ++ "/" ++ PagePath.toString currentPath , imageUrl = canonicalSiteUrl ++ "/" ++ ImagePath.toString meta.image , datePublished = Date.toIsoString meta.published diff --git a/src/StructuredData.elm b/src/StructuredData.elm index c35e5b39..ff56331c 100644 --- a/src/StructuredData.elm +++ b/src/StructuredData.elm @@ -22,6 +22,16 @@ softwareSourceCode info = ] +{-| +-} +person : { name : String } -> Encode.Value +person info = + Encode.object + [ ( "@type", Encode.string "Person" ) + , ( "name", Encode.string info.name ) + ] + + {-| -} computerLanguage : { url : String, name : String, imageUrl : String, identifier : String } -> Encode.Value @@ -51,7 +61,7 @@ article : { title : String , description : String , author : String - , publisher : String + , publisher : Encode.Value , url : String , imageUrl : String , datePublished : String @@ -66,7 +76,7 @@ article info = , ( "description", Encode.string info.description ) , ( "image", Encode.string info.imageUrl ) , ( "author", Encode.string info.author ) - , ( "publisher", Encode.string info.publisher ) + , ( "publisher", info.publisher ) , ( "url", Encode.string info.url ) , ( "datePublished", Encode.string info.datePublished ) , ( "mainEntityOfPage", info.mainEntityOfPage ) From 33bab4a49576e29973421dbf3fe1a6d23768cdd9 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sat, 11 Apr 2020 20:25:08 -0700 Subject: [PATCH 09/73] Update structured data to use some type safe versions. --- examples/docs/src/Main.elm | 2 +- src/StructuredData.elm | 96 ++++++++++++++++++++++++++++++++------ 2 files changed, 83 insertions(+), 15 deletions(-) diff --git a/examples/docs/src/Main.elm b/examples/docs/src/Main.elm index 6bef2659..63b0b8d3 100644 --- a/examples/docs/src/Main.elm +++ b/examples/docs/src/Main.elm @@ -549,7 +549,7 @@ head currentPath metadata = (StructuredData.article { title = meta.title , description = meta.description - , author = meta.author.name + , author = StructuredData.person { name = meta.author.name } , publisher = StructuredData.person { name = "Dillon Kearns" } , url = canonicalSiteUrl ++ "/" ++ PagePath.toString currentPath , imageUrl = canonicalSiteUrl ++ "/" ++ ImagePath.toString meta.image diff --git a/src/StructuredData.elm b/src/StructuredData.elm index ff56331c..ef84d72a 100644 --- a/src/StructuredData.elm +++ b/src/StructuredData.elm @@ -22,16 +22,6 @@ softwareSourceCode info = ] -{-| --} -person : { name : String } -> Encode.Value -person info = - Encode.object - [ ( "@type", Encode.string "Person" ) - , ( "name", Encode.string info.name ) - ] - - {-| -} computerLanguage : { url : String, name : String, imageUrl : String, identifier : String } -> Encode.Value @@ -60,8 +50,8 @@ elmLang = article : { title : String , description : String - , author : String - , publisher : Encode.Value + , author : StructuredData { authorMemberOf | personOrOrganization : () } authorPossibleFields + , publisher : StructuredData { publisherMemberOf | personOrOrganization : () } publisherPossibleFields , url : String , imageUrl : String , datePublished : String @@ -75,14 +65,92 @@ article info = , ( "headline", Encode.string info.title ) , ( "description", Encode.string info.description ) , ( "image", Encode.string info.imageUrl ) - , ( "author", Encode.string info.author ) - , ( "publisher", info.publisher ) + , ( "author", encode info.author ) + , ( "publisher", encode info.publisher ) , ( "url", Encode.string info.url ) , ( "datePublished", Encode.string info.datePublished ) , ( "mainEntityOfPage", info.mainEntityOfPage ) ] +type StructuredData memberOf possibleFields + = StructuredData String (List ( String, Encode.Value )) + + +{-| +-} +person : + { name : String + } + -> + StructuredData { personOrOrganization : () } + { additionalName : () + , address : () + , affiliation : () + } +person info = + StructuredData "Person" [ ( "name", Encode.string info.name ) ] + + +additionalName : String -> StructuredData memberOf { possibleFields | additionalName : () } -> StructuredData memberOf possibleFields +additionalName value (StructuredData typeName fields) = + StructuredData typeName (( "additionalName", Encode.string value ) :: fields) + + +{-| +-} +article_ : + { title : String + , description : String + , author : String + , publisher : StructuredData { personOrOrganization : () } possibleFieldsPublisher + , url : String + , imageUrl : String + , datePublished : String + , mainEntityOfPage : Encode.Value + } + -> Encode.Value +article_ info = + Encode.object + [ ( "@context", Encode.string "http://schema.org/" ) + , ( "@type", Encode.string "Article" ) + , ( "headline", Encode.string info.title ) + , ( "description", Encode.string info.description ) + , ( "image", Encode.string info.imageUrl ) + , ( "author", Encode.string info.author ) + , ( "publisher", encode info.publisher ) + , ( "url", Encode.string info.url ) + , ( "datePublished", Encode.string info.datePublished ) + , ( "mainEntityOfPage", info.mainEntityOfPage ) + ] + + +encode : StructuredData memberOf possibleFieldsPublisher -> Encode.Value +encode (StructuredData typeName fields) = + Encode.object + (( "@type", Encode.string typeName ) :: fields) + + + +--example : StructuredData { personOrOrganization : () } { address : (), affiliation : () } + + +example = + person { name = "Dillon Kearns" } + |> additionalName "Cornelius" + + + +--organization : +-- {} +-- -> StructuredData { personOrOrganization : () } +--organization info = +-- StructuredData "Organization" [] +--needsPersonOrOrg : StructuredData {} +--needsPersonOrOrg = +-- StructuredData "" [] + + {-| ```json From 5abe2c537806a3b609421126f82fbb58e2b51efe Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 12 Apr 2020 15:18:18 -0700 Subject: [PATCH 10/73] Don't scroll to top of page when hot reloading content. --- src/Pages/Internal/Platform.elm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index 68e9fa15..e3b4715b 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -371,6 +371,7 @@ type AppMsg userMsg metadata view | UserMsg userMsg | UpdateCache (Result Http.Error (ContentCache metadata view)) | UpdateCacheAndUrl Url (Result Http.Error (ContentCache metadata view)) + | UpdateCacheForHotReload (Result Http.Error (ContentCache metadata view)) | PageScrollComplete | HotReloadComplete @@ -557,6 +558,15 @@ update content allRoutes canonicalSiteUrl viewFunction pathKey onPageChangeMsg t -- TODO handle error ( { model | url = url }, Cmd.none ) + UpdateCacheForHotReload cacheUpdateResult -> + case cacheUpdateResult of + Ok updatedCache -> + ( { model | contentCache = updatedCache }, Cmd.none ) + + Err _ -> + -- TODO handle error + ( model, Cmd.none ) + PageScrollComplete -> ( model, Cmd.none ) @@ -564,7 +574,7 @@ update content allRoutes canonicalSiteUrl viewFunction pathKey onPageChangeMsg t ( model , ContentCache.init document content (Maybe.map (\cj -> { contentJson = cj, initialUrl = model.url }) Nothing) |> ContentCache.lazyLoad document model.url - |> Task.attempt (UpdateCacheAndUrl model.url) + |> Task.attempt UpdateCacheForHotReload ) CliMsg _ -> From d4cee63fa84b80ec5d46677fbec1912ffae8fb7f Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 13 Apr 2020 15:02:37 -0700 Subject: [PATCH 11/73] Fix compiler error. --- src/Pages/Internal/Platform.elm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index 8aae93d9..3ae1f7ff 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -596,7 +596,10 @@ update content allRoutes canonicalSiteUrl viewFunction pathKey onPageChangeMsg t HotReloadComplete -> ( model , ContentCache.init document content (Maybe.map (\cj -> { contentJson = cj, initialUrl = model.url }) Nothing) - |> ContentCache.lazyLoad document model.url + |> ContentCache.lazyLoad document + { currentUrl = model.url + , baseUrl = model.baseUrl + } |> Task.attempt UpdateCacheForHotReload ) From 1882465938679b41460368f1c366433f5cfbc848 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 13 Apr 2020 15:03:22 -0700 Subject: [PATCH 12/73] Hook into after compile instead of emit. --- generator/src/add-files-plugin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index 6be30dc16..f4b993fc 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -25,7 +25,7 @@ module.exports = class AddFilesPlugin { this.filesToGenerate = filesToGenerate; } apply(compiler) { - compiler.hooks.emit.tap("AddFilesPlugin", compilation => { + compiler.hooks.afterCompile.tap("AddFilesPlugin", compilation => { const files = globby .sync(["content/**/*.*", "!content/**/*.emu"], {}) .map(unpackFile); From fb9d3e5ed6619711b2b9c48f033cd0d02801e621 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 13 Apr 2020 15:03:37 -0700 Subject: [PATCH 13/73] Add context dependency to content folder. --- generator/src/add-files-plugin.js | 1 + 1 file changed, 1 insertion(+) diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index f4b993fc..b75fe59c 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -30,6 +30,7 @@ module.exports = class AddFilesPlugin { .sync(["content/**/*.*", "!content/**/*.emu"], {}) .map(unpackFile); + compilation.contextDependencies.add(path.resolve('./content')); files.forEach(file => { // Couldn't find this documented in the webpack docs, // but I found the example code for it here: From b614a4cd26720a8beb8e7358e4db772ed3e8787c Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 13 Apr 2020 15:12:16 -0700 Subject: [PATCH 14/73] Run prettier. --- generator/src/develop.js | 16 ++++++++-------- index.js | 26 +++++++++++++------------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/generator/src/develop.js b/generator/src/develop.js index f2a2bd3d..da2d95c4 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -44,14 +44,14 @@ function start({ routes, debug, customPort, manifestConfig, routesWithRequests, log: console.log, path: '/__webpack_hmr' })) - app.use("*", function(req, res, next) { + app.use("*", function (req, res, next) { // don't know why this works, but it does // see: https://github.com/jantimon/html-webpack-plugin/issues/145#issuecomment-170554832 const filename = path.join(compiler.outputPath, "index.html"); const route = req.originalUrl.replace(/(\w)\/$/, "$1").replace(/^\//, ""); const isPage = routes.includes(route); - compiler.outputFileSystem.readFile(filename, function(err, result) { + compiler.outputFileSystem.readFile(filename, function (err, result) { const contents = isPage ? replaceBaseAndLinks(result.toString(), route) : result @@ -249,7 +249,7 @@ function webpackOptions( // process.cwd prefixed node_modules above). path.resolve(path.dirname(require.resolve('webpack')), '../../'), - ], + ], extensions: [".js", ".elm", ".scss", ".png", ".html"] }, module: { @@ -356,7 +356,7 @@ function webpackOptions( entry: [ require.resolve("webpack-hot-middleware/client"), "./index.js", - ], + ], plugins: [ new webpack.NamedModulesPlugin(), // Prevents compilation errors causing the hot loader to lose state @@ -395,10 +395,10 @@ function pathToRoot(cleanedRoute) { return cleanedRoute === "" ? cleanedRoute : cleanedRoute - .split("/") - .map(_ => "..") - .join("/") - .replace(/\.$/, "./") + .split("/") + .map(_ => "..") + .join("/") + .replace(/\.$/, "./") } diff --git a/index.js b/index.js index 1ef6c4cb..1993cf21 100644 --- a/index.js +++ b/index.js @@ -11,9 +11,9 @@ module.exports = function pagesInit( prefetchedPages = [window.location.pathname]; initialLocationHash = document.location.hash.replace(/^#/, ""); - return new Promise(function(resolve, reject) { + return new Promise(function (resolve, reject) { document.addEventListener("DOMContentLoaded", _ => { - new MutationObserver(function() { + new MutationObserver(function () { elmViewRendered = true; if (headTagsAdded) { document.dispatchEvent(new Event("prerender-trigger")); @@ -32,7 +32,7 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) const isPrerendering = navigator.userAgent.indexOf("Headless") >= 0 const path = window.location.pathname.replace(/(\w)$/, "$1/") - return httpGet(`${window.location.origin}${path}content.json`).then(function(/** @type JSON */ contentJson) { + return httpGet(`${window.location.origin}${path}content.json`).then(function (/** @type JSON */ contentJson) { const app = mainElmModule.init({ flags: { @@ -62,10 +62,10 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) fromElm.head.forEach(headTag => { appendTag(headTag); }); - headTagsAdded = true; - if (elmViewRendered) { - document.dispatchEvent(new Event("prerender-trigger")); - } + headTagsAdded = true; + if (elmViewRendered) { + document.dispatchEvent(new Event("prerender-trigger")); + } } else { setupLinkPrefetching(); } @@ -73,7 +73,7 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) if (module.hot) { - module.hot.addStatusHandler(function(status) { + module.hot.addStatusHandler(function (status) { if (status === 'idle') { console.log('Reloaded!!!!!!!!!!', status) app.ports.fromJsPort.send({}); @@ -142,7 +142,7 @@ function setupLinkPrefetchingHelp( const links = document.querySelectorAll("a"); links.forEach(link => { // console.log(link.pathname); - link.addEventListener("mouseenter", function(event) { + link.addEventListener("mouseenter", function (event) { if ( event && event.target && @@ -186,11 +186,11 @@ function appendTag(/** @type {HeadTag} */ tagDetails) { } function httpGet(/** @type string */ theUrl) { - return new Promise(function(resolve, reject) { + return new Promise(function (resolve, reject) { const xmlHttp = new XMLHttpRequest(); - xmlHttp.onreadystatechange = function() { - if (xmlHttp.readyState == 4 && xmlHttp.status == 200) - resolve(JSON.parse(xmlHttp.responseText)); + xmlHttp.onreadystatechange = function () { + if (xmlHttp.readyState == 4 && xmlHttp.status == 200) + resolve(JSON.parse(xmlHttp.responseText)); } xmlHttp.onerror = reject; xmlHttp.open("GET", theUrl, true); // true for asynchronous From 27ef7c2491602a6367a5b59911a706ffec97772c Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Tue, 14 Apr 2020 21:58:16 -0700 Subject: [PATCH 15/73] Got hot content reloading working with a different hook. --- generator/src/add-files-plugin.js | 15 +++++++++------ index.js | 14 +++++++++++++- 2 files changed, 22 insertions(+), 7 deletions(-) diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index b75fe59c..b5c66075 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -2,6 +2,7 @@ const path = require("path"); const fs = require("fs"); const globby = require("globby"); const parseFrontmatter = require("./frontmatter.js"); +const webpack = require('webpack') function unpackFile(filePath) { const { content, data } = parseFrontmatter( @@ -15,7 +16,8 @@ function unpackFile(filePath) { return { baseRoute, - content + content, + filePath }; } @@ -24,13 +26,13 @@ module.exports = class AddFilesPlugin { this.pagesWithRequests = data; this.filesToGenerate = filesToGenerate; } - apply(compiler) { - compiler.hooks.afterCompile.tap("AddFilesPlugin", compilation => { + apply(/** @type {webpack.Compiler} */ compiler) { + compiler.hooks.afterCompile.tapAsync("AddFilesPlugin", (compilation, callback) => { const files = globby .sync(["content/**/*.*", "!content/**/*.emu"], {}) .map(unpackFile); - compilation.contextDependencies.add(path.resolve('./content')); + compilation.contextDependencies.add(path.resolve(process.cwd(), './content')); files.forEach(file => { // Couldn't find this documented in the webpack docs, // but I found the example code for it here: @@ -40,7 +42,8 @@ module.exports = class AddFilesPlugin { const staticRequests = this.pagesWithRequests[route]; const filename = path.join(file.baseRoute, "content.json"); - compilation.fileDependencies.add(filename); + // compilation.fileDependencies.add(filename); + compilation.fileDependencies.add(path.resolve(process.cwd(), file.filePath)); const rawContents = JSON.stringify({ body: file.content, staticData: staticRequests || {} @@ -62,7 +65,7 @@ module.exports = class AddFilesPlugin { }; }); - + callback() }); } }; diff --git a/index.js b/index.js index 1993cf21..2a19f9a2 100644 --- a/index.js +++ b/index.js @@ -72,11 +72,23 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) }); + + + // found this trick from https://github.com/roots/sage/issues/1826 + // module.hot.addStatusHandler(function (status) { /* handle status */}) works, but after several saves + // it stops working for some reason. So this is a workaround to work even when those updates stop coming through + const reporter = window.__webpack_hot_middleware_reporter__ + const success = reporter.success + reporter.success = function () { + console.log('SUCCESS'); + app.ports.fromJsPort.send({}); + success() + } + if (module.hot) { module.hot.addStatusHandler(function (status) { if (status === 'idle') { console.log('Reloaded!!!!!!!!!!', status) - app.ports.fromJsPort.send({}); } }); } From 7c1615936824f0cef53ff333698575cad7e00840 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Tue, 14 Apr 2020 21:58:26 -0700 Subject: [PATCH 16/73] Update webpack version. --- package-lock.json | 283 ++++++++++++++++++++++++++-------------------- package.json | 13 ++- 2 files changed, 170 insertions(+), 126 deletions(-) diff --git a/package-lock.json b/package-lock.json index 35bfe744..a4b817fe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1391,160 +1391,159 @@ } }, "@webassemblyjs/ast": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz", - "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", "requires": { - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5" + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" } }, "@webassemblyjs/floating-point-hex-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz", - "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" }, "@webassemblyjs/helper-api-error": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz", - "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" }, "@webassemblyjs/helper-buffer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz", - "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" }, "@webassemblyjs/helper-code-frame": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz", - "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", "requires": { - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/helper-fsm": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz", - "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" }, "@webassemblyjs/helper-module-context": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz", - "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "mamacro": "^0.0.3" + "@webassemblyjs/ast": "1.9.0" } }, "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz", - "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" }, "@webassemblyjs/helper-wasm-section": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz", - "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" } }, "@webassemblyjs/ieee754": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz", - "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", "requires": { "@xtuc/ieee754": "^1.2.0" } }, "@webassemblyjs/leb128": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz", - "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", "requires": { "@xtuc/long": "4.2.2" } }, "@webassemblyjs/utf8": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz", - "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==" + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" }, "@webassemblyjs/wasm-edit": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz", - "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/helper-wasm-section": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-opt": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", - "@webassemblyjs/wast-printer": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" } }, "@webassemblyjs/wasm-gen": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz", - "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wasm-opt": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz", - "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-buffer": "1.8.5", - "@webassemblyjs/wasm-gen": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" } }, "@webassemblyjs/wasm-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz", - "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-wasm-bytecode": "1.8.5", - "@webassemblyjs/ieee754": "1.8.5", - "@webassemblyjs/leb128": "1.8.5", - "@webassemblyjs/utf8": "1.8.5" + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" } }, "@webassemblyjs/wast-parser": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz", - "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/floating-point-hex-parser": "1.8.5", - "@webassemblyjs/helper-api-error": "1.8.5", - "@webassemblyjs/helper-code-frame": "1.8.5", - "@webassemblyjs/helper-fsm": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", "@xtuc/long": "4.2.2" } }, "@webassemblyjs/wast-printer": { - "version": "1.8.5", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz", - "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/wast-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", "@xtuc/long": "4.2.2" } }, @@ -4297,9 +4296,9 @@ "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" }, "events": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz", - "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz", + "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==" }, "evp_bytestokey": { "version": "1.0.3", @@ -7231,11 +7230,6 @@ "semver": "^5.6.0" } }, - "mamacro": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz", - "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==" - }, "map-cache": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", @@ -8702,6 +8696,42 @@ "unpipe": "1.0.0" } }, + "raw-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.0.tgz", + "integrity": "sha512-iINUOYvl1cGEmfoaLjnZXt4bKfT2LJnZZib5N/LLyAphC+Dd11vNP9CNVb38j+SAJpFI1uo8j9frmih53ASy7Q==", + "requires": { + "loader-utils": "^1.2.3", + "schema-utils": "^2.5.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", + "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "fast-deep-equal": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" + }, + "schema-utils": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", + "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", + "requires": { + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" + } + } + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -10375,9 +10405,9 @@ } }, "tslib": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", - "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==" + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", + "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" }, "tty-browserify": { "version": "0.0.0", @@ -10737,24 +10767,24 @@ "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" }, "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.1.tgz", + "integrity": "sha512-+IF9hfUFOrYOOaKyfaI7h7dquUIOgyEMoQMLA7OP5FxegKA2+XdXThAZ9TU2kucfhDH7rfMHs1oPYziVGWRnZA==", "requires": { - "chokidar": "^2.0.2", + "chokidar": "^2.1.8", "graceful-fs": "^4.1.2", "neo-async": "^2.5.0" } }, "webpack": { - "version": "4.41.5", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.5.tgz", - "integrity": "sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw==", + "version": "4.42.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.42.1.tgz", + "integrity": "sha512-SGfYMigqEfdGchGhFFJ9KyRpQKnipvEvjc1TwrXEPCM6H5Wywu10ka8o3KGrMzSMxMQKt8aCHUFh5DaQ9UmyRg==", "requires": { - "@webassemblyjs/ast": "1.8.5", - "@webassemblyjs/helper-module-context": "1.8.5", - "@webassemblyjs/wasm-edit": "1.8.5", - "@webassemblyjs/wasm-parser": "1.8.5", + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", "acorn": "^6.2.1", "ajv": "^6.10.2", "ajv-keywords": "^3.4.1", @@ -10766,7 +10796,7 @@ "loader-utils": "^1.2.3", "memory-fs": "^0.4.1", "micromatch": "^3.1.10", - "mkdirp": "^0.5.1", + "mkdirp": "^0.5.3", "neo-async": "^2.6.1", "node-libs-browser": "^2.2.1", "schema-utils": "^1.0.0", @@ -10777,9 +10807,22 @@ }, "dependencies": { "acorn": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", - "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==" + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", + "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } } } }, diff --git a/package.json b/package.json index d999da53..94ca376e 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "chokidar": "^2.1.5", "closure-webpack-plugin": "^2.0.1", "copy-webpack-plugin": "^5.0.4", + "cross-spawn": "6.0.5", "css-loader": "^3.2.0", "elm": "^0.19.1-3", "elm-hot-webpack-loader": "^1.1.2", @@ -32,27 +33,27 @@ "express": "^4.17.1", "favicons-webpack-plugin": "^3.0.0", "file-loader": "^4.2.0", + "find-elm-dependencies": "2.0.2", "globby": "^10.0.1", "google-closure-compiler": "^20190909.0.0", "gray-matter": "^4.0.2", "html-webpack-plugin": "^4.0.0-beta.11", "imagemin-mozjpeg": "^8.0.0", "imagemin-webpack-plugin": "^2.4.2", + "lodash": "4.17.15", "node-sass": "^4.12.0", "prerender-spa-plugin": "^3.4.0", + "raw-loader": "^4.0.0", "sass-loader": "^8.0.0", "script-ext-html-webpack-plugin": "^2.1.4", "style-loader": "^1.0.0", - "webpack": "^4.41.5", + "temp": "^0.9.0", + "webpack": "4.42.1", "webpack-dev-middleware": "^3.7.0", "webpack-hot-middleware": "^2.25.0", "webpack-merge": "^4.2.1", "workbox-webpack-plugin": "^4.3.1", - "xhr2": "^0.2.0", - "cross-spawn": "6.0.5", - "find-elm-dependencies": "2.0.2", - "lodash": "4.17.15", - "temp": "^0.9.0" + "xhr2": "^0.2.0" }, "devDependencies": { "@types/chokidar": "^2.1.3", From f72a4588c7be8f3b5687531cedbdbbdf916bd477 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Thu, 16 Apr 2020 21:31:21 -0700 Subject: [PATCH 17/73] Add an optimized decoder wrapper module. --- elm.json | 1 + examples/docs/src/Main.elm | 2 +- examples/docs/src/Showcase.elm | 2 +- src/Internal/OptimizedDecoder.elm | 18 + src/OptimizedDecoder.elm | 789 ++++++++++++++++++++++++++++++ src/Pages/StaticHttp.elm | 18 +- tests/StaticHttpRequestsTests.elm | 8 +- tests/StaticHttpUnitTests.elm | 3 +- 8 files changed, 829 insertions(+), 12 deletions(-) create mode 100644 src/Internal/OptimizedDecoder.elm create mode 100644 src/OptimizedDecoder.elm diff --git a/elm.json b/elm.json index f90791c0..c1150ce6 100644 --- a/elm.json +++ b/elm.json @@ -7,6 +7,7 @@ "exposed-modules": [ "Head", "Head.Seo", + "OptimizedDecoder", "Pages.Document", "Pages.ImagePath", "Pages.PagePath", diff --git a/examples/docs/src/Main.elm b/examples/docs/src/Main.elm index acfdd93d..d69ae4c6 100644 --- a/examples/docs/src/Main.elm +++ b/examples/docs/src/Main.elm @@ -19,10 +19,10 @@ import Html exposing (Html) import Html.Attributes as Attr import Index import Json.Decode as Decode exposing (Decoder) -import Json.Decode.Exploration as D import MarkdownRenderer import Metadata exposing (Metadata) import MySitemap +import OptimizedDecoder as D import Pages exposing (images, pages) import Pages.Directory as Directory exposing (Directory) import Pages.Document diff --git a/examples/docs/src/Showcase.elm b/examples/docs/src/Showcase.elm index c9d266f2..ef56c545 100644 --- a/examples/docs/src/Showcase.elm +++ b/examples/docs/src/Showcase.elm @@ -4,7 +4,7 @@ import Element import Element.Border import Element.Font import FontAwesome -import Json.Decode.Exploration as Decode +import OptimizedDecoder as Decode import Pages.Secrets as Secrets import Pages.StaticHttp as StaticHttp import Palette diff --git a/src/Internal/OptimizedDecoder.elm b/src/Internal/OptimizedDecoder.elm new file mode 100644 index 00000000..2b25dc4f --- /dev/null +++ b/src/Internal/OptimizedDecoder.elm @@ -0,0 +1,18 @@ +module Internal.OptimizedDecoder exposing (OptimizedDecoder(..), jd, jde) + +import Json.Decode +import Json.Decode.Exploration + + +type OptimizedDecoder a + = OptimizedDecoder (Json.Decode.Decoder a) (Json.Decode.Exploration.Decoder a) + + +jd : OptimizedDecoder a -> Json.Decode.Decoder a +jd (OptimizedDecoder jd_ jde_) = + jd_ + + +jde : OptimizedDecoder a -> Json.Decode.Exploration.Decoder a +jde (OptimizedDecoder jd_ jde_) = + jde_ diff --git a/src/OptimizedDecoder.elm b/src/OptimizedDecoder.elm new file mode 100644 index 00000000..c42bc655 --- /dev/null +++ b/src/OptimizedDecoder.elm @@ -0,0 +1,789 @@ +module OptimizedDecoder exposing + ( decodeString, decodeValue + , Decoder, string, bool, int, float + , nullable, list, array, dict, keyValuePairs + , field, at, index + , maybe, oneOf + , lazy, value, null, succeed, fail, andThen + , map, map2, map3, map4, map5, map6, map7, map8, andMap + , decoder + ) + +{-| This package presents a somewhat experimental approach to JSON decoding. Its +API looks very much like the core `Json.Decode` API. The major differences are +the final `decodeString` and `decodeValue` functions, which return a +`DecodeResult a`. + +Decoding with this library can result in one of 4 possible outcomes: + + - The input wasn't valid JSON + - One or more errors occurred + - Decoding succeeded but produced warnings + - Decoding succeeded without warnings + +Both the `Errors` and `Warnings` types are (mostly) machine readable: they are +implemented as a recursive data structure that points to the location of the +error in the input json, producing information about what went wrong (i.e. "what +was the expected type, and what did the actual value look like"). + +Further, this library also adds a few extra `Decoder`s that help with making +assertions about the structure of the JSON while decoding. + +For convenience, this library also includes a `Json.Decode.Exploration.Pipeline` +module which is largely a copy of [`NoRedInk/elm-decode-pipeline`][edp]. + +[edp]: http://package.elm-lang.org/packages/NoRedInk/elm-decode-pipeline/latest + + +# Running a `Decoder` + +Runing a `Decoder` works largely the same way as it does in the familiar core +library. There is one serious caveat, however: + +> This library does **not** allowing decoding non-serializable JS values. + +This means that trying to use this library to decode a `Value` which contains +non-serializable information like `function`s will not work. It will, however, +result in a `BadJson` result. + +Trying to use this library on cyclic values (like HTML events) is quite likely +to blow up completely. Don't try this, except maybe at home. + +@docs decodeString, decodeValue, strict, DecodeResult, Value + + +## Dealing with warnings and errors + +@docs Error, errorToString + + +# Primitives + +@docs Decoder, string, bool, int, float + + +# Data Structures + +@docs nullable, list, array, dict, keyValuePairs + + +# Object Primitives + +@docs field, at, index + + +# Inconsistent Structure + +@docs maybe, oneOf + + +# Fancy Decoding + +@docs lazy, value, null, succeed, fail, andThen + + +# Mapping + +**Note:** If you run out of map functions, take a look at [the pipeline module][pipe] +which makes it easier to handle large objects. + +[pipe]: http://package.elm-lang.org/packages/zwilias/json-decode-exploration/latest/Json-Decode-Exploration-Pipeline + +@docs map, map2, map3, map4, map5, map6, map7, map8, andMap + + +# Directly Running Decoders + +Usually you'll be passing your decoders to + +@docs decodeString, decodeValue, decoder + +-} + +import Array exposing (Array) +import Dict exposing (Dict) +import Internal.OptimizedDecoder exposing (OptimizedDecoder(..)) +import Json.Decode as JD +import Json.Decode.Exploration as JDE + + +type alias Decoder a = + OptimizedDecoder a + + +{-| A simple type alias for `Json.Decode.Value`. +-} +type alias Value = + JD.Value + + +{-| A simple type alias for `Json.Decode.Error`. +-} +type alias Error = + JD.Error + + +{-| A simple wrapper for `Json.Decode.errorToString`. +-} +errorToString : JD.Error -> String +errorToString = + JD.errorToString + + +{-| Usually you'll want to directly pass your `OptimizedDecoder` to `StaticHttp` or other `elm-pages` APIs. +But if you want to re-use your decoder somewhere else, it may be useful to turn it into a plain `elm/json` decoder. +-} +decoder : Decoder a -> JD.Decoder a +decoder (OptimizedDecoder jd jde) = + jd + + +{-| A simple wrapper for `Json.Decode.errorToString`. + +This will directly call the raw `elm/json` decoder that is stored under the hood. + +-} +decodeString : Decoder a -> String -> Result Error a +decodeString (OptimizedDecoder jd jde) = + JD.decodeString jd + + +{-| A simple wrapper for `Json.Decode.errorToString`. + +This will directly call the raw `elm/json` decoder that is stored under the hood. + +-} +decodeValue : Decoder a -> Value -> Result Error a +decodeValue (OptimizedDecoder jd jde) = + JD.decodeValue jd + + +{-| A decoder that will ignore the actual JSON and succeed with the provided +value. Note that this may still fail when dealing with an invalid JSON string. + +If a value in the JSON ends up being ignored because of this, this will cause a +warning. + + import List.Nonempty exposing (Nonempty(..)) + import Json.Decode.Exploration.Located exposing (Located(..)) + import Json.Encode as Encode + + + """ null """ + |> decodeString (value |> andThen (\_ -> succeed "hello world")) + --> Success "hello world" + + + """ null """ + |> decodeString (succeed "hello world") + --> WithWarnings + --> (Nonempty (Here <| UnusedValue Encode.null) []) + --> "hello world" + + + """ foo """ + |> decodeString (succeed "hello world") + --> BadJson + +-} +succeed : a -> Decoder a +succeed a = + OptimizedDecoder (JD.succeed a) (JDE.succeed a) + + +{-| Ignore the json and fail with a provided message. + + import List.Nonempty exposing (Nonempty(..)) + import Json.Decode.Exploration.Located exposing (Located(..)) + import Json.Encode as Encode + + """ "hello" """ + |> decodeString (fail "failure") + --> Errors (Nonempty (Here <| Failure "failure" (Just <| Encode.string "hello")) []) + +-} +fail : String -> Decoder a +fail message = + OptimizedDecoder (JD.fail message) (JDE.fail message) + + +{-| Decode a string. + + import List.Nonempty exposing (Nonempty(..)) + import Json.Decode.Exploration.Located exposing (Located(..)) + import Json.Encode as Encode + + + """ "hello world" """ + |> decodeString string + --> Success "hello world" + + + """ 123 """ + |> decodeString string + --> Errors (Nonempty (Here <| Expected TString (Encode.int 123)) []) + +-} +string : Decoder String +string = + OptimizedDecoder JD.string JDE.string + + +{-| Extract a piece without actually decoding it. + +If a structure is decoded as a `value`, everything _in_ the structure will be +considered as having been used and will not appear in `UnusedValue` warnings. + + import Json.Encode as Encode + + + """ [ 123, "world" ] """ + |> decodeString value + --> Success (Encode.list identity [ Encode.int 123, Encode.string "world" ]) + +-} +value : Decoder Value +value = + OptimizedDecoder JD.value JDE.value + + +{-| Decode a number into a `Float`. + + import List.Nonempty exposing (Nonempty(..)) + import Json.Decode.Exploration.Located exposing (Located(..)) + import Json.Encode as Encode + + + """ 12.34 """ + |> decodeString float + --> Success 12.34 + + + """ 12 """ + |> decodeString float + --> Success 12 + + + """ null """ + |> decodeString float + --> Errors (Nonempty (Here <| Expected TNumber Encode.null) []) + +-} +float : Decoder Float +float = + OptimizedDecoder JD.float JDE.float + + +{-| Decode a number into an `Int`. + + import List.Nonempty exposing (Nonempty(..)) + import Json.Decode.Exploration.Located exposing (Located(..)) + import Json.Encode as Encode + + + """ 123 """ + |> decodeString int + --> Success 123 + + + """ 0.1 """ + |> decodeString int + --> Errors <| + --> Nonempty + --> (Here <| Expected TInt (Encode.float 0.1)) + --> [] + +-} +int : Decoder Int +int = + OptimizedDecoder JD.int JDE.int + + +{-| Decode a boolean value. + + """ [ true, false ] """ + |> decodeString (list bool) + --> Success [ True, False ] + +-} +bool : Decoder Bool +bool = + OptimizedDecoder JD.bool JDE.bool + + +{-| Decode a `null` and succeed with some value. + + """ null """ + |> decodeString (null "it was null") + --> Success "it was null" + +Note that `undefined` and `null` are not the same thing. This cannot be used to +verify that a field is _missing_, only that it is explicitly set to `null`. + + """ { "foo": null } """ + |> decodeString (field "foo" (null ())) + --> Success () + + + import List.Nonempty exposing (Nonempty(..)) + import Json.Decode.Exploration.Located exposing (Located(..)) + import Json.Encode as Encode + + + """ { } """ + |> decodeString (field "foo" (null ())) + --> Errors <| + --> Nonempty + --> (Here <| Expected (TObjectField "foo") (Encode.object [])) + --> [] + +-} +null : a -> Decoder a +null val = + OptimizedDecoder (JD.null val) (JDE.null val) + + +{-| Decode a list of values, decoding each entry with the provided decoder. + + import List.Nonempty exposing (Nonempty(..)) + import Json.Decode.Exploration.Located exposing (Located(..)) + import Json.Encode as Encode + + + """ [ "foo", "bar" ] """ + |> decodeString (list string) + --> Success [ "foo", "bar" ] + + + """ [ "foo", null ] """ + |> decodeString (list string) + --> Errors <| + --> Nonempty + --> (AtIndex 1 <| + --> Nonempty (Here <| Expected TString Encode.null) [] + --> ) + --> [] + +-} +list : Decoder a -> Decoder (List a) +list (OptimizedDecoder jd jde) = + OptimizedDecoder (JD.list jd) (JDE.list jde) + + +{-| _Convenience function._ Decode a JSON array into an Elm `Array`. + + import Array + + """ [ 1, 2, 3 ] """ + |> decodeString (array int) + --> Success <| Array.fromList [ 1, 2, 3 ] + +-} +array : Decoder a -> Decoder (Array a) +array (OptimizedDecoder jd jde) = + OptimizedDecoder (JD.array jd) (JDE.array jde) + + +{-| _Convenience function._ Decode a JSON object into an Elm `Dict String`. + + import Dict + + + """ { "foo": "bar", "bar": "hi there" } """ + |> decodeString (dict string) + --> Success <| Dict.fromList + --> [ ( "bar", "hi there" ) + --> , ( "foo", "bar" ) + --> ] + +-} +dict : Decoder v -> Decoder (Dict String v) +dict (OptimizedDecoder jd jde) = + OptimizedDecoder (JD.dict jd) (JDE.dict jde) + + +{-| Decode a specific index using a specified `Decoder`. + + import List.Nonempty exposing (Nonempty(..)) + import Json.Decode.Exploration.Located exposing (Located(..)) + import Json.Encode as Encode + + + """ [ "hello", 123 ] """ + |> decodeString (map2 Tuple.pair (index 0 string) (index 1 int)) + --> Success ( "hello", 123 ) + + + """ [ "hello", "there" ] """ + |> decodeString (index 1 string) + --> WithWarnings (Nonempty (AtIndex 0 (Nonempty (Here (UnusedValue (Encode.string "hello"))) [])) []) + --> "there" + +-} +index : Int -> Decoder a -> Decoder a +index idx (OptimizedDecoder jd jde) = + OptimizedDecoder (JD.index idx jd) (JDE.index idx jde) + + +{-| Decode a JSON object into a list of key-value pairs. The decoder you provide +will be used to decode the values. + + """ { "foo": "bar", "hello": "world" } """ + |> decodeString (keyValuePairs string) + --> Success [ ( "foo", "bar" ), ( "hello", "world" ) ] + +-} +keyValuePairs : Decoder a -> Decoder (List ( String, a )) +keyValuePairs (OptimizedDecoder jd jde) = + OptimizedDecoder (JD.keyValuePairs jd) (JDE.keyValuePairs jde) + + +{-| Decode the content of a field using a provided decoder. + + import List.Nonempty as Nonempty + import Json.Decode.Exploration.Located exposing (Located(..)) + import Json.Encode as Encode + + """ { "foo": "bar" } """ + |> decodeString (field "foo" string) + --> Success "bar" + + + """ [ { "foo": "bar" }, { "foo": "baz", "hello": "world" } ] """ + |> decodeString (list (field "foo" string)) + --> WithWarnings expectedWarnings [ "bar", "baz" ] + + + expectedWarnings : Warnings + expectedWarnings = + UnusedField "hello" + |> Here + |> Nonempty.fromElement + |> AtIndex 1 + |> Nonempty.fromElement + +-} +field : String -> Decoder a -> Decoder a +field fieldName (OptimizedDecoder jd jde) = + OptimizedDecoder (JD.field fieldName jd) (JDE.field fieldName jde) + + +{-| Decodes a value at a certain path, using a provided decoder. Essentially, +writing `at [ "a", "b", "c" ] string` is sugar over writing +`field "a" (field "b" (field "c" string))`}. + + """ { "a": { "b": { "c": "hi there" } } } """ + |> decodeString (at [ "a", "b", "c" ] string) + --> Success "hi there" + +-} +at : List String -> Decoder a -> Decoder a +at fields (OptimizedDecoder jd jde) = + OptimizedDecoder (JD.at fields jd) (JDE.at fields jde) + + + +-- Choosing + + +{-| Tries a bunch of decoders. The first one to not fail will be the one used. + +If all fail, the errors are collected into a `BadOneOf`. + + import List.Nonempty as Nonempty + import Json.Decode.Exploration.Located exposing (Located(..)) + import Json.Encode as Encode + + """ [ 12, "whatever" ] """ + |> decodeString (list <| oneOf [ map String.fromInt int, string ]) + --> Success [ "12", "whatever" ] + + + """ null """ + |> decodeString (oneOf [ string, map String.fromInt int ]) + --> Errors <| Nonempty.fromElement <| Here <| BadOneOf + --> [ Nonempty.fromElement <| Here <| Expected TString Encode.null + --> , Nonempty.fromElement <| Here <| Expected TInt Encode.null + --> ] + +-} +oneOf : List (Decoder a) -> Decoder a +oneOf decoders = + let + jds = + List.map + (\(OptimizedDecoder jd jde) -> + jd + ) + decoders + + jdes = + List.map + (\(OptimizedDecoder jd jde) -> + jde + ) + decoders + in + OptimizedDecoder (JD.oneOf jds) (JDE.oneOf jdes) + + +{-| Decodes successfully and wraps with a `Just`, handling failure by succeeding +with `Nothing`. + + import List.Nonempty as Nonempty + import Json.Decode.Exploration.Located exposing (Located(..)) + import Json.Encode as Encode + + + """ [ "foo", 12 ] """ + |> decodeString (list <| maybe string) + --> WithWarnings expectedWarnings [ Just "foo", Nothing ] + + + expectedWarnings : Warnings + expectedWarnings = + UnusedValue (Encode.int 12) + |> Here + |> Nonempty.fromElement + |> AtIndex 1 + |> Nonempty.fromElement + +-} +maybe : Decoder a -> Decoder (Maybe a) +maybe (OptimizedDecoder jd jde) = + OptimizedDecoder (JD.maybe jd) (JDE.maybe jde) + + +{-| Decodes successfully and wraps with a `Just`. If the values is `null` +succeeds with `Nothing`. + + """ [ { "foo": "bar" }, { "foo": null } ] """ + |> decodeString (list <| field "foo" <| nullable string) + --> Success [ Just "bar", Nothing ] + +-} +nullable : Decoder a -> Decoder (Maybe a) +nullable (OptimizedDecoder jd jde) = + OptimizedDecoder (JD.nullable jd) (JDE.nullable jde) + + + +-- + + +{-| Required when using (mutually) recursive decoders. +-} +lazy : (() -> Decoder a) -> Decoder a +lazy toDecoder = + Debug.todo "" + + + +--Decoder <| +-- \json -> +-- let +-- (Decoder decoderFn) = +-- toDecoder () +-- in +-- decoderFn json +-- Extras + + +{-| Useful for checking a value in the JSON matches the value you expect it to +have. If it does, succeeds with the second decoder. If it doesn't it fails. + +This can be used to decode union types: + + type Pet = Cat | Dog | Rabbit + + petDecoder : Decoder Pet + petDecoder = + oneOf + [ check string "cat" <| succeed Cat + , check string "dog" <| succeed Dog + , check string "rabbit" <| succeed Rabbit + ] + + """ [ "dog", "rabbit", "cat" ] """ + |> decodeString (list petDecoder) + --> Success [ Dog, Rabbit, Cat ] + +-} +check : Decoder a -> a -> Decoder b -> Decoder b +check checkDecoder expectedVal actualDecoder = + checkDecoder + |> andThen + (\actual -> + if actual == expectedVal then + actualDecoder + + else + fail "Verification failed" + ) + + + +-- Mapping and chaining + + +{-| Useful for transforming decoders. + + """ "foo" """ + |> decodeString (map String.toUpper string) + --> Success "FOO" + +-} +map : (a -> b) -> Decoder a -> Decoder b +map f (OptimizedDecoder jd jde) = + OptimizedDecoder (JD.map f jd) (JDE.map f jde) + + +{-| Chain decoders where one decoder depends on the value of another decoder. +-} +andThen : (a -> Decoder b) -> Decoder a -> Decoder b +andThen toDecoderB (OptimizedDecoder jd jde) = + OptimizedDecoder + (JD.andThen (toDecoderB >> Internal.OptimizedDecoder.jd) jd) + (JDE.andThen (toDecoderB >> Internal.OptimizedDecoder.jde) jde) + + +{-| Combine 2 decoders. +-} +map2 : (a -> b -> c) -> Decoder a -> Decoder b -> Decoder c +map2 f (OptimizedDecoder jdA jdeA) (OptimizedDecoder jdB jdeB) = + OptimizedDecoder + (JD.map2 f jdA jdB) + (JDE.map2 f jdeA jdeB) + + +{-| Decode an argument and provide it to a function in a decoder. + + decoder : Decoder String + decoder = + succeed (String.repeat) + |> andMap (field "count" int) + |> andMap (field "val" string) + + + """ { "val": "hi", "count": 3 } """ + |> decodeString decoder + --> Success "hihihi" + +-} +andMap : Decoder a -> Decoder (a -> b) -> Decoder b +andMap = + map2 (|>) + + +{-| Combine 3 decoders. +-} +map3 : + (a -> b -> c -> d) + -> Decoder a + -> Decoder b + -> Decoder c + -> Decoder d +map3 f decoderA decoderB decoderC = + map f decoderA + |> andMap decoderB + |> andMap decoderC + + +{-| Combine 4 decoders. +-} +map4 : + (a -> b -> c -> d -> e) + -> Decoder a + -> Decoder b + -> Decoder c + -> Decoder d + -> Decoder e +map4 f decoderA decoderB decoderC decoderD = + map f decoderA + |> andMap decoderB + |> andMap decoderC + |> andMap decoderD + + +{-| Combine 5 decoders. +-} +map5 : + (a -> b -> c -> d -> e -> f) + -> Decoder a + -> Decoder b + -> Decoder c + -> Decoder d + -> Decoder e + -> Decoder f +map5 f decoderA decoderB decoderC decoderD decoderE = + map f decoderA + |> andMap decoderB + |> andMap decoderC + |> andMap decoderD + |> andMap decoderE + + +{-| Combine 6 decoders. +-} +map6 : + (a -> b -> c -> d -> e -> f -> g) + -> Decoder a + -> Decoder b + -> Decoder c + -> Decoder d + -> Decoder e + -> Decoder f + -> Decoder g +map6 f decoderA decoderB decoderC decoderD decoderE decoderF = + map f decoderA + |> andMap decoderB + |> andMap decoderC + |> andMap decoderD + |> andMap decoderE + |> andMap decoderF + + +{-| Combine 7 decoders. +-} +map7 : + (a -> b -> c -> d -> e -> f -> g -> h) + -> Decoder a + -> Decoder b + -> Decoder c + -> Decoder d + -> Decoder e + -> Decoder f + -> Decoder g + -> Decoder h +map7 f decoderA decoderB decoderC decoderD decoderE decoderF decoderG = + map f decoderA + |> andMap decoderB + |> andMap decoderC + |> andMap decoderD + |> andMap decoderE + |> andMap decoderF + |> andMap decoderG + + +{-| Combine 8 decoders. +-} +map8 : + (a -> b -> c -> d -> e -> f -> g -> h -> i) + -> Decoder a + -> Decoder b + -> Decoder c + -> Decoder d + -> Decoder e + -> Decoder f + -> Decoder g + -> Decoder h + -> Decoder i +map8 f decoderA decoderB decoderC decoderD decoderE decoderF decoderG decoderH = + map f decoderA + |> andMap decoderB + |> andMap decoderC + |> andMap decoderD + |> andMap decoderE + |> andMap decoderF + |> andMap decoderG + |> andMap decoderH diff --git a/src/Pages/StaticHttp.elm b/src/Pages/StaticHttp.elm index a3634257..8b1ca2c0 100644 --- a/src/Pages/StaticHttp.elm +++ b/src/Pages/StaticHttp.elm @@ -76,9 +76,11 @@ your decoders. This can significantly reduce download sizes for your StaticHttp import Dict exposing (Dict) import Dict.Extra +import Internal.OptimizedDecoder import Json.Decode -import Json.Decode.Exploration as Decode exposing (Decoder) +import Json.Decode.Exploration import Json.Encode as Encode +import OptimizedDecoder as Decode exposing (Decoder) import Pages.Internal.StaticHttpBody as Body import Pages.Secrets import Pages.StaticHttp.Request as HashRequest @@ -597,28 +599,28 @@ unoptimizedRequest requestWithSecrets expect = (\( strippedResponses, rawResponse ) -> let reduced = - Decode.stripString decoder rawResponse + Json.Decode.Exploration.stripString (Internal.OptimizedDecoder.jde decoder) rawResponse |> Result.withDefault "TODO" in rawResponse - |> Decode.decodeString decoder + |> Json.Decode.Exploration.decodeString (decoder |> Internal.OptimizedDecoder.jde) -- |> Result.mapError Json.Decode.Exploration.errorsToString |> (\decodeResult -> case decodeResult of - Decode.BadJson -> + Json.Decode.Exploration.BadJson -> Pages.StaticHttpRequest.DecoderError "Payload sent back invalid JSON" |> Err - Decode.Errors errors -> + Json.Decode.Exploration.Errors errors -> errors - |> Decode.errorsToString + |> Json.Decode.Exploration.errorsToString |> Pages.StaticHttpRequest.DecoderError |> Err - Decode.WithWarnings warnings a -> + Json.Decode.Exploration.WithWarnings warnings a -> -- Pages.StaticHttpRequest.DecoderError "" |> Err Ok a - Decode.Success a -> + Json.Decode.Exploration.Success a -> Ok a ) -- |> Result.mapError Pages.StaticHttpRequest.DecoderError diff --git a/tests/StaticHttpRequestsTests.elm b/tests/StaticHttpRequestsTests.elm index 644dcb3c..960b31de 100644 --- a/tests/StaticHttpRequestsTests.elm +++ b/tests/StaticHttpRequestsTests.elm @@ -5,7 +5,8 @@ import Dict exposing (Dict) import Expect import Html import Json.Decode as JD -import Json.Decode.Exploration as Decode exposing (Decoder) +import Json.Decode.Exploration +import OptimizedDecoder as Decode exposing (Decoder) import Pages.ContentCache as ContentCache import Pages.Document as Document import Pages.Http @@ -637,6 +638,7 @@ start pages = config = { toJsPort = toJsPort + , fromJsPort = fromJsPort , manifest = manifest , generateFiles = \_ -> [] , init = \_ -> ( (), Cmd.none ) @@ -780,6 +782,10 @@ toJsPort foo = Cmd.none +fromJsPort = + Sub.none + + type PathKey = PathKey diff --git a/tests/StaticHttpUnitTests.elm b/tests/StaticHttpUnitTests.elm index b3a14ef1..fb1cf02a 100644 --- a/tests/StaticHttpUnitTests.elm +++ b/tests/StaticHttpUnitTests.elm @@ -2,7 +2,8 @@ module StaticHttpUnitTests exposing (all) import Dict exposing (Dict) import Expect -import Json.Decode.Exploration as Decode +import Json.Decode.Exploration +import OptimizedDecoder as Decode import Pages.StaticHttp as StaticHttp import Pages.StaticHttp.Request as Request import Pages.StaticHttpRequest as StaticHttpRequest From 5730b541a3b9b556314dc52b40047e2838bb4024 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Fri, 17 Apr 2020 20:10:25 -0700 Subject: [PATCH 18/73] Use plain elm/json decoder in Browser mode, and optimizable decoder in Cli mode. --- src/Pages/Internal/ApplicationType.elm | 6 + src/Pages/Internal/Platform.elm | 5 +- src/Pages/Internal/Platform/Cli.elm | 17 ++- src/Pages/StaticHttp.elm | 189 +++++++++++++++---------- src/Pages/StaticHttpRequest.elm | 35 ++--- tests/StaticHttpUnitTests.elm | 17 ++- 6 files changed, 161 insertions(+), 108 deletions(-) create mode 100644 src/Pages/Internal/ApplicationType.elm diff --git a/src/Pages/Internal/ApplicationType.elm b/src/Pages/Internal/ApplicationType.elm new file mode 100644 index 00000000..b31baea6 --- /dev/null +++ b/src/Pages/Internal/ApplicationType.elm @@ -0,0 +1,6 @@ +module Pages.Internal.ApplicationType exposing (ApplicationType(..)) + + +type ApplicationType + = Browser + | Cli diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index 3ae1f7ff..0409fa5c 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -14,6 +14,7 @@ import List.Extra import Mark import Pages.ContentCache as ContentCache exposing (ContentCache) import Pages.Document +import Pages.Internal.ApplicationType as ApplicationType import Pages.Internal.Platform.Cli import Pages.Internal.String as String import Pages.Manifest as Manifest @@ -122,7 +123,7 @@ pageViewOrError pathKey viewFn model cache = -- TODO handle error better ) |> (\request -> - StaticHttpRequest.resolve request viewResult.staticData + StaticHttpRequest.resolve ApplicationType.Browser request viewResult.staticData ) in case viewResult.body of @@ -537,7 +538,7 @@ update content allRoutes canonicalSiteUrl viewFunction pathKey onPageChangeMsg t ) { path = pagePath, frontmatter = frontmatter } |> (\request -> - StaticHttpRequest.resolve request staticDataThing + StaticHttpRequest.resolve ApplicationType.Browser request staticDataThing ) in ( { model | contentCache = updatedCache } diff --git a/src/Pages/Internal/Platform/Cli.elm b/src/Pages/Internal/Platform/Cli.elm index bf45087c..800e2329 100644 --- a/src/Pages/Internal/Platform/Cli.elm +++ b/src/Pages/Internal/Platform/Cli.elm @@ -26,6 +26,7 @@ import Pages.ContentCache as ContentCache exposing (ContentCache) import Pages.Document import Pages.Http import Pages.ImagePath as ImagePath +import Pages.Internal.ApplicationType as ApplicationType exposing (ApplicationType) import Pages.Internal.StaticHttpBody as StaticHttpBody import Pages.Manifest as Manifest import Pages.PagePath as PagePath exposing (PagePath) @@ -525,7 +526,7 @@ performStaticHttpRequests allRawResponses secrets staticRequests = (\( pagePath, request ) -> allRawResponses |> dictCompact - |> StaticHttpRequest.resolveUrls request + |> StaticHttpRequest.resolveUrls ApplicationType.Cli request |> Tuple.second ) |> List.concat @@ -605,7 +606,7 @@ staticResponsesUpdate newEntry model = realUrls = updatedAllResponses |> dictCompact - |> StaticHttpRequest.resolveUrls request + |> StaticHttpRequest.resolveUrls ApplicationType.Cli request |> Tuple.second |> List.map Secrets.maskedLookup |> List.map HashRequest.hash @@ -672,7 +673,7 @@ sendStaticResponsesIfDone config siteMetadata mode secrets allRawResponses error hasPermanentError = usableRawResponses - |> StaticHttpRequest.permanentError request + |> StaticHttpRequest.permanentError ApplicationType.Cli request |> isJust hasPermanentHttpError = @@ -688,7 +689,9 @@ sendStaticResponsesIfDone config siteMetadata mode secrets allRawResponses error -- False -- ) ( allUrlsKnown, knownUrlsToFetch ) = - StaticHttpRequest.resolveUrls request + StaticHttpRequest.resolveUrls + ApplicationType.Cli + request (rawResponses |> Dict.map (\key value -> value |> Result.withDefault "")) fetchedAllKnownUrls = @@ -724,7 +727,9 @@ sendStaticResponsesIfDone config siteMetadata mode secrets allRawResponses error ) maybePermanentError = - StaticHttpRequest.permanentError request + StaticHttpRequest.permanentError + ApplicationType.Cli + request usableRawResponses decoderErrors = @@ -914,7 +919,7 @@ encodeStaticResponses mode = strippedResponses : Dict String String strippedResponses = -- TODO should this return an Err and handle that here? - StaticHttpRequest.strippedResponses request relevantResponses + StaticHttpRequest.strippedResponses ApplicationType.Cli request relevantResponses in case mode of Dev -> diff --git a/src/Pages/StaticHttp.elm b/src/Pages/StaticHttp.elm index 8b1ca2c0..3336e72f 100644 --- a/src/Pages/StaticHttp.elm +++ b/src/Pages/StaticHttp.elm @@ -81,6 +81,7 @@ import Json.Decode import Json.Decode.Exploration import Json.Encode as Encode import OptimizedDecoder as Decode exposing (Decoder) +import Pages.Internal.ApplicationType as ApplicationType exposing (ApplicationType) import Pages.Internal.StaticHttpBody as Body import Pages.Secrets import Pages.StaticHttp.Request as HashRequest @@ -157,8 +158,8 @@ map fn requestInfo = Request ( urls, lookupFn ) -> Request ( urls - , \rawResponses -> - lookupFn rawResponses + , \appType rawResponses -> + lookupFn appType rawResponses |> Result.map (\( partiallyStripped, nextRequest ) -> ( partiallyStripped, map fn nextRequest )) ) @@ -240,24 +241,24 @@ map2 fn request1 request2 = case ( request1, request2 ) of ( Request ( urls1, lookupFn1 ), Request ( urls2, lookupFn2 ) ) -> let - value : Dict String String -> Result Pages.StaticHttpRequest.Error ( Dict String String, Request c ) - value rawResponses = + value : ApplicationType -> Dict String String -> Result Pages.StaticHttpRequest.Error ( Dict String String, Request c ) + value appType rawResponses = let value1 = - lookupFn1 rawResponses + lookupFn1 appType rawResponses |> Result.map Tuple.second value2 = - lookupFn2 rawResponses + lookupFn2 appType rawResponses |> Result.map Tuple.second dict1 = - lookupFn1 rawResponses + lookupFn1 appType rawResponses |> Result.map Tuple.first |> Result.withDefault Dict.empty dict2 = - lookupFn2 rawResponses + lookupFn2 appType rawResponses |> Result.map Tuple.first |> Result.withDefault Dict.empty in @@ -276,14 +277,14 @@ map2 fn request1 request2 = ( Request ( urls1, lookupFn1 ), Done value2 ) -> Request ( urls1 - , \rawResponses -> + , \appType rawResponses -> let value1 = - lookupFn1 rawResponses + lookupFn1 appType rawResponses |> Result.map Tuple.second dict1 = - lookupFn1 rawResponses + lookupFn1 appType rawResponses |> Result.map Tuple.first |> Result.withDefault Dict.empty in @@ -298,14 +299,14 @@ map2 fn request1 request2 = ( Done value2, Request ( urls1, lookupFn1 ) ) -> Request ( urls1 - , \rawResponses -> + , \appType rawResponses -> let value1 = - lookupFn1 rawResponses + lookupFn1 appType rawResponses |> Result.map Tuple.second dict1 = - lookupFn1 rawResponses + lookupFn1 appType rawResponses |> Result.map Tuple.first |> Result.withDefault Dict.empty in @@ -338,14 +339,14 @@ combineReducedDicts dict1 dict2 = ) -lookup : Pages.StaticHttpRequest.Request value -> Dict String String -> Result Pages.StaticHttpRequest.Error ( Dict String String, value ) -lookup requestInfo rawResponses = +lookup : ApplicationType -> Pages.StaticHttpRequest.Request value -> Dict String String -> Result Pages.StaticHttpRequest.Error ( Dict String String, value ) +lookup appType requestInfo rawResponses = case requestInfo of Request ( urls, lookupFn ) -> - lookupFn rawResponses + lookupFn appType rawResponses |> Result.andThen (\( strippedResponses, nextRequest ) -> - lookup + lookup appType (addUrls urls nextRequest) strippedResponses ) @@ -395,8 +396,8 @@ andThen : (a -> Request b) -> Request a -> Request b andThen fn requestInfo = Request ( lookupUrls requestInfo - , \rawResponses -> - lookup + , \appType rawResponses -> + lookup appType requestInfo rawResponses |> (\result -> @@ -438,7 +439,7 @@ succeed : a -> Request a succeed value = Request ( [] - , \rawResponses -> + , \appType rawResponses -> Ok ( rawResponses, Done value ) ) @@ -577,70 +578,104 @@ unoptimizedRequest requestWithSecrets expect = ExpectJson decoder -> Request ( [ requestWithSecrets ] - , \rawResponseDict -> - rawResponseDict - |> Dict.get (Secrets.maskedLookup requestWithSecrets |> HashRequest.hash) - |> (\maybeResponse -> - case maybeResponse of - Just rawResponse -> - Ok - ( rawResponseDict - -- |> Dict.update url (\maybeValue -> Just """{"fake": 123}""") - , rawResponse - ) + , \appType rawResponseDict -> + case appType of + ApplicationType.Cli -> + rawResponseDict + |> Dict.get (Secrets.maskedLookup requestWithSecrets |> HashRequest.hash) + |> (\maybeResponse -> + case maybeResponse of + Just rawResponse -> + Ok + ( rawResponseDict + , rawResponse + ) - Nothing -> - Secrets.maskedLookup requestWithSecrets - |> requestToString - |> Pages.StaticHttpRequest.MissingHttpResponse - |> Err - ) - |> Result.andThen - (\( strippedResponses, rawResponse ) -> - let - reduced = - Json.Decode.Exploration.stripString (Internal.OptimizedDecoder.jde decoder) rawResponse - |> Result.withDefault "TODO" - in - rawResponse - |> Json.Decode.Exploration.decodeString (decoder |> Internal.OptimizedDecoder.jde) - -- |> Result.mapError Json.Decode.Exploration.errorsToString - |> (\decodeResult -> - case decodeResult of - Json.Decode.Exploration.BadJson -> - Pages.StaticHttpRequest.DecoderError "Payload sent back invalid JSON" |> Err + Nothing -> + Secrets.maskedLookup requestWithSecrets + |> requestToString + |> Pages.StaticHttpRequest.MissingHttpResponse + |> Err + ) + |> Result.andThen + (\( strippedResponses, rawResponse ) -> + let + reduced = + Json.Decode.Exploration.stripString (Internal.OptimizedDecoder.jde decoder) rawResponse + |> Result.withDefault "TODO" + in + rawResponse + |> Json.Decode.Exploration.decodeString (decoder |> Internal.OptimizedDecoder.jde) + |> (\decodeResult -> + case decodeResult of + Json.Decode.Exploration.BadJson -> + Pages.StaticHttpRequest.DecoderError "Payload sent back invalid JSON" |> Err - Json.Decode.Exploration.Errors errors -> - errors - |> Json.Decode.Exploration.errorsToString - |> Pages.StaticHttpRequest.DecoderError - |> Err + Json.Decode.Exploration.Errors errors -> + errors + |> Json.Decode.Exploration.errorsToString + |> Pages.StaticHttpRequest.DecoderError + |> Err - Json.Decode.Exploration.WithWarnings warnings a -> - -- Pages.StaticHttpRequest.DecoderError "" |> Err - Ok a + Json.Decode.Exploration.WithWarnings warnings a -> + Ok a - Json.Decode.Exploration.Success a -> - Ok a - ) - -- |> Result.mapError Pages.StaticHttpRequest.DecoderError - |> Result.map Done - |> Result.map - (\finalRequest -> - ( strippedResponses - |> Dict.insert - (Secrets.maskedLookup requestWithSecrets |> HashRequest.hash) - reduced - , finalRequest - ) - ) - ) + Json.Decode.Exploration.Success a -> + Ok a + ) + |> Result.map Done + |> Result.map + (\finalRequest -> + ( strippedResponses + |> Dict.insert + (Secrets.maskedLookup requestWithSecrets |> HashRequest.hash) + reduced + , finalRequest + ) + ) + ) + + ApplicationType.Browser -> + rawResponseDict + |> Dict.get (Secrets.maskedLookup requestWithSecrets |> HashRequest.hash) + |> (\maybeResponse -> + case maybeResponse of + Just rawResponse -> + Ok + ( rawResponseDict + , rawResponse + ) + + Nothing -> + Secrets.maskedLookup requestWithSecrets + |> requestToString + |> Pages.StaticHttpRequest.MissingHttpResponse + |> Err + ) + |> Result.andThen + (\( strippedResponses, rawResponse ) -> + rawResponse + |> Json.Decode.decodeString (decoder |> Internal.OptimizedDecoder.jd) + |> (\decodeResult -> + case decodeResult of + Err _ -> + Pages.StaticHttpRequest.DecoderError "Payload sent back invalid JSON" |> Err + + Ok a -> + Ok a + ) + |> Result.map Done + |> Result.map + (\finalRequest -> + ( strippedResponses, finalRequest ) + ) + ) ) ExpectUnoptimizedJson decoder -> Request ( [ requestWithSecrets ] - , \rawResponseDict -> + , \appType rawResponseDict -> rawResponseDict |> Dict.get (Secrets.maskedLookup requestWithSecrets |> HashRequest.hash) |> (\maybeResponse -> @@ -687,7 +722,7 @@ unoptimizedRequest requestWithSecrets expect = ExpectString mapStringFn -> Request ( [ requestWithSecrets ] - , \rawResponseDict -> + , \appType rawResponseDict -> rawResponseDict |> Dict.get (Secrets.maskedLookup requestWithSecrets |> HashRequest.hash) |> (\maybeResponse -> diff --git a/src/Pages/StaticHttpRequest.elm b/src/Pages/StaticHttpRequest.elm index 493a89c7..75815e7d 100644 --- a/src/Pages/StaticHttpRequest.elm +++ b/src/Pages/StaticHttpRequest.elm @@ -2,26 +2,27 @@ module Pages.StaticHttpRequest exposing (Error(..), Request(..), permanentError, import BuildError exposing (BuildError) import Dict exposing (Dict) +import Pages.Internal.ApplicationType as ApplicationType exposing (ApplicationType) import Pages.StaticHttp.Request import Secrets import TerminalText as Terminal type Request value - = Request ( List (Secrets.Value Pages.StaticHttp.Request.Request), Dict String String -> Result Error ( Dict String String, Request value ) ) + = Request ( List (Secrets.Value Pages.StaticHttp.Request.Request), ApplicationType -> Dict String String -> Result Error ( Dict String String, Request value ) ) | Done value -strippedResponses : Request value -> Dict String String -> Dict String String -strippedResponses request rawResponses = +strippedResponses : ApplicationType -> Request value -> Dict String String -> Dict String String +strippedResponses appType request rawResponses = case request of Request ( list, lookupFn ) -> - case lookupFn rawResponses of + case lookupFn appType rawResponses of Err error -> rawResponses Ok ( partiallyStrippedResponses, followupRequest ) -> - strippedResponses followupRequest partiallyStrippedResponses + strippedResponses appType followupRequest partiallyStrippedResponses Done value -> rawResponses @@ -66,13 +67,13 @@ toBuildError path error = } -permanentError : Request value -> Dict String String -> Maybe Error -permanentError request rawResponses = +permanentError : ApplicationType -> Request value -> Dict String String -> Maybe Error +permanentError appType request rawResponses = case request of Request ( urlList, lookupFn ) -> - case lookupFn rawResponses of + case lookupFn appType rawResponses of Ok ( partiallyStrippedResponses, nextRequest ) -> - permanentError nextRequest rawResponses + permanentError appType nextRequest rawResponses Err error -> case error of @@ -86,13 +87,13 @@ permanentError request rawResponses = Nothing -resolve : Request value -> Dict String String -> Result Error value -resolve request rawResponses = +resolve : ApplicationType -> Request value -> Dict String String -> Result Error value +resolve appType request rawResponses = case request of Request ( urlList, lookupFn ) -> - case lookupFn rawResponses of + case lookupFn appType rawResponses of Ok ( partiallyStrippedResponses, nextRequest ) -> - resolve nextRequest rawResponses + resolve appType nextRequest rawResponses Err error -> Err error @@ -101,13 +102,13 @@ resolve request rawResponses = Ok value -resolveUrls : Request value -> Dict String String -> ( Bool, List (Secrets.Value Pages.StaticHttp.Request.Request) ) -resolveUrls request rawResponses = +resolveUrls : ApplicationType -> Request value -> Dict String String -> ( Bool, List (Secrets.Value Pages.StaticHttp.Request.Request) ) +resolveUrls appType request rawResponses = case request of Request ( urlList, lookupFn ) -> - case lookupFn rawResponses of + case lookupFn appType rawResponses of Ok ( partiallyStrippedResponses, nextRequest ) -> - resolveUrls nextRequest rawResponses + resolveUrls appType nextRequest rawResponses |> Tuple.mapSecond ((++) urlList) Err error -> diff --git a/tests/StaticHttpUnitTests.elm b/tests/StaticHttpUnitTests.elm index fb1cf02a..6d74add5 100644 --- a/tests/StaticHttpUnitTests.elm +++ b/tests/StaticHttpUnitTests.elm @@ -4,6 +4,7 @@ import Dict exposing (Dict) import Expect import Json.Decode.Exploration import OptimizedDecoder as Decode +import Pages.Internal.ApplicationType as ApplicationType import Pages.StaticHttp as StaticHttp import Pages.StaticHttp.Request as Request import Pages.StaticHttpRequest as StaticHttpRequest @@ -43,11 +44,11 @@ all = StaticHttp.get (Secrets.succeed "first") (Decode.succeed "NEXT") |> StaticHttp.andThen (\continueUrl -> - -- StaticHttp.get continueUrl (Decode.succeed ()) getWithoutSecrets "NEXT" (Decode.succeed ()) ) |> (\request -> - StaticHttpRequest.resolveUrls request + StaticHttpRequest.resolveUrls ApplicationType.Cli + request (requestsDict [ ( get "first", "null" ) , ( get "NEXT", "null" ) @@ -64,7 +65,8 @@ all = getWithoutSecrets "NEXT" (Decode.succeed ()) ) |> (\request -> - StaticHttpRequest.resolveUrls request + StaticHttpRequest.resolveUrls ApplicationType.Cli + request (requestsDict [ ( get "NEXT", "null" ) ] @@ -82,7 +84,8 @@ all = ) |> StaticHttp.map (\_ -> ()) |> (\request -> - StaticHttpRequest.resolveUrls request + StaticHttpRequest.resolveUrls ApplicationType.Cli + request (requestsDict [ ( get "first", "null" ) , ( get "NEXT", "null" ) @@ -99,7 +102,8 @@ all = getWithoutSecrets "NEXT" (Decode.succeed ()) ) |> (\request -> - StaticHttpRequest.resolveUrls request + StaticHttpRequest.resolveUrls ApplicationType.Cli + request (requestsDict [ ( get "first", "null" ) ] @@ -120,7 +124,8 @@ all = ) ) |> (\request -> - StaticHttpRequest.resolveUrls request + StaticHttpRequest.resolveUrls ApplicationType.Cli + request (requestsDict [ ( get "first", "1" ) ] From 9226fdeeb58e2de988303b57e05aedaccf2f070a Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Fri, 17 Apr 2020 21:24:12 -0700 Subject: [PATCH 19/73] Add some missing exposed values. --- src/OptimizedDecoder.elm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/OptimizedDecoder.elm b/src/OptimizedDecoder.elm index c42bc655..89f5212b 100644 --- a/src/OptimizedDecoder.elm +++ b/src/OptimizedDecoder.elm @@ -1,5 +1,6 @@ module OptimizedDecoder exposing - ( decodeString, decodeValue + ( decodeString, decodeValue, Value + , Error, errorToString , Decoder, string, bool, int, float , nullable, list, array, dict, keyValuePairs , field, at, index From 435724de98b55888311405657340c42b235363a2 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Fri, 17 Apr 2020 21:24:23 -0700 Subject: [PATCH 20/73] Port over pipeline module. --- elm.json | 1 + src/OptimizedDecoder/Pipeline.elm | 333 ++++++++++++++++++++++++++++++ 2 files changed, 334 insertions(+) create mode 100644 src/OptimizedDecoder/Pipeline.elm diff --git a/elm.json b/elm.json index c1150ce6..3ad0795d 100644 --- a/elm.json +++ b/elm.json @@ -8,6 +8,7 @@ "Head", "Head.Seo", "OptimizedDecoder", + "OptimizedDecoder.Pipeline", "Pages.Document", "Pages.ImagePath", "Pages.PagePath", diff --git a/src/OptimizedDecoder/Pipeline.elm b/src/OptimizedDecoder/Pipeline.elm new file mode 100644 index 00000000..ba864b9f --- /dev/null +++ b/src/OptimizedDecoder/Pipeline.elm @@ -0,0 +1,333 @@ +module OptimizedDecoder.Pipeline exposing + ( required, requiredAt, optional, optionalAt, hardcoded, custom + , decode, resolve + ) + +{-| + + +# Json.Decode.Pipeline + +Use the `(|>)` operator to build JSON decoders. + + +## Decoding fields + +@docs required, requiredAt, optional, optionalAt, hardcoded, custom + + +## Beginning and ending pipelines + +@docs decode, resolve + + +### Verified docs + +The examples all expect imports set up like this: + + import Json.Decode.Exploration exposing (..) + import Json.Decode.Exploration.Pipeline exposing (..) + import Json.Decode.Exploration.Located exposing (Located(..)) + import Json.Encode as Encode + import List.Nonempty as Nonempty + +For automated verification of these examples, this import is also required. +Please ignore it. + + import DocVerificationHelpers exposing (User) + +-} + +import OptimizedDecoder as Decode exposing (Decoder) + + +{-| Decode a required field. + + import Json.Decode.Exploration exposing (..) + + type alias User = + { id : Int + , name : String + , email : String + } + + userDecoder : Decoder User + userDecoder = + decode User + |> required "id" int + |> required "name" string + |> required "email" string + + """ {"id": 123, "email": "sam@example.com", "name": "Sam"} """ + |> decodeString userDecoder + --> Success { id = 123, name = "Sam", email = "sam@example.com" } + +-} +required : String -> Decoder a -> Decoder (a -> b) -> Decoder b +required key valDecoder decoder = + decoder |> Decode.andMap (Decode.field key valDecoder) + + +{-| Decode a required nested field. + + import Json.Decode.Exploration exposing (..) + + type alias User = + { id : Int + , name : String + , email : String + } + + userDecoder : Decoder User + userDecoder = + decode User + |> required "id" int + |> requiredAt [ "profile", "name" ] string + |> required "email" string + + """ + { + "id": 123, + "email": "sam@example.com", + "profile": { "name": "Sam" } + } + """ + |> decodeString userDecoder + --> Success { id = 123, name = "Sam", email = "sam@example.com" } + +-} +requiredAt : List String -> Decoder a -> Decoder (a -> b) -> Decoder b +requiredAt path valDecoder decoder = + decoder |> Decode.andMap (Decode.at path valDecoder) + + +{-| Decode a field that may be missing or have a null value. If the field is +missing, then it decodes as the `fallback` value. If the field is present, +then `valDecoder` is used to decode its value. If `valDecoder` fails on a +`null` value, then the `fallback` is used as if the field were missing +entirely. + + import Json.Decode.Exploration exposing (..) + + type alias User = + { id : Int + , name : String + , email : String + } + + userDecoder : Decoder User + userDecoder = + decode User + |> required "id" int + |> optional "name" string "blah" + |> required "email" string + + """ { "id": 123, "email": "sam@example.com" } """ + |> decodeString userDecoder + --> Success { id = 123, name = "blah", email = "sam@example.com" } + +Because `valDecoder` is given an opportunity to decode `null` values before +resorting to the `fallback`, you can distinguish between missing and `null` +values if you need to: + + userDecoder2 = + decode User + |> required "id" int + |> optional "name" (oneOf [ string, null "NULL" ]) "MISSING" + |> required "email" string + +Note also that this behaves _slightly_ different than the stock pipeline +package. + +In the stock pipeline package, running the following decoder with an array as +the input would _succeed_. + + fooDecoder = + decode identity + |> optional "foo" (maybe string) Nothing + +In this package, such a decoder will error out instead, saying that it expected +the input to be an object. The _key_ `"foo"` is optional, but it really does +have to be an object before we even consider trying your decoder or returning +the fallback. + +-} +optional : String -> Decoder a -> a -> Decoder (a -> b) -> Decoder b +optional key valDecoder fallback decoder = + -- source: https://github.com/NoRedInk/elm-json-decode-pipeline/blob/d9c10a2b388176569fe3e88ef0e2b6fc19d9beeb/src/Json/Decode/Pipeline.elm#L113 + custom (optionalDecoder (Decode.field key Decode.value) valDecoder fallback) decoder + + +{-| Decode an optional nested field. +-} +optionalAt : List String -> Decoder a -> a -> Decoder (a -> b) -> Decoder b +optionalAt path valDecoder fallback decoder = + custom (optionalDecoder (Decode.at path Decode.value) valDecoder fallback) decoder + + + +-- source: https://github.com/NoRedInk/elm-json-decode-pipeline/blob/d9c10a2b388176569fe3e88ef0e2b6fc19d9beeb/src/Json/Decode/Pipeline.elm#L116-L148 + + +optionalDecoder : Decode.Decoder Decode.Value -> Decoder a -> a -> Decoder a +optionalDecoder pathDecoder valDecoder fallback = + let + nullOr decoder = + Decode.oneOf [ decoder, Decode.null fallback ] + + handleResult input = + case Decode.decodeValue pathDecoder input of + Ok rawValue -> + -- The field was present, so now let's try to decode that value. + -- (If it was present but fails to decode, this should and will fail!) + case Decode.decodeValue (nullOr valDecoder) rawValue of + Ok finalResult -> + Decode.succeed finalResult + + Err finalErr -> + -- TODO is there some way to preserve the structure + -- of the original error instead of using toString here? + Decode.fail (Decode.errorToString finalErr) + + Err _ -> + -- The field was not present, so use the fallback. + Decode.succeed fallback + in + Decode.value + |> Decode.andThen handleResult + + +{-| Rather than decoding anything, use a fixed value for the next step in the +pipeline. `harcoded` does not look at the JSON at all. + + import Json.Decode.Exploration exposing (..) + + + type alias User = + { id : Int + , name : String + , email : String + } + + userDecoder : Decoder User + userDecoder = + decode User + |> required "id" int + |> hardcoded "Alex" + |> required "email" string + + """ { "id": 123, "email": "sam@example.com" } """ + |> decodeString userDecoder + --> Success { id = 123, name = "Alex", email = "sam@example.com" } + +-} +hardcoded : a -> Decoder (a -> b) -> Decoder b +hardcoded = + Decode.andMap << Decode.succeed + + +{-| Run the given decoder and feed its result into the pipeline at this point. + +Consider this example. + + import Json.Decode.Exploration exposing (..) + + + type alias User = + { id : Int + , name : String + , email : String + } + + userDecoder : Decoder User + userDecoder = + decode User + |> required "id" int + |> custom (at [ "profile", "name" ] string) + |> required "email" string + + """ + { + "id": 123, + "email": "sam@example.com", + "profile": {"name": "Sam"} + } + """ + |> decodeString userDecoder + --> Success { id = 123, name = "Sam", email = "sam@example.com" } + +-} +custom : Decoder a -> Decoder (a -> b) -> Decoder b +custom = + Decode.andMap + + +{-| Convert a `Decoder (Result x a)` into a `Decoder a`. Useful when you want +to perform some custom processing just before completing the decoding operation. + + import Json.Decode.Exploration exposing (..) + + type alias User = + { id : Int + , name : String + , email : String + } + + userDecoder : Decoder User + userDecoder = + let + -- toDecoder gets run *after* all the + -- (|> required ...) steps are done. + toDecoder : Int -> String -> String -> Int -> Decoder User + toDecoder id name email version = + if version >= 2 then + succeed (User id name email) + else + fail "This JSON is from a deprecated source. Please upgrade!" + in + decode toDecoder + |> required "id" int + |> required "name" string + |> required "email" string + |> required "version" int + -- version is part of toDecoder, + -- but it is not a part of User + |> resolve + + """ + { + "id": 123, + "name": "Sam", + "email": "sam@example.com", + "version": 3 + } + """ + |> decodeString userDecoder + --> Success { id = 123, name = "Sam", email = "sam@example.com" } + +-} +resolve : Decoder (Decoder a) -> Decoder a +resolve = + Decode.andThen identity + + +{-| Begin a decoding pipeline. This is a synonym for [Json.Decode.succeed](http://package.elm-lang.org/packages/elm-lang/core/latest/Json-Decode#succeed), +intended to make things read more clearly. + + type alias User = + { id : Int + , email : String + , name : String + } + + userDecoder : Decoder User + userDecoder = + decode User + |> required "id" int + |> required "email" string + |> optional "name" string "" + +-} +decode : a -> Decoder a +decode = + Decode.succeed From e3956385652e06fbec529aafd1530a0fd6cd14a1 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sat, 18 Apr 2020 09:04:59 -0700 Subject: [PATCH 21/73] Fix typo. --- src/Pages/Internal.elm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Pages/Internal.elm b/src/Pages/Internal.elm index e9f5adba..60aa9288 100644 --- a/src/Pages/Internal.elm +++ b/src/Pages/Internal.elm @@ -18,7 +18,7 @@ import Json.Encode import Pages.Internal.Platform -{-| Internal detial to track whether to run the CLI step or the runtime step in the browser. +{-| Internal detail to track whether to run the CLI step or the runtime step in the browser. -} type ApplicationType = Browser From 33272b6c5441ab3800fa3f0a35a135861d6dfe7c Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sat, 18 Apr 2020 10:30:09 -0700 Subject: [PATCH 22/73] Use a promise to subscribe to static http data as it is updated. --- generator/src/add-files-plugin.js | 8 ++++---- generator/src/elm-pages.js | 15 +++++++++++---- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index b5c66075..d7986059 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -32,18 +32,18 @@ module.exports = class AddFilesPlugin { .sync(["content/**/*.*", "!content/**/*.emu"], {}) .map(unpackFile); - compilation.contextDependencies.add(path.resolve(process.cwd(), './content')); + global.pagesWithRequests.then(pageWithRequests => { files.forEach(file => { // Couldn't find this documented in the webpack docs, // but I found the example code for it here: // https://github.com/jantimon/html-webpack-plugin/blob/35a154186501fba3ecddb819b6f632556d37a58f/index.js#L470-L478 let route = file.baseRoute.replace(/\/$/, ''); - const staticRequests = this.pagesWithRequests[route]; + const staticRequests = pageWithRequests[route]; const filename = path.join(file.baseRoute, "content.json"); // compilation.fileDependencies.add(filename); - compilation.fileDependencies.add(path.resolve(process.cwd(), file.filePath)); + compilation.fileDependencies.add(path.resolve(file.filePath)); const rawContents = JSON.stringify({ body: file.content, staticData: staticRequests || {} @@ -55,7 +55,7 @@ module.exports = class AddFilesPlugin { }; }); - (this.filesToGenerate || []).forEach(file => { + (global.filesToGenerate || []).forEach(file => { // Couldn't find this documented in the webpack docs, // but I found the example code for it here: // https://github.com/jantimon/html-webpack-plugin/blob/35a154186501fba3ecddb819b6f632556d37a58f/index.js#L470-L478 diff --git a/generator/src/elm-pages.js b/generator/src/elm-pages.js index 50c90187..9b150b94 100755 --- a/generator/src/elm-pages.js +++ b/generator/src/elm-pages.js @@ -81,15 +81,22 @@ function run() { app.ports.writeFile.subscribe(contents => { const routes = toRoutes(markdownContent.concat(content)); + let resolvePageRequests; + global.pagesWithRequests = new Promise(function (resolve, reject) { + resolvePageRequests = resolve; + }); + doCliStuff( contents.watch ? "dev" : "prod", staticRoutes, markdownContent, content, - function(payload) { + function (payload) { if (contents.watch) { startWatchIfNeeded(); + resolvePageRequests(payload.pages); + global.filesToGenerate = payload.filesToGenerate; if (!devServerRunning) { devServerRunning = true; develop.start({ @@ -113,7 +120,7 @@ function run() { routesWithRequests: payload.pages, filesToGenerate: payload.filesToGenerate }, - () => {} + () => { } ); } @@ -148,13 +155,13 @@ function startWatchIfNeeded() { if (!watcher) { console.log("Watching..."); watcher = chokidar - .watch(["content/**/*.*"], { + .watch(["content/**/*.*", "src/**/*.elm"], { awaitWriteFinish: { stabilityThreshold: 500 }, ignoreInitial: true }) - .on("all", function(event, filePath) { + .on("all", function (event, filePath) { console.log(`Rerunning for ${filePath}...`); run(); console.log("Done!"); From 3c690106f430c5737330a1064d97ddd58ecdf9aa Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 19 Apr 2020 08:17:51 -0700 Subject: [PATCH 23/73] Wire in static http cache to prevent making extra requests. --- generator/src/compile-elm.js | 9 +-- generator/src/elm-pages.js | 1 + src/Pages/Internal/Platform/Cli.elm | 106 ++++++++++++++++++++++++---- tests/StaticHttpRequestsTests.elm | 101 ++++++++++++++++++++------ 4 files changed, 176 insertions(+), 41 deletions(-) diff --git a/generator/src/compile-elm.js b/generator/src/compile-elm.js index 9ab791e1..976dea76 100644 --- a/generator/src/compile-elm.js +++ b/generator/src/compile-elm.js @@ -7,19 +7,20 @@ function runElm(/** @type string */ mode, /** @type any */ callback) { const mainElmFile = "../../src/Main.elm"; const startingDir = process.cwd(); process.chdir(elmBaseDirectory); - compileToString([mainElmFile], {}).then(function(data) { - (function() { + compileToString([mainElmFile], {}).then(function (data) { + (function () { const warnOriginal = console.warn; - console.warn = function() {}; + console.warn = function () { }; eval(data.toString()); const app = Elm.Main.init({ - flags: { secrets: process.env, mode } + flags: { secrets: process.env, mode, staticHttpCache: global.staticHttpCache } }); app.ports.toJsPort.subscribe(payload => { process.chdir(startingDir); if (payload.tag === "Success") { + global.staticHttpCache = payload.args[0].staticHttpCache; callback(payload.args[0]); } else { console.log(payload.args[0]); diff --git a/generator/src/elm-pages.js b/generator/src/elm-pages.js index 9b150b94..bfeaaa72 100755 --- a/generator/src/elm-pages.js +++ b/generator/src/elm-pages.js @@ -13,6 +13,7 @@ const parseFrontmatter = require("./frontmatter.js"); const path = require("path"); const { ensureDirSync, deleteIfExists } = require('./file-helpers.js') global.builtAt = new Date(); +global.staticHttpCache = {}; const contentGlobPath = "content/**/*.emu"; diff --git a/src/Pages/Internal/Platform/Cli.elm b/src/Pages/Internal/Platform/Cli.elm index 800e2329..9e3f3a66 100644 --- a/src/Pages/Internal/Platform/Cli.elm +++ b/src/Pages/Internal/Platform/Cli.elm @@ -48,6 +48,7 @@ type alias ToJsSuccessPayload pathKey = { pages : Dict String (Dict String String) , manifest : Manifest.Config pathKey , filesToGenerate : List FileToGenerate + , staticHttpCache : Dict String String , errors : List String } @@ -66,8 +67,8 @@ toJsCodec = Errors errorList -> errorsTag errorList - Success { pages, manifest, filesToGenerate, errors } -> - success (ToJsSuccessPayload pages manifest filesToGenerate errors) + Success { pages, manifest, filesToGenerate, errors, staticHttpCache } -> + success (ToJsSuccessPayload pages manifest filesToGenerate staticHttpCache errors) ) |> Codec.variant1 "Errors" Errors Codec.string |> Codec.variant1 "Success" @@ -116,6 +117,9 @@ successCodec = ) (Decode.succeed []) ) + |> Codec.field "staticHttpCache" + .staticHttpCache + (Codec.dict Codec.string) |> Codec.field "errors" .errors (Codec.list Codec.string) |> Codec.buildObject @@ -318,13 +322,20 @@ init : init toModel contentCache siteMetadata config flags = case Decode.decodeValue - (Decode.map2 Tuple.pair + (Decode.map3 (\a b c -> ( a, b, c )) (Decode.field "secrets" SecretsDict.decoder) (Decode.field "mode" modeDecoder) + (Decode.field "staticHttpCache" + (Decode.dict + (Decode.string + |> Decode.map Just + ) + ) + ) ) flags of - Ok ( secrets, mode ) -> + Ok ( secrets, mode, staticHttpCache ) -> case contentCache of Ok _ -> case ContentCache.pagesWithErrors contentCache of @@ -341,14 +352,14 @@ init toModel contentCache siteMetadata config flags = staticResponses = case requests of Ok okRequests -> - staticResponsesInit okRequests + staticResponsesInit staticHttpCache okRequests Err errors -> -- TODO need to handle errors better? - staticResponsesInit [] + staticResponsesInit staticHttpCache [] ( updatedRawResponses, effect ) = - sendStaticResponsesIfDone config siteMetadata mode secrets Dict.empty [] staticResponses + sendStaticResponsesIfDone config siteMetadata mode secrets staticHttpCache [] staticResponses in ( Model staticResponses secrets [] updatedRawResponses mode |> toModel , effect @@ -367,11 +378,11 @@ init toModel contentCache siteMetadata config flags = staticResponses = case requests of Ok okRequests -> - staticResponsesInit okRequests + staticResponsesInit staticHttpCache okRequests Err errors -> -- TODO need to handle errors better? - staticResponsesInit [] + staticResponsesInit staticHttpCache [] in updateAndSendPortIfDone config @@ -380,7 +391,7 @@ init toModel contentCache siteMetadata config flags = staticResponses secrets pageErrors - Dict.empty + staticHttpCache mode ) toModel @@ -392,7 +403,7 @@ init toModel contentCache siteMetadata config flags = (Model Dict.empty secrets (metadataParserErrors |> List.map Tuple.second) - Dict.empty + staticHttpCache mode ) toModel @@ -573,13 +584,31 @@ combineMultipleErrors results = results -staticResponsesInit : List ( PagePath pathKey, StaticHttp.Request value ) -> StaticResponses -staticResponsesInit list = +staticResponsesInit : Dict String (Maybe String) -> List ( PagePath pathKey, StaticHttp.Request value ) -> StaticResponses +staticResponsesInit staticHttpCache list = list |> List.map (\( path, staticRequest ) -> + let + entry = + NotFetched (staticRequest |> StaticHttp.map (\_ -> ())) Dict.empty + + updatedEntry = + staticHttpCache + |> dictCompact + |> Dict.toList + |> List.foldl + (\( hashedRequest, response ) entrySoFar -> + entrySoFar + |> addEntry + staticHttpCache + hashedRequest + (Ok response) + ) + entry + in ( PagePath.toString path - , NotFetched (staticRequest |> StaticHttp.map (\_ -> ())) Dict.empty + , updatedEntry ) ) |> Dict.fromList @@ -633,6 +662,36 @@ staticResponsesUpdate newEntry model = } +addEntry : Dict String (Maybe String) -> String -> Result () String -> StaticHttpResult -> StaticHttpResult +addEntry globalRawResponses hashedRequest rawResponse ((NotFetched request rawResponses) as entry) = + let + realUrls = + globalRawResponses + |> dictCompact + |> StaticHttpRequest.resolveUrls ApplicationType.Cli request + |> Tuple.second + |> List.map Secrets.maskedLookup + |> List.map HashRequest.hash + + includesUrl = + List.member + hashedRequest + realUrls + in + if includesUrl then + let + updatedRawResponses = + Dict.insert + hashedRequest + rawResponse + rawResponses + in + NotFetched request updatedRawResponses + + else + entry + + isJust : Maybe a -> Bool isJust maybeValue = case maybeValue of @@ -882,11 +941,19 @@ sendStaticResponsesIfDone config siteMetadata mode secrets allRawResponses error (encodeStaticResponses mode staticResponses) config.manifest generatedOkayFiles + allRawResponses allErrors ) -toJsPayload encodedStatic manifest generated allErrors = +toJsPayload : + Dict String (Dict String String) + -> Manifest.Config pathKey + -> List FileToGenerate + -> Dict String (Maybe String) + -> List { title : String, message : List Terminal.Text, fatal : Bool } + -> Effect pathKey +toJsPayload encodedStatic manifest generated allRawResponses allErrors = SendJsData <| if allErrors |> List.filter .fatal |> List.isEmpty then Success @@ -894,6 +961,15 @@ toJsPayload encodedStatic manifest generated allErrors = encodedStatic manifest generated + (allRawResponses + |> Dict.toList + |> List.filterMap + (\( key, maybeValue ) -> + maybeValue + |> Maybe.map (\value -> ( key, value )) + ) + |> Dict.fromList + ) (List.map BuildError.errorToString allErrors) ) diff --git a/tests/StaticHttpRequestsTests.elm b/tests/StaticHttpRequestsTests.elm index 960b31de..e9d535f1 100644 --- a/tests/StaticHttpRequestsTests.elm +++ b/tests/StaticHttpRequestsTests.elm @@ -6,6 +6,7 @@ import Expect import Html import Json.Decode as JD import Json.Decode.Exploration +import Json.Encode as Encode import OptimizedDecoder as Decode exposing (Decoder) import Pages.ContentCache as ContentCache import Pages.Document as Document @@ -605,11 +606,41 @@ Body: """) ] ) ] + , describe "staticHttpCache" + [ test "it doesn't perform http requests that are provided in the http cache flag" <| + \() -> + startWithHttpCache + [ ( { url = "https://api.github.com/repos/dillonkearns/elm-pages" + , method = "GET" + , headers = [] + , body = StaticHttpBody.EmptyBody + } + , """{"stargazer_count":86}""" + ) + ] + [ ( [] + , StaticHttp.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages") starDecoder + ) + ] + |> expectSuccess + [ ( "" + , [ ( get "https://api.github.com/repos/dillonkearns/elm-pages" + , """{"stargazer_count":86}""" + ) + ] + ) + ] + ] ] start : List ( List String, StaticHttp.Request a ) -> ProgramTest Main.Model Main.Msg (Main.Effect PathKey) start pages = + startWithHttpCache [] pages + + +startWithHttpCache : List ( Request.Request, String ) -> List ( List String, StaticHttp.Request a ) -> ProgramTest Main.Model Main.Msg (Main.Effect PathKey) +startWithHttpCache staticHttpCache pages = let document = Document.fromList @@ -671,6 +702,30 @@ start pages = , pathKey = PathKey , onPageChange = \_ -> () } + + encodedFlags = + --{"secrets": + -- {"API_KEY": "ABCD1234","BEARER": "XYZ789"}, "mode": "prod", "staticHttpCache": {} + -- } + Encode.object + [ ( "secrets" + , [ ( "API_KEY", "ABCD1234" ) + , ( "BEARER", "XYZ789" ) + ] + |> Dict.fromList + |> Encode.dict identity Encode.string + ) + , ( "mode", Encode.string "prod" ) + , ( "staticHttpCache", encodedStaticHttpCache ) + ] + + encodedStaticHttpCache = + staticHttpCache + |> List.map + (\( request, httpResponseString ) -> + ( Request.hash request, Encode.string httpResponseString ) + ) + |> Encode.object in {- (Model -> model) @@ -686,9 +741,7 @@ start pages = , view = \_ -> { title = "", body = [] } } |> ProgramTest.withSimulatedEffects simulateEffects - |> ProgramTest.start (flags """{"secrets": - {"API_KEY": "ABCD1234","BEARER": "XYZ789"}, "mode": "prod" - }""") + |> ProgramTest.start (flags (Encode.encode 0 encodedFlags)) flags : String -> JD.Value @@ -837,27 +890,31 @@ expectSuccess expectedRequests previous = |> ProgramTest.expectOutgoingPortValues "toJsPort" (Codec.decoder Main.toJsCodec) - (Expect.equal - [ Main.Success - { pages = - expectedRequests - |> List.map - (\( url, requests ) -> - ( url - , requests - |> List.map - (\( request, response ) -> - ( Request.hash request, response ) + (\value -> + case value of + [ Main.Success portPayload ] -> + portPayload.pages + |> Expect.equal + (expectedRequests + |> List.map + (\( url, requests ) -> + ( url + , requests + |> List.map + (\( request, response ) -> + ( Request.hash request, response ) + ) + |> Dict.fromList ) - |> Dict.fromList - ) + ) + |> Dict.fromList ) - |> Dict.fromList - , manifest = manifest - , filesToGenerate = [] - , errors = [] - } - ] + + [ _ ] -> + Expect.fail "Expected success port." + + _ -> + Expect.fail ("Expected ports to be called once, but instead there were " ++ String.fromInt (List.length value) ++ " calls.") ) From dedeb0725d64baecdd053820533022da04193940 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 19 Apr 2020 10:35:17 -0700 Subject: [PATCH 24/73] Add a test case. --- tests/StaticHttpRequestsTests.elm | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/tests/StaticHttpRequestsTests.elm b/tests/StaticHttpRequestsTests.elm index e9d535f1..761974b5 100644 --- a/tests/StaticHttpRequestsTests.elm +++ b/tests/StaticHttpRequestsTests.elm @@ -630,6 +630,33 @@ Body: """) ] ) ] + , test "it ignores unused cache" <| + \() -> + startWithHttpCache + [ ( { url = "https://this-is-never-used.example.com/" + , method = "GET" + , headers = [] + , body = StaticHttpBody.EmptyBody + } + , """{"stargazer_count":86}""" + ) + ] + [ ( [] + , StaticHttp.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages") starDecoder + ) + ] + |> ProgramTest.simulateHttpOk + "GET" + "https://api.github.com/repos/dillonkearns/elm-pages" + """{ "stargazer_count": 86 }""" + |> expectSuccess + [ ( "" + , [ ( get "https://api.github.com/repos/dillonkearns/elm-pages" + , """{"stargazer_count":86}""" + ) + ] + ) + ] ] ] From d31a59c7c5efedc546df12f03a48cf318d48d51c Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 19 Apr 2020 18:31:29 -0700 Subject: [PATCH 25/73] Add missing symbols. --- generator/src/add-files-plugin.js | 1 + 1 file changed, 1 insertion(+) diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index d7986059..d6881882 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -66,6 +66,7 @@ module.exports = class AddFilesPlugin { }); callback() + }) }); } }; From 299d73d80712a29b9c8b5e27a2f45efab4d1f5c7 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 19 Apr 2020 18:32:16 -0700 Subject: [PATCH 26/73] Remove coupling to elm-markup library. --- elm.json | 3 +- examples/docs/elm.json | 3 +- examples/external-data/elm.json | 3 +- generator/src/Main.elm | 9 +---- generator/src/elm-file-constants.js | 18 ++++----- generator/src/elm-pages.js | 20 ++-------- generator/src/frontmatter.js | 19 +-------- generator/src/generate-elm-stuff.js | 5 +-- generator/src/generate-raw-content.js | 4 +- src/Pages/ContentCache.elm | 14 ------- src/Pages/Document.elm | 57 +-------------------------- src/Pages/Internal/Platform.elm | 11 +----- 12 files changed, 23 insertions(+), 143 deletions(-) diff --git a/elm.json b/elm.json index 3ad0795d..7d6dccbd 100644 --- a/elm.json +++ b/elm.json @@ -34,7 +34,6 @@ "elm-community/list-extra": "8.2.2 <= v < 9.0.0", "elm-community/result-extra": "2.2.1 <= v < 3.0.0", "lukewestby/elm-string-interpolate": "1.0.4 <= v < 2.0.0", - "mdgriffith/elm-markup": "3.0.1 <= v < 4.0.0", "mgold/elm-nonempty-list": "4.0.2 <= v < 5.0.0", "miniBill/elm-codec": "1.2.0 <= v < 2.0.0", "noahzgordon/elm-color-extra": "1.0.2 <= v < 2.0.0", @@ -46,4 +45,4 @@ "elm-explorations/test": "1.2.2 <= v < 2.0.0", "jgrenat/elm-html-test-runner": "1.0.3 <= v < 2.0.0" } -} +} \ No newline at end of file diff --git a/examples/docs/elm.json b/examples/docs/elm.json index 2596fa66..d78352a5 100644 --- a/examples/docs/elm.json +++ b/examples/docs/elm.json @@ -31,7 +31,6 @@ "elm-explorations/markdown": "1.0.0", "justinmimbs/date": "3.2.0", "lukewestby/elm-string-interpolate": "1.0.4", - "mdgriffith/elm-markup": "3.0.1", "mdgriffith/elm-ui": "1.1.5", "miniBill/elm-codec": "1.2.0", "noahzgordon/elm-color-extra": "1.0.2", @@ -59,4 +58,4 @@ }, "indirect": {} } -} +} \ No newline at end of file diff --git a/examples/external-data/elm.json b/examples/external-data/elm.json index a3bbe6c5..a5e80c81 100644 --- a/examples/external-data/elm.json +++ b/examples/external-data/elm.json @@ -27,7 +27,6 @@ "elm-explorations/markdown": "1.0.0", "justinmimbs/date": "3.1.2", "lukewestby/elm-string-interpolate": "1.0.4", - "mdgriffith/elm-markup": "3.0.1", "mdgriffith/elm-ui": "1.1.5", "mgold/elm-nonempty-list": "4.0.2", "miniBill/elm-codec": "1.2.0", @@ -51,4 +50,4 @@ }, "indirect": {} } -} +} \ No newline at end of file diff --git a/generator/src/Main.elm b/generator/src/Main.elm index 9a2e90bf..65c5ade2 100644 --- a/generator/src/Main.elm +++ b/generator/src/Main.elm @@ -95,20 +95,13 @@ import Dict exposing (Dict) content : { markdown : List ( List String, { frontMatter : String, body : Maybe String } ), markup : List ( List String, String ) } content = - { markdown = markdown, markup = markup } + { markdown = markdown } markdown : List ( List String, { frontMatter : String, body : Maybe String } ) markdown = [ {1} ] - - -markup : List ( List String, String ) -markup = - [ - {0} - ] """ [ List.map generatePage content |> String.join "\n ," , List.map generateMarkdownPage markdownContent |> String.join "\n ," diff --git a/generator/src/elm-file-constants.js b/generator/src/elm-file-constants.js index 7a8e275d..90f723a7 100644 --- a/generator/src/elm-file-constants.js +++ b/generator/src/elm-file-constants.js @@ -1,9 +1,9 @@ generateRawContent = require("./generate-raw-content.js"); const exposingList = - "(PathKey, allPages, allImages, internals, images, isValidRoute, pages, builtAt)"; + "(PathKey, allPages, allImages, internals, images, isValidRoute, pages, builtAt)"; function staticRouteStuff(staticRoutes) { - return ` + return ` ${staticRoutes.allRoutes} @@ -41,8 +41,8 @@ isValidRoute route = `; } -function elmPagesUiFile(staticRoutes, markdownContent, markupContent) { - return `port module Pages exposing ${exposingList} +function elmPagesUiFile(staticRoutes, markdownContent) { + return `port module Pages exposing ${exposingList} import Color exposing (Color) import Pages.Internal @@ -50,7 +50,6 @@ import Head import Html exposing (Html) import Json.Decode import Json.Encode -import Mark import Pages.Platform import Pages.Manifest exposing (DisplayMode, Orientation) import Pages.Manifest.Category as Category exposing (Category) @@ -107,12 +106,12 @@ internals = ${staticRouteStuff(staticRoutes)} -${generateRawContent(markdownContent, markupContent, false)} +${generateRawContent(markdownContent, false)} `; } -function elmPagesCliFile(staticRoutes, markdownContent, markupContent) { - return `port module Pages exposing ${exposingList} +function elmPagesCliFile(staticRoutes, markdownContent) { + return `port module Pages exposing ${exposingList} import Color exposing (Color) import Pages.Internal @@ -120,7 +119,6 @@ import Head import Html exposing (Html) import Json.Decode import Json.Encode -import Mark import Pages.Platform import Pages.Manifest exposing (DisplayMode, Orientation) import Pages.Manifest.Category as Category exposing (Category) @@ -179,7 +177,7 @@ internals = ${staticRouteStuff(staticRoutes)} -${generateRawContent(markdownContent, markupContent, true)} +${generateRawContent(markdownContent, true)} `; } module.exports = { elmPagesUiFile, elmPagesCliFile }; diff --git a/generator/src/elm-pages.js b/generator/src/elm-pages.js index bfeaaa72..a209eb4d 100755 --- a/generator/src/elm-pages.js +++ b/generator/src/elm-pages.js @@ -15,8 +15,6 @@ const { ensureDirSync, deleteIfExists } = require('./file-helpers.js') global.builtAt = new Date(); global.staticHttpCache = {}; -const contentGlobPath = "content/**/*.emu"; - let watcher = null; let devServerRunning = false; @@ -24,15 +22,6 @@ function unpackFile(path) { return { path, contents: fs.readFileSync(path).toString() }; } -function unpackMarkup(path) { - const separated = parseFrontmatter(path, fs.readFileSync(path).toString()); - return { - path, - metadata: separated.matter, - body: separated.content, - extension: "emu" - }; -} function parseMarkdown(path, fileContents) { const { content, data } = parseFrontmatter(path, fileContents); @@ -46,11 +35,10 @@ function parseMarkdown(path, fileContents) { function run() { console.log("Running elm-pages..."); - const content = globby.sync([contentGlobPath], {}).map(unpackMarkup); const staticRoutes = generateRecords(); const markdownContent = globby - .sync(["content/**/*.*", "!content/**/*.emu"], {}) + .sync(["content/**/*.*"], {}) .map(unpackFile) .map(({ path, contents }) => { return parseMarkdown(path, contents); @@ -64,7 +52,6 @@ function run() { flags: { argv: process.argv, versionMessage: version, - content, markdownContent, images } @@ -81,7 +68,7 @@ function run() { }); app.ports.writeFile.subscribe(contents => { - const routes = toRoutes(markdownContent.concat(content)); + const routes = toRoutes(markdownContent); let resolvePageRequests; global.pagesWithRequests = new Promise(function (resolve, reject) { resolvePageRequests = resolve; @@ -92,7 +79,6 @@ function run() { contents.watch ? "dev" : "prod", staticRoutes, markdownContent, - content, function (payload) { if (contents.watch) { startWatchIfNeeded(); @@ -133,7 +119,7 @@ function run() { fs.writeFileSync( "./gen/Pages.elm", - elmPagesUiFile(staticRoutes, markdownContent, content) + elmPagesUiFile(staticRoutes, markdownContent) ); console.log("elm-pages DONE"); diff --git a/generator/src/frontmatter.js b/generator/src/frontmatter.js index 4e68eca0..1f2c84be 100644 --- a/generator/src/frontmatter.js +++ b/generator/src/frontmatter.js @@ -2,22 +2,5 @@ const path = require("path"); const matter = require("gray-matter"); module.exports = function parseFrontmatter(filePath, fileContents) { - return path.extname(filePath) === ".emu" - ? matter(fileContents, markupFrontmatterOptions) - : matter(fileContents); -}; - -const markupFrontmatterOptions = { - language: "markup", - engines: { - markup: { - parse: function(string) { - return string; - }, - - stringify: function(string) { - return string; - } - } - } + return matter(fileContents); }; diff --git a/generator/src/generate-elm-stuff.js b/generator/src/generate-elm-stuff.js index a1893579..f416e32a 100644 --- a/generator/src/generate-elm-stuff.js +++ b/generator/src/generate-elm-stuff.js @@ -10,7 +10,6 @@ module.exports = function run( mode, staticRoutes, markdownContent, - markupContent, callback ) { ensureDirSync("./elm-stuff"); @@ -19,12 +18,12 @@ module.exports = function run( // prevent compilation errors if migrating from previous elm-pages version deleteIfExists("./elm-stuff/elm-pages/Pages/ContentCache.elm"); deleteIfExists("./elm-stuff/elm-pages/Pages/Platform.elm"); - + // write `Pages.elm` with cli interface fs.writeFileSync( "./elm-stuff/elm-pages/Pages.elm", - elmPagesCliFile(staticRoutes, markdownContent, markupContent) + elmPagesCliFile(staticRoutes, markdownContent) ); // write modified elm.json to elm-stuff/elm-pages/ diff --git a/generator/src/generate-raw-content.js b/generator/src/generate-raw-content.js index c35ab248..b95c78b3 100644 --- a/generator/src/generate-raw-content.js +++ b/generator/src/generate-raw-content.js @@ -1,9 +1,9 @@ const path = require("path"); -module.exports = function(markdown, markup, includeBody) { +module.exports = function (markdown, includeBody) { return `content : List ( List String, { extension: String, frontMatter : String, body : Maybe String } ) content = - [ ${markdown.concat(markup).map(entry => toEntry(entry, includeBody))} + [ ${markdown.map(entry => toEntry(entry, includeBody))} ]`; }; diff --git a/src/Pages/ContentCache.elm b/src/Pages/ContentCache.elm index 9567aa0e..faec44f7 100644 --- a/src/Pages/ContentCache.elm +++ b/src/Pages/ContentCache.elm @@ -21,16 +21,12 @@ import Html exposing (Html) import Html.Attributes as Attr import Http import Json.Decode as Decode -import Mark -import Mark.Error import Pages.Document as Document exposing (Document) import Pages.Internal.String as String import Pages.PagePath as PagePath exposing (PagePath) -import Result.Extra import Task exposing (Task) import TerminalText as Terminal import Url exposing (Url) -import Url.Builder type alias Content = @@ -283,16 +279,6 @@ type alias Page metadata view pathKey = } -renderErrors : ( List String, List Mark.Error.Error ) -> Html msg -renderErrors ( path, errors ) = - Html.div [] - [ Html.text (String.join "/" path) - , errors - |> List.map (Mark.Error.toHtml Mark.Error.Light) - |> Html.div [] - ] - - combineTupleResults : List ( List String, Result error success ) -> Result (List error) (List ( List String, success )) diff --git a/src/Pages/Document.elm b/src/Pages/Document.elm index fabedb3c..ee899bdf 100644 --- a/src/Pages/Document.elm +++ b/src/Pages/Document.elm @@ -1,6 +1,6 @@ module Pages.Document exposing ( Document, DocumentHandler - , parser, markupParser + , parser , fromList, get ) @@ -80,7 +80,7 @@ Hello!!! ) @docs Document, DocumentHandler -@docs parser, markupParser +@docs parser ## Functions for use by generated code @@ -92,8 +92,6 @@ Hello!!! import Dict exposing (Dict) import Html exposing (Html) import Json.Decode -import Mark -import Mark.Error {-| Represents all of the `DocumentHandler`s. You register a handler for each @@ -157,54 +155,3 @@ parser { extension, body, metadata } = |> Result.mapError Json.Decode.errorToString } ) - - -{-| Register an [`elm-markup`](https://github.com/mdgriffith/elm-markup/) -parser for your `.emu` files. --} -markupParser : - Mark.Document metadata - -> Mark.Document view - -> ( String, DocumentHandler metadata view ) -markupParser metadataParser markBodyParser = - ( "emu" - , DocumentHandler - { contentParser = renderMarkup markBodyParser - , frontmatterParser = - \frontMatter -> - Mark.compile metadataParser - frontMatter - |> (\outcome -> - case outcome of - Mark.Success parsedMetadata -> - Ok parsedMetadata - - Mark.Failure failure -> - Err "Failure" - - Mark.Almost failure -> - Err "Almost failure" - ) - } - ) - - -renderMarkup : Mark.Document view -> String -> Result String view -renderMarkup markBodyParser markupBody = - Mark.compile - markBodyParser - (markupBody |> String.trimLeft) - |> (\outcome -> - case outcome of - Mark.Success renderedView -> - Ok renderedView - - Mark.Failure failures -> - failures - |> List.map Mark.Error.toString - |> String.join "\n" - |> Err - - Mark.Almost failure -> - Err "TODO almost failure" - ) diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index 0409fa5c..660d6d85 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -1,4 +1,4 @@ -module Pages.Internal.Platform exposing (Content, Flags, Model, Msg, Page, Parser, Program, application, cliApplication) +module Pages.Internal.Platform exposing (Content, Flags, Model, Msg, Page, Program, application, cliApplication) import Browser import Browser.Dom as Dom @@ -10,8 +10,6 @@ import Html.Attributes import Http import Json.Decode as Decode import Json.Encode -import List.Extra -import Mark import Pages.ContentCache as ContentCache exposing (ContentCache) import Pages.Document import Pages.Internal.ApplicationType as ApplicationType @@ -608,13 +606,6 @@ update content allRoutes canonicalSiteUrl viewFunction pathKey onPageChangeMsg t ( model, Cmd.none ) -type alias Parser metadata view = - Dict String String - -> List String - -> List ( List String, metadata ) - -> Mark.Document view - - application : { init : Maybe From 4e8a82bd357787245e573d4e4031316d3a7af351 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 19 Apr 2020 18:32:44 -0700 Subject: [PATCH 27/73] Change formatting. --- generator/src/add-files-plugin.js | 50 +++++++++++++++---------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index d6881882..344fd5d9 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -33,39 +33,39 @@ module.exports = class AddFilesPlugin { .map(unpackFile); global.pagesWithRequests.then(pageWithRequests => { - files.forEach(file => { - // Couldn't find this documented in the webpack docs, - // but I found the example code for it here: - // https://github.com/jantimon/html-webpack-plugin/blob/35a154186501fba3ecddb819b6f632556d37a58f/index.js#L470-L478 + files.forEach(file => { + // Couldn't find this documented in the webpack docs, + // but I found the example code for it here: + // https://github.com/jantimon/html-webpack-plugin/blob/35a154186501fba3ecddb819b6f632556d37a58f/index.js#L470-L478 - let route = file.baseRoute.replace(/\/$/, ''); + let route = file.baseRoute.replace(/\/$/, ''); const staticRequests = pageWithRequests[route]; - const filename = path.join(file.baseRoute, "content.json"); - // compilation.fileDependencies.add(filename); + const filename = path.join(file.baseRoute, "content.json"); + // compilation.fileDependencies.add(filename); compilation.fileDependencies.add(path.resolve(file.filePath)); - const rawContents = JSON.stringify({ - body: file.content, - staticData: staticRequests || {} + const rawContents = JSON.stringify({ + body: file.content, + staticData: staticRequests || {} + }); + + compilation.assets[filename] = { + source: () => rawContents, + size: () => rawContents.length + }; }); - compilation.assets[filename] = { - source: () => rawContents, - size: () => rawContents.length - }; - }); - (global.filesToGenerate || []).forEach(file => { - // Couldn't find this documented in the webpack docs, - // but I found the example code for it here: - // https://github.com/jantimon/html-webpack-plugin/blob/35a154186501fba3ecddb819b6f632556d37a58f/index.js#L470-L478 - compilation.assets[file.path] = { - source: () => file.content, - size: () => file.content.length - }; - }); + // Couldn't find this documented in the webpack docs, + // but I found the example code for it here: + // https://github.com/jantimon/html-webpack-plugin/blob/35a154186501fba3ecddb819b6f632556d37a58f/index.js#L470-L478 + compilation.assets[file.path] = { + source: () => file.content, + size: () => file.content.length + }; + }); - callback() + callback() }) }); } From ccc13a4ad11834e474a5e4989f551e3ffed05ba8 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 19 Apr 2020 19:52:13 -0700 Subject: [PATCH 28/73] Remove unneeded .emu exclusion. Fixes #78. --- generator/src/add-files-plugin.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index 344fd5d9..c9d446ff 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -29,7 +29,7 @@ module.exports = class AddFilesPlugin { apply(/** @type {webpack.Compiler} */ compiler) { compiler.hooks.afterCompile.tapAsync("AddFilesPlugin", (compilation, callback) => { const files = globby - .sync(["content/**/*.*", "!content/**/*.emu"], {}) + .sync(["content/**/*.*"], {}) .map(unpackFile); global.pagesWithRequests.then(pageWithRequests => { From 53b8b014feda032e1ce8c0f67e4d8f7bfa9bfba1 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 19 Apr 2020 20:03:00 -0700 Subject: [PATCH 29/73] Don't exit dev server process on CLI phase error, just print error for now. Eventually want to display the error like a compiler error in the browser window Webpack banner. --- generator/src/compile-elm.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/generator/src/compile-elm.js b/generator/src/compile-elm.js index 976dea76..a69f30cf 100644 --- a/generator/src/compile-elm.js +++ b/generator/src/compile-elm.js @@ -24,7 +24,7 @@ function runElm(/** @type string */ mode, /** @type any */ callback) { callback(payload.args[0]); } else { console.log(payload.args[0]); - process.exit(1); + // process.exit(1); } delete Elm; console.warn = warnOriginal; From 613cc02b3c95bdba0cb85840fd80f7ecae3d219d Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 20 Apr 2020 15:06:26 -0700 Subject: [PATCH 30/73] Update webpack html plugin. --- package-lock.json | 39 ++++++++++++++++++++++++++++++++++++--- package.json | 2 +- 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index a4b817fe..a9696e8d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1224,6 +1224,11 @@ "@types/node": "*" } }, + "@types/html-minifier-terser": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.0.0.tgz", + "integrity": "sha512-q95SP4FdkmF0CwO0F2q0H6ZgudsApaY/yCtAQNRn1gduef5fGpyEphzy0YCq/N0UFvDSnLg5V8jFK/YGXlDiCw==" + }, "@types/imagemin": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/@types/imagemin/-/imagemin-7.0.0.tgz", @@ -6203,16 +6208,44 @@ } }, "html-webpack-plugin": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz", - "integrity": "sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.2.0.tgz", + "integrity": "sha512-zL7LYTuq/fcJX6vV6tmmvFR508Bd9e6kvVGbS76YAjZ2CPVRzsjkvDYs/SshPevpolSdTWgaDV39D6k6oQoVFw==", "requires": { + "@types/html-minifier-terser": "^5.0.0", + "@types/tapable": "^1.0.5", + "@types/webpack": "^4.41.8", "html-minifier-terser": "^5.0.1", "loader-utils": "^1.2.3", "lodash": "^4.17.15", "pretty-error": "^2.1.1", "tapable": "^1.1.3", "util.promisify": "1.0.0" + }, + "dependencies": { + "@types/tapable": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.5.tgz", + "integrity": "sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==" + }, + "@types/webpack": { + "version": "4.41.12", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.12.tgz", + "integrity": "sha512-BpCtM4NnBen6W+KEhrL9jKuZCXVtiH6+0b6cxdvNt2EwU949Al334PjQSl2BeAyvAX9mgoNNG21wvjP3xZJJ5w==", + "requires": { + "@types/anymatch": "*", + "@types/node": "*", + "@types/tapable": "*", + "@types/uglify-js": "*", + "@types/webpack-sources": "*", + "source-map": "^0.6.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + } } }, "htmlparser2": { diff --git a/package.json b/package.json index 94ca376e..e4682616 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,7 @@ "globby": "^10.0.1", "google-closure-compiler": "^20190909.0.0", "gray-matter": "^4.0.2", - "html-webpack-plugin": "^4.0.0-beta.11", + "html-webpack-plugin": "^4.2.0", "imagemin-mozjpeg": "^8.0.0", "imagemin-webpack-plugin": "^2.4.2", "lodash": "4.17.15", From b2e66174e992c4e8d1cc1d9e3a49d739280da4d5 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 20 Apr 2020 15:06:58 -0700 Subject: [PATCH 31/73] Reorder constant declaration. --- generator/src/develop.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/generator/src/develop.js b/generator/src/develop.js index da2d95c4..968d78d7 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -52,14 +52,14 @@ function start({ routes, debug, customPort, manifestConfig, routesWithRequests, const isPage = routes.includes(route); compiler.outputFileSystem.readFile(filename, function (err, result) { - const contents = isPage - ? replaceBaseAndLinks(result.toString(), route) - : result - if (err) { return next(err); } + const contents = isPage + ? replaceBaseAndLinks(result.toString(), route) + : result + res.set("content-type", "text/html"); res.send(contents); res.end(); From 4aae3096658fa3771a5f9aee186de00c590db196 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 20 Apr 2020 15:12:20 -0700 Subject: [PATCH 32/73] Add wiring for setting up HMR plugin with custom styling. --- generator/src/develop.js | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/generator/src/develop.js b/generator/src/develop.js index 968d78d7..edc066c7 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -354,7 +354,7 @@ function webpackOptions( } else { return merge(common, { entry: [ - require.resolve("webpack-hot-middleware/client"), + hmrClientPath(), "./index.js", ], plugins: [ @@ -385,6 +385,17 @@ function webpackOptions( } } +function hmrClientPath() { + // return require.resolve("webpack-hot-middleware/client"); + var ansiColors = { + // red: 'FF0000' // note the lack of "#" + }; + var overlayStyles = { + // color: '#FF0000' // note the inclusion of "#" (these options would be the equivalent of div.style[option] = value) + }; + return `${require.resolve("webpack-hot-middleware/client")}?ansiColors=${encodeURIComponent(JSON.stringify(ansiColors))}&overlayStyles=${encodeURIComponent(JSON.stringify(overlayStyles))}`; +} + function cleanRoute(route) { return route.replace(/(^\/|\/$)/, "") From 20339f7256e3646d807467d6afe6920cce9197b7 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 20 Apr 2020 17:12:16 -0700 Subject: [PATCH 33/73] Display build errors in overlay. --- generator/src/add-files-plugin.js | 4 +++ generator/src/compile-elm.js | 54 +++++++++++++++-------------- generator/src/develop.js | 29 ++++++++++++++++ generator/src/elm-pages.js | 9 +++-- generator/src/generate-elm-stuff.js | 2 +- src/TerminalText.elm | 4 +-- 6 files changed, 71 insertions(+), 31 deletions(-) diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index c9d446ff..e80023ad 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -65,6 +65,10 @@ module.exports = class AddFilesPlugin { }; }); + callback() + }).catch(errorPayload => { + + compilation.errors.push(new Error(errorPayload)) callback() }) }); diff --git a/generator/src/compile-elm.js b/generator/src/compile-elm.js index a69f30cf..2aef20d6 100644 --- a/generator/src/compile-elm.js +++ b/generator/src/compile-elm.js @@ -2,33 +2,35 @@ const { compileToString } = require("../node-elm-compiler/index.js"); XMLHttpRequest = require("xhr2"); module.exports = runElm; -function runElm(/** @type string */ mode, /** @type any */ callback) { - const elmBaseDirectory = "./elm-stuff/elm-pages"; - const mainElmFile = "../../src/Main.elm"; - const startingDir = process.cwd(); - process.chdir(elmBaseDirectory); - compileToString([mainElmFile], {}).then(function (data) { - (function () { - const warnOriginal = console.warn; - console.warn = function () { }; - eval(data.toString()); - const app = Elm.Main.init({ - flags: { secrets: process.env, mode, staticHttpCache: global.staticHttpCache } - }); +function runElm(/** @type string */ mode) { + return new Promise((resolve, reject) => { + const elmBaseDirectory = "./elm-stuff/elm-pages"; + const mainElmFile = "../../src/Main.elm"; + const startingDir = process.cwd(); + process.chdir(elmBaseDirectory); + compileToString([mainElmFile], {}).then(function (data) { + (function () { + const warnOriginal = console.warn; + console.warn = function () { }; + eval(data.toString()); + const app = Elm.Main.init({ + flags: { secrets: process.env, mode, staticHttpCache: global.staticHttpCache } + }); - app.ports.toJsPort.subscribe(payload => { - process.chdir(startingDir); + app.ports.toJsPort.subscribe(payload => { + process.chdir(startingDir); - if (payload.tag === "Success") { - global.staticHttpCache = payload.args[0].staticHttpCache; - callback(payload.args[0]); - } else { - console.log(payload.args[0]); - // process.exit(1); - } - delete Elm; - console.warn = warnOriginal; - }); - })(); + if (payload.tag === "Success") { + global.staticHttpCache = payload.args[0].staticHttpCache; + resolve(payload.args[0]) + } else { + reject(payload.args[0]) + } + delete Elm; + console.warn = warnOriginal; + }); + })(); + + }) }); } diff --git a/generator/src/develop.js b/generator/src/develop.js index edc066c7..7e596f57 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -389,9 +389,38 @@ function hmrClientPath() { // return require.resolve("webpack-hot-middleware/client"); var ansiColors = { // red: 'FF0000' // note the lack of "#" + // reset: ['ffffff', '0000000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] + reset: ['ffffff', 'transparent'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] + black: '000', + red: 'ff0000', + green: '209805', + yellow: 'e8bf03', + blue: '0000ff', + magenta: 'ff00ff', + cyan: '00ffee', + lightgrey: 'f0f0f0', + darkgrey: '888' }; var overlayStyles = { + // options from https://github.com/webpack-contrib/webpack-hot-middleware/blob/master/client-overlay.js + // color: '#FF0000' // note the inclusion of "#" (these options would be the equivalent of div.style[option] = value) + background: 'rgba(0,0,0,0.90)', + color: '#e8e8e8', + lineHeight: '1.6', + whiteSpace: 'pre-wrap', + fontFamily: 'Menlo, Consolas, monospace', + fontSize: '16px', + // position: 'fixed', + // zIndex: 9999, + // padding: '10px', + // left: 0, + // right: 0, + // top: 0, + // bottom: 0, + // overflow: 'auto', + // dir: 'ltr', + // textAlign: 'left', }; return `${require.resolve("webpack-hot-middleware/client")}?ansiColors=${encodeURIComponent(JSON.stringify(ansiColors))}&overlayStyles=${encodeURIComponent(JSON.stringify(overlayStyles))}`; } diff --git a/generator/src/elm-pages.js b/generator/src/elm-pages.js index a209eb4d..8a831cff 100755 --- a/generator/src/elm-pages.js +++ b/generator/src/elm-pages.js @@ -70,15 +70,18 @@ function run() { app.ports.writeFile.subscribe(contents => { const routes = toRoutes(markdownContent); let resolvePageRequests; + let rejectPageRequests; global.pagesWithRequests = new Promise(function (resolve, reject) { resolvePageRequests = resolve; + rejectPageRequests = reject; }); doCliStuff( contents.watch ? "dev" : "prod", staticRoutes, - markdownContent, + markdownContent + ).then( function (payload) { if (contents.watch) { startWatchIfNeeded(); @@ -124,7 +127,9 @@ function run() { console.log("elm-pages DONE"); } - ); + ).catch(function (errorPayload) { + rejectPageRequests(errorPayload); + }); }); } diff --git a/generator/src/generate-elm-stuff.js b/generator/src/generate-elm-stuff.js index f416e32a..03551ed2 100644 --- a/generator/src/generate-elm-stuff.js +++ b/generator/src/generate-elm-stuff.js @@ -30,5 +30,5 @@ module.exports = function run( copyModifiedElmJson(); // run Main.elm from elm-stuff/elm-pages with `runElm` - runElm(mode, callback); + return runElm(mode, callback); }; diff --git a/src/TerminalText.elm b/src/TerminalText.elm index 64032981..be720948 100644 --- a/src/TerminalText.elm +++ b/src/TerminalText.elm @@ -68,10 +68,10 @@ colorToString color = "[34m" Green -> - "[32;1m" + "[32m" Yellow -> - "[33;1m" + "[33m" Cyan -> "[36m" From e31f6d39772881307072bea7f329499e15f39aa2 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 20 Apr 2020 17:33:08 -0700 Subject: [PATCH 34/73] Update ANSI color scheme. --- generator/src/develop.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/generator/src/develop.js b/generator/src/develop.js index 7e596f57..d2fce370 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -392,12 +392,12 @@ function hmrClientPath() { // reset: ['ffffff', '0000000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] reset: ['ffffff', 'transparent'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] black: '000', - red: 'ff0000', - green: '209805', - yellow: 'e8bf03', - blue: '0000ff', - magenta: 'ff00ff', - cyan: '00ffee', + red: 'c91b00', + green: '00c200', + yellow: 'c7c400', + blue: '0225c7', + magenta: 'c930c7', + cyan: '00c5c7', lightgrey: 'f0f0f0', darkgrey: '888' }; From 463bec6602a0b1ac143e702a2fb5312adc3b0139 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Wed, 22 Apr 2020 06:54:36 -0700 Subject: [PATCH 35/73] Add lukewestby as contributor. --- .all-contributorsrc | 12 +++++++++++- README.md | 6 ++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/.all-contributorsrc b/.all-contributorsrc index aae55c7f..cd42f78a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -40,6 +40,15 @@ "contributions": [ "code" ] + }, + { + "login": "lukewestby", + "name": "Luke Westby", + "avatar_url": "https://avatars1.githubusercontent.com/u/1508245?v=4", + "profile": "https://sunrisemovement.com", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, @@ -47,5 +56,6 @@ "projectOwner": "dillonkearns", "repoType": "github", "repoHost": "https://github.com", - "skipCi": true + "skipCi": true, + "commitConvention": "none" } diff --git a/README.md b/README.md index a9bfa7a3..a8fc0e9d 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,7 @@ # `elm-pages` [![Netlify Status](https://api.netlify.com/api/v1/badges/8ee4a674-4f37-4f16-b99e-607c0a02ee75/deploy-status)](https://app.netlify.com/sites/elm-pages/deploys) [![Build Status](https://github.com/dillonkearns/elm-pages/workflows/Elm%20CI/badge.svg)](https://github.com/dillonkearns/elm-pages/actions?query=branch%3Amaster) [![npm](https://img.shields.io/npm/v/elm-pages.svg)](https://npmjs.com/package/elm-pages) [![Elm package](https://img.shields.io/elm-package/v/dillonkearns/elm-pages.svg)](https://package.elm-lang.org/packages/dillonkearns/elm-pages/latest/) - -[![All Contributors](https://img.shields.io/badge/all_contributors-3-orange.svg?style=flat-square)](#contributors-) - +[![All Contributors](https://img.shields.io/badge/all_contributors-5-orange.svg?style=flat-square)](#contributors-) [![Deploy to Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/dillonkearns/elm-pages-starter) @@ -165,12 +163,12 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
Steven Vandevelde

💻
Johannes Maas

📓
Wiktor Toporek

💻 +
Luke Westby

💻 - This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome! From 171eefbb05acdc540f8f0e3c51a1badc1cdff0d9 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Wed, 22 Apr 2020 18:00:46 -0700 Subject: [PATCH 36/73] Remove unused argument. --- generator/src/generate-elm-stuff.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/generator/src/generate-elm-stuff.js b/generator/src/generate-elm-stuff.js index 03551ed2..507305d3 100644 --- a/generator/src/generate-elm-stuff.js +++ b/generator/src/generate-elm-stuff.js @@ -9,8 +9,7 @@ const { ensureDirSync, deleteIfExists } = require('./file-helpers.js') module.exports = function run( mode, staticRoutes, - markdownContent, - callback + markdownContent ) { ensureDirSync("./elm-stuff"); ensureDirSync("./elm-stuff/elm-pages"); @@ -30,5 +29,5 @@ module.exports = function run( copyModifiedElmJson(); // run Main.elm from elm-stuff/elm-pages with `runElm` - return runElm(mode, callback); + return runElm(mode); }; From 3622269e362e692051e097fb5c4a8dab83517760 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Wed, 22 Apr 2020 18:02:34 -0700 Subject: [PATCH 37/73] Add StaticHttp.fail function. --- src/Pages/StaticHttp.elm | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/src/Pages/StaticHttp.elm b/src/Pages/StaticHttp.elm index 3336e72f..fdca48b7 100644 --- a/src/Pages/StaticHttp.elm +++ b/src/Pages/StaticHttp.elm @@ -1,7 +1,7 @@ module Pages.StaticHttp exposing ( Request, RequestDetails , get, request - , map, succeed + , map, succeed, fail , Body, emptyBody, stringBody, jsonBody , andThen, resolve, combine , map2, map3, map4, map5, map6, map7, map8, map9 @@ -40,7 +40,7 @@ in [this article introducing StaticHttp requests and some concepts around it](ht @docs Request, RequestDetails @docs get, request -@docs map, succeed +@docs map, succeed, fail ## Building a StaticHttp Request Body @@ -444,6 +444,18 @@ succeed value = ) +{-| TODO +-} +fail : String -> Request a +fail errorMessage = + Request + ( [] + , \appType rawResponses -> + -- TODO add a new variant for this + Err (Pages.StaticHttpRequest.DecoderError "") + ) + + {-| A simplified helper around [`StaticHttp.request`](#request), which builds up a StaticHttp GET request. import Json.Decode as Decode exposing (Decoder) From 003f35be3a9e6d7a25c57df9ccbe8d1a304c2330 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Wed, 22 Apr 2020 18:03:37 -0700 Subject: [PATCH 38/73] Pull up require statement. --- generator/src/develop.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/generator/src/develop.js b/generator/src/develop.js index d2fce370..e9b7189a 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -14,6 +14,7 @@ const imageminMozjpeg = require("imagemin-mozjpeg"); const express = require("express"); const ClosurePlugin = require("closure-webpack-plugin"); const readline = require("readline"); +const webpackDevMiddleware = require("webpack-dev-middleware"); module.exports = { start, run }; function start({ routes, debug, customPort, manifestConfig, routesWithRequests, filesToGenerate }) { @@ -39,7 +40,7 @@ function start({ routes, debug, customPort, manifestConfig, routesWithRequests, app.use('/images', express.static(path.resolve(process.cwd(), "./images"))); - app.use(require("webpack-dev-middleware")(compiler, options)); + app.use(webpackDevMiddleware(compiler, options)); app.use(require("webpack-hot-middleware")(compiler, { log: console.log, path: '/__webpack_hmr' })) From 701e27953eb7aa9b4bda2a99e1f73cd3fb94bd31 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Wed, 22 Apr 2020 18:15:37 -0700 Subject: [PATCH 39/73] Get dev server running when there is an error on initial run. --- generator/src/add-files-plugin.js | 17 +++++++++++---- generator/src/develop.js | 31 ++++++++++++++++++++++++--- generator/src/elm-pages.js | 35 ++++++++++++++++++++++++++++++- generator/src/template.html | 23 -------------------- 4 files changed, 75 insertions(+), 31 deletions(-) delete mode 100644 generator/src/template.html diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index e80023ad..4a7aaab1 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -32,14 +32,25 @@ module.exports = class AddFilesPlugin { .sync(["content/**/*.*"], {}) .map(unpackFile); + + let staticRequestData = {} global.pagesWithRequests.then(pageWithRequests => { + + if (pageWithRequests.type === 'error') { + compilation.errors.push(new Error(pageWithRequests.message)) + } else { + staticRequestData = pageWithRequests + } + }) + .finally(() => { + files.forEach(file => { // Couldn't find this documented in the webpack docs, // but I found the example code for it here: // https://github.com/jantimon/html-webpack-plugin/blob/35a154186501fba3ecddb819b6f632556d37a58f/index.js#L470-L478 let route = file.baseRoute.replace(/\/$/, ''); - const staticRequests = pageWithRequests[route]; + const staticRequests = staticRequestData[route]; const filename = path.join(file.baseRoute, "content.json"); // compilation.fileDependencies.add(filename); @@ -66,11 +77,9 @@ module.exports = class AddFilesPlugin { }); callback() - }).catch(errorPayload => { - compilation.errors.push(new Error(errorPayload)) - callback() }) + }); } }; diff --git a/generator/src/develop.js b/generator/src/develop.js index e9b7189a..a85af302 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -168,7 +168,32 @@ function webpackOptions( new HTMLWebpackPlugin({ inject: "head", - template: path.resolve(__dirname, "template.html") + templateContent: ` + + + + + + + + + + + + + + + + +` }), new ScriptExtHtmlWebpackPlugin({ preload: /\.js$/, @@ -360,9 +385,9 @@ function webpackOptions( ], plugins: [ new webpack.NamedModulesPlugin(), + new webpack.HotModuleReplacementPlugin(), // Prevents compilation errors causing the hot loader to lose state - new webpack.NoEmitOnErrorsPlugin(), - new webpack.HotModuleReplacementPlugin() + // new webpack.NoEmitOnErrorsPlugin(), ], module: { rules: [ diff --git a/generator/src/elm-pages.js b/generator/src/elm-pages.js index 8a831cff..78ce9316 100755 --- a/generator/src/elm-pages.js +++ b/generator/src/elm-pages.js @@ -22,6 +22,26 @@ function unpackFile(path) { return { path, contents: fs.readFileSync(path).toString() }; } +const stubManifest = { + sourceIcon: 'images/icon-png.png', + background_color: '#ffffff', + orientation: 'portrait', + display: 'standalone', + categories: ['education'], + description: 'elm-pages - A statically typed site generator.', + name: 'elm-pages docs', + prefer_related_applications: false, + related_applications: [], + theme_color: '#ffffff', + start_url: '', + short_name: 'elm-pages', + serviceworker: { + src: '../service-worker.js', + scope: '/', + type: '', + update_via_cache: 'none' + } +} function parseMarkdown(path, fileContents) { const { content, data } = parseFrontmatter(path, fileContents); @@ -128,7 +148,20 @@ function run() { } ).catch(function (errorPayload) { - rejectPageRequests(errorPayload); + startWatchIfNeeded() + resolvePageRequests({ type: 'error', message: errorPayload }); + if (!devServerRunning) { + devServerRunning = true; + develop.start({ + routes, + debug: contents.debug, + manifestConfig: stubManifest, + routesWithRequests: {}, + filesToGenerate: [], + customPort: contents.customPort + }); + } + }); }); } diff --git a/generator/src/template.html b/generator/src/template.html deleted file mode 100644 index 743acc5f..00000000 --- a/generator/src/template.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - From cb0f4cbed46cfe8f38c2a4e391c3a0a10aa4c655 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sat, 2 May 2020 17:22:53 -0700 Subject: [PATCH 40/73] Generate Pages.elm module from a Webpack plugin so it hooks into the lifecycle more smoothly. --- generator/src/add-files-plugin.js | 9 +- generator/src/compile-elm.js | 44 +++--- generator/src/develop.js | 5 +- generator/src/elm-pages.js | 140 ++++++++++-------- generator/src/generate-elm-stuff.js | 12 +- .../src/plugin-generate-elm-pages-build.js | 94 ++++++++++++ index.js | 29 +++- src/Pages/Internal/Platform.elm | 51 +++++-- 8 files changed, 267 insertions(+), 117 deletions(-) create mode 100644 generator/src/plugin-generate-elm-pages-build.js diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index 4a7aaab1..4f7fdc48 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -27,10 +27,10 @@ module.exports = class AddFilesPlugin { this.filesToGenerate = filesToGenerate; } apply(/** @type {webpack.Compiler} */ compiler) { - compiler.hooks.afterCompile.tapAsync("AddFilesPlugin", (compilation, callback) => { - const files = globby - .sync(["content/**/*.*"], {}) - .map(unpackFile); + compiler.hooks.emit.tapAsync("AddFilesPlugin", (compilation, callback) => { + + + const files = globby.sync("content").map(unpackFile); let staticRequestData = {} @@ -53,6 +53,7 @@ module.exports = class AddFilesPlugin { const staticRequests = staticRequestData[route]; const filename = path.join(file.baseRoute, "content.json"); + compilation.contextDependencies.add('content') // compilation.fileDependencies.add(filename); compilation.fileDependencies.add(path.resolve(file.filePath)); const rawContents = JSON.stringify({ diff --git a/generator/src/compile-elm.js b/generator/src/compile-elm.js index 2aef20d6..d69e72ba 100644 --- a/generator/src/compile-elm.js +++ b/generator/src/compile-elm.js @@ -1,4 +1,4 @@ -const { compileToString } = require("../node-elm-compiler/index.js"); +const { compileToStringSync } = require("../node-elm-compiler/index.js"); XMLHttpRequest = require("xhr2"); module.exports = runElm; @@ -8,29 +8,29 @@ function runElm(/** @type string */ mode) { const mainElmFile = "../../src/Main.elm"; const startingDir = process.cwd(); process.chdir(elmBaseDirectory); - compileToString([mainElmFile], {}).then(function (data) { - (function () { - const warnOriginal = console.warn; - console.warn = function () { }; - eval(data.toString()); - const app = Elm.Main.init({ - flags: { secrets: process.env, mode, staticHttpCache: global.staticHttpCache } - }); + const data = compileToStringSync([mainElmFile], {}); + process.chdir(startingDir); + (function () { + const warnOriginal = console.warn; + console.warn = function () { }; + eval(data.toString()); + const app = Elm.Main.init({ + flags: { secrets: process.env, mode, staticHttpCache: global.staticHttpCache } + }); - app.ports.toJsPort.subscribe(payload => { - process.chdir(startingDir); + app.ports.toJsPort.subscribe(payload => { + + if (payload.tag === "Success") { + global.staticHttpCache = payload.args[0].staticHttpCache; + resolve(payload.args[0]) + } else { + reject(payload.args[0]) + } + delete Elm; + console.warn = warnOriginal; + }); + })(); - if (payload.tag === "Success") { - global.staticHttpCache = payload.args[0].staticHttpCache; - resolve(payload.args[0]) - } else { - reject(payload.args[0]) - } - delete Elm; - console.warn = warnOriginal; - }); - })(); - }) }); } diff --git a/generator/src/develop.js b/generator/src/develop.js index a85af302..9532e8f3 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -1,5 +1,4 @@ const webpack = require("webpack"); -const middleware = require("webpack-dev-middleware"); const path = require("path"); const HTMLWebpackPlugin = require("html-webpack-plugin"); const ScriptExtHtmlWebpackPlugin = require('script-ext-html-webpack-plugin'); @@ -15,6 +14,7 @@ const express = require("express"); const ClosurePlugin = require("closure-webpack-plugin"); const readline = require("readline"); const webpackDevMiddleware = require("webpack-dev-middleware"); +const PluginGenerateElmPagesBuild = require('./plugin-generate-elm-pages-build') module.exports = { start, run }; function start({ routes, debug, customPort, manifestConfig, routesWithRequests, filesToGenerate }) { @@ -384,10 +384,11 @@ function webpackOptions( "./index.js", ], plugins: [ + new PluginGenerateElmPagesBuild(), new webpack.NamedModulesPlugin(), new webpack.HotModuleReplacementPlugin(), // Prevents compilation errors causing the hot loader to lose state - // new webpack.NoEmitOnErrorsPlugin(), + new webpack.NoEmitOnErrorsPlugin(), ], module: { rules: [ diff --git a/generator/src/elm-pages.js b/generator/src/elm-pages.js index 78ce9316..e4916a06 100755 --- a/generator/src/elm-pages.js +++ b/generator/src/elm-pages.js @@ -6,7 +6,6 @@ const fs = require("fs"); const globby = require("globby"); const develop = require("./develop.js"); const chokidar = require("chokidar"); -const doCliStuff = require("./generate-elm-stuff.js"); const { elmPagesUiFile } = require("./elm-file-constants.js"); const generateRecords = require("./generate-records.js"); const parseFrontmatter = require("./frontmatter.js"); @@ -91,78 +90,91 @@ function run() { const routes = toRoutes(markdownContent); let resolvePageRequests; let rejectPageRequests; - global.pagesWithRequests = new Promise(function (resolve, reject) { - resolvePageRequests = resolve; - rejectPageRequests = reject; + + global.mode = contents.watch ? "dev" : "prod" + // global.pagesWithRequests = new Promise(function (resolve, reject) { + // resolvePageRequests = resolve; + // rejectPageRequests = reject; + // }); + // resolvePageRequests({}); // TODO temporary - do the real resolution + + + develop.start({ + routes, + debug: contents.debug, + manifestConfig: stubManifest, + routesWithRequests: {}, + filesToGenerate: [], + customPort: contents.customPort }); - doCliStuff( - contents.watch ? "dev" : "prod", - staticRoutes, - markdownContent - ).then( - function (payload) { - if (contents.watch) { - startWatchIfNeeded(); - resolvePageRequests(payload.pages); - global.filesToGenerate = payload.filesToGenerate; - if (!devServerRunning) { - devServerRunning = true; - develop.start({ - routes, - debug: contents.debug, - manifestConfig: payload.manifest, - routesWithRequests: payload.pages, - filesToGenerate: payload.filesToGenerate, - customPort: contents.customPort - }); - } - } else { - if (payload.errors && payload.errors.length > 0) { - printErrorsAndExit(payload.errors); - } + // doCliStuff( + // contents.watch ? "dev" : "prod", + // staticRoutes, + // markdownContent + // ).then( + // function (payload) { + // if (contents.watch) { + // startWatchIfNeeded(); + // resolvePageRequests(payload.pages); + // global.filesToGenerate = payload.filesToGenerate; + // if (!devServerRunning) { + // devServerRunning = true; + // develop.start({ + // routes, + // debug: contents.debug, + // manifestConfig: payload.manifest, + // routesWithRequests: payload.pages, + // filesToGenerate: payload.filesToGenerate, + // customPort: contents.customPort + // }); + // } + // } else { + // if (payload.errors && payload.errors.length > 0) { + // printErrorsAndExit(payload.errors); + // } - develop.run( - { - routes, - manifestConfig: payload.manifest, - routesWithRequests: payload.pages, - filesToGenerate: payload.filesToGenerate - }, - () => { } - ); - } + // develop.run( + // { + // routes, + // manifestConfig: payload.manifest, + // routesWithRequests: payload.pages, + // filesToGenerate: payload.filesToGenerate + // }, + // () => { } + // ); + // } - ensureDirSync("./gen"); + // ensureDirSync("./gen"); - // prevent compilation errors if migrating from previous elm-pages version - deleteIfExists("./gen/Pages/ContentCache.elm"); - deleteIfExists("./gen/Pages/Platform.elm"); + // // prevent compilation errors if migrating from previous elm-pages version + // deleteIfExists("./gen/Pages/ContentCache.elm"); + // deleteIfExists("./gen/Pages/Platform.elm"); - fs.writeFileSync( - "./gen/Pages.elm", - elmPagesUiFile(staticRoutes, markdownContent) - ); - console.log("elm-pages DONE"); + // fs.writeFileSync( + // "./gen/Pages.elm", + // elmPagesUiFile(staticRoutes, markdownContent) + // ); + // console.log("elm-pages DONE"); - } - ).catch(function (errorPayload) { - startWatchIfNeeded() - resolvePageRequests({ type: 'error', message: errorPayload }); - if (!devServerRunning) { - devServerRunning = true; - develop.start({ - routes, - debug: contents.debug, - manifestConfig: stubManifest, - routesWithRequests: {}, - filesToGenerate: [], - customPort: contents.customPort - }); - } + // } + // ).catch(function (errorPayload) { + // startWatchIfNeeded() + // resolvePageRequests({ type: 'error', message: errorPayload }); + // if (!devServerRunning) { + // devServerRunning = true; + // develop.start({ + // routes, + // debug: contents.debug, + // manifestConfig: stubManifest, + // routesWithRequests: {}, + // filesToGenerate: [], + // customPort: contents.customPort + // }); + // } - }); + // }); }); } diff --git a/generator/src/generate-elm-stuff.js b/generator/src/generate-elm-stuff.js index 507305d3..01c9fa2e 100644 --- a/generator/src/generate-elm-stuff.js +++ b/generator/src/generate-elm-stuff.js @@ -1,7 +1,7 @@ const fs = require("fs"); const runElm = require("./compile-elm.js"); const copyModifiedElmJson = require("./rewrite-elm-json.js"); -const { elmPagesCliFile } = require("./elm-file-constants.js"); +const { elmPagesCliFile, elmPagesUiFile } = require("./elm-file-constants.js"); const path = require("path"); const { ensureDirSync, deleteIfExists } = require('./file-helpers.js') @@ -19,6 +19,16 @@ module.exports = function run( deleteIfExists("./elm-stuff/elm-pages/Pages/Platform.elm"); + const uiFileContent = elmPagesUiFile(staticRoutes, markdownContent) + if (global.previousUiFileContent != uiFileContent) { + fs.writeFileSync( + "./gen/Pages.elm", + uiFileContent + ); + } + + global.previousUiFileContent = uiFileContent + // write `Pages.elm` with cli interface fs.writeFileSync( "./elm-stuff/elm-pages/Pages.elm", diff --git a/generator/src/plugin-generate-elm-pages-build.js b/generator/src/plugin-generate-elm-pages-build.js new file mode 100644 index 00000000..563c333b --- /dev/null +++ b/generator/src/plugin-generate-elm-pages-build.js @@ -0,0 +1,94 @@ +const fs = require('fs') +const path = require('path') +const doCliStuff = require("./generate-elm-stuff.js"); +const webpack = require('webpack') +const parseFrontmatter = require("./frontmatter.js"); +const generateRecords = require("./generate-records.js"); +const globby = require("globby"); + +module.exports = class PluginGenerateElmPagesBuild { + constructor() { + this.value = 1; + } + + apply(/** @type {webpack.Compiler} */ compiler) { + compiler.hooks.afterEmit.tap('DoneMsg', () => { + console.log('---> DONE!'); + + }) + + compiler.hooks.beforeCompile.tap('PluginGenerateElmPagesBuild', (compilation) => { + // compiler.hooks.thisCompilation.tap('PluginGenerateElmPagesBuild', (compilation) => { + + // compilation.contextDependencies.add('content') + // compiler.hooks.thisCompilation.tap('ThisCompilation', (compilation) => { + console.log('----> PluginGenerateElmPagesBuild'); + const src = `module Example exposing (..) + +value : Int +value = ${this.value++} +` + // console.log('@@@ Writing EXAMPLE module'); + // fs.writeFileSync(path.join(process.cwd(), './src/Example.elm'), src); + + const staticRoutes = generateRecords(); + + const markdownContent = globby + .sync(["content/**/*.*"], {}) + .map(unpackFile) + .map(({ path, contents }) => { + return parseMarkdown(path, contents); + }); + + const images = globby + .sync("images/**/*", {}) + .filter(imagePath => !fs.lstatSync(imagePath).isDirectory()); + + let resolvePageRequests; + let rejectPageRequests; + global.pagesWithRequests = new Promise(function (resolve, reject) { + resolvePageRequests = resolve; + rejectPageRequests = reject; + }); + + doCliStuff( + global.mode, + staticRoutes, + markdownContent + ).then((payload) => { + console.log('PROMISE RESOLVED doCliStuff'); + + + resolvePageRequests(payload.pages); + global.filesToGenerate = payload.filesToGenerate; + + }).catch(function (errorPayload) { + resolvePageRequests({ type: 'error', message: errorPayload }); + }) + + + // compilation.assets['./src/Example.elm'] = { + // source: () => src, + // size: () => src.length + // }; + // callback() + + }); + }; + +} + + +function unpackFile(path) { + return { path, contents: fs.readFileSync(path).toString() }; +} + +function parseMarkdown(path, fileContents) { + const { content, data } = parseFrontmatter(path, fileContents); + return { + path, + metadata: JSON.stringify(data), + body: content, + extension: "md" + }; +} \ No newline at end of file diff --git a/index.js b/index.js index 2a19f9a2..57bc517f 100644 --- a/index.js +++ b/index.js @@ -72,6 +72,20 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) }); + if (module.hot) { + module.hot.addStatusHandler(function (status) { + console.log('HMR', status) + if (status === 'idle') { + + // httpGet(`${window.location.origin}${path}content.json`).then(function (/** @type JSON */ contentJson) { + // // console.log('hot contentJson', contentJson); + + // app.ports.fromJsPort.send({ contentJson: contentJson }); + // }); + // console.log('Reloaded!!!!!!!!!!', status) + } + }); + } // found this trick from https://github.com/roots/sage/issues/1826 @@ -81,18 +95,17 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) const success = reporter.success reporter.success = function () { console.log('SUCCESS'); - app.ports.fromJsPort.send({}); - success() - } + httpGet(`${window.location.origin}${path}content.json`).then(function (/** @type JSON */ contentJson) { + // console.log('hot contentJson', contentJson); - if (module.hot) { - module.hot.addStatusHandler(function (status) { - if (status === 'idle') { - console.log('Reloaded!!!!!!!!!!', status) - } + setTimeout(() => { + app.ports.fromJsPort.send({ contentJson: contentJson }); + }, 0) + success() }); } + return app }); diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index 660d6d85..1999b14a 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -223,6 +223,13 @@ type alias ContentJson = } +contentJsonDecoder : Decode.Decoder ContentJson +contentJsonDecoder = + Decode.map2 ContentJson + (Decode.field "body" Decode.string) + (Decode.field "staticData" (Decode.dict Decode.string)) + + init : pathKey -> String @@ -272,12 +279,6 @@ init pathKey canonicalSiteUrl document toJsPort viewFn content initUserModel fla |> Decode.decodeValue (Decode.field "contentJson" contentJsonDecoder) |> Result.toMaybe - contentJsonDecoder : Decode.Decoder ContentJson - contentJsonDecoder = - Decode.map2 ContentJson - (Decode.field "body" Decode.string) - (Decode.field "staticData" (Decode.dict Decode.string)) - baseUrl = flags |> Decode.decodeValue (Decode.field "baseUrl" Decode.string) @@ -390,7 +391,7 @@ type AppMsg userMsg metadata view | UpdateCacheAndUrl Url (Result Http.Error (ContentCache metadata view)) | UpdateCacheForHotReload (Result Http.Error (ContentCache metadata view)) | PageScrollComplete - | HotReloadComplete + | HotReloadComplete ContentJson type Model userModel userMsg metadata view @@ -592,14 +593,19 @@ update content allRoutes canonicalSiteUrl viewFunction pathKey onPageChangeMsg t PageScrollComplete -> ( model, Cmd.none ) - HotReloadComplete -> - ( model - , ContentCache.init document content (Maybe.map (\cj -> { contentJson = cj, initialUrl = model.url }) Nothing) - |> ContentCache.lazyLoad document - { currentUrl = model.url - , baseUrl = model.baseUrl - } - |> Task.attempt UpdateCacheForHotReload + HotReloadComplete contentJson -> + let + _ = + Debug.log "HotReloadComplete" { keys = Dict.keys contentJson.staticData, url = model.url.path } + in + ( { model | contentCache = ContentCache.init document content (Just { contentJson = contentJson, initialUrl = model.url }) } + , Cmd.none + -- ContentCache.init document content (Maybe.map (\cj -> { contentJson = contentJson, initialUrl = model.url }) Nothing) + --|> ContentCache.lazyLoad document + -- { currentUrl = model.url + -- , baseUrl = model.baseUrl + -- } + --|> Task.attempt UpdateCacheForHotReload ) CliMsg _ -> @@ -709,7 +715,20 @@ application config = [ config.subscriptions model.userModel |> Sub.map UserMsg |> Sub.map AppMsg - , config.fromJsPort |> Sub.map (\_ -> AppMsg HotReloadComplete) + , config.fromJsPort + |> Sub.map + (\decodeValue -> + --let + -- _ = + -- Debug.log "fromJsPort" (decodeValue |> Decode.decodeValue (Decode.field "contentJson" contentJsonDecoder)) + --in + case decodeValue |> Decode.decodeValue (Decode.field "contentJson" contentJsonDecoder) of + Ok contentJson -> + AppMsg (HotReloadComplete contentJson) + + Err error -> + Debug.todo "" + ) ] CliModel _ -> From bbb6c56729be98c8878a8e51ba99d05d00040916 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 3 May 2020 07:09:35 -0700 Subject: [PATCH 41/73] Make sure to get content.json for the current page on hot reload. --- index.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/index.js b/index.js index 57bc517f..48e4a66c 100644 --- a/index.js +++ b/index.js @@ -95,7 +95,8 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) const success = reporter.success reporter.success = function () { console.log('SUCCESS'); - httpGet(`${window.location.origin}${path}content.json`).then(function (/** @type JSON */ contentJson) { + let currentPath = window.location.pathname.replace(/(\w)$/, "$1/") + httpGet(`${window.location.origin}${currentPath}content.json`).then(function (/** @type JSON */ contentJson) { // console.log('hot contentJson', contentJson); setTimeout(() => { From d2968fff898b56a4a91ae9fd3cb92f95753142fa Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 3 May 2020 07:10:27 -0700 Subject: [PATCH 42/73] Show error overlay for metadata parsing errors. --- generator/src/add-files-plugin.js | 69 ++++++++++--------- .../src/plugin-generate-elm-pages-build.js | 2 +- 2 files changed, 37 insertions(+), 34 deletions(-) diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index 4f7fdc48..100f13de 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -34,52 +34,55 @@ module.exports = class AddFilesPlugin { let staticRequestData = {} - global.pagesWithRequests.then(pageWithRequests => { + global.pagesWithRequests.then(payload => { - if (pageWithRequests.type === 'error') { - compilation.errors.push(new Error(pageWithRequests.message)) - } else { - staticRequestData = pageWithRequests + if (payload.type === 'error') { + compilation.errors.push(new Error(payload.message)) + } else if (payload.errors && payload.errors.length > 0) { + compilation.errors.push(new Error(payload.errors[0])) + } + else { + staticRequestData = payload.pages } }) .finally(() => { - files.forEach(file => { - // Couldn't find this documented in the webpack docs, - // but I found the example code for it here: - // https://github.com/jantimon/html-webpack-plugin/blob/35a154186501fba3ecddb819b6f632556d37a58f/index.js#L470-L478 + files.forEach(file => { + // Couldn't find this documented in the webpack docs, + // but I found the example code for it here: + // https://github.com/jantimon/html-webpack-plugin/blob/35a154186501fba3ecddb819b6f632556d37a58f/index.js#L470-L478 - let route = file.baseRoute.replace(/\/$/, ''); + let route = file.baseRoute.replace(/\/$/, ''); const staticRequests = staticRequestData[route]; - const filename = path.join(file.baseRoute, "content.json"); + const filename = path.join(file.baseRoute, "content.json"); compilation.contextDependencies.add('content') - // compilation.fileDependencies.add(filename); - compilation.fileDependencies.add(path.resolve(file.filePath)); - const rawContents = JSON.stringify({ - body: file.content, - staticData: staticRequests || {} + // compilation.fileDependencies.add(filename); + compilation.fileDependencies.add(path.resolve(file.filePath)); + const rawContents = JSON.stringify({ + body: file.content, + staticData: staticRequests || {} + }); + + compilation.assets[filename] = { + source: () => rawContents, + size: () => rawContents.length + }; }); - compilation.assets[filename] = { - source: () => rawContents, - size: () => rawContents.length - }; - }); + (global.filesToGenerate || []).forEach(file => { + // Couldn't find this documented in the webpack docs, + // but I found the example code for it here: + // https://github.com/jantimon/html-webpack-plugin/blob/35a154186501fba3ecddb819b6f632556d37a58f/index.js#L470-L478 + compilation.assets[file.path] = { + source: () => file.content, + size: () => file.content.length + }; + }); - (global.filesToGenerate || []).forEach(file => { - // Couldn't find this documented in the webpack docs, - // but I found the example code for it here: - // https://github.com/jantimon/html-webpack-plugin/blob/35a154186501fba3ecddb819b6f632556d37a58f/index.js#L470-L478 - compilation.assets[file.path] = { - source: () => file.content, - size: () => file.content.length - }; - }); + callback() - callback() - - }) + }) }); } diff --git a/generator/src/plugin-generate-elm-pages-build.js b/generator/src/plugin-generate-elm-pages-build.js index 563c333b..059e35f4 100644 --- a/generator/src/plugin-generate-elm-pages-build.js +++ b/generator/src/plugin-generate-elm-pages-build.js @@ -59,7 +59,7 @@ value = ${this.value++} console.log('PROMISE RESOLVED doCliStuff'); - resolvePageRequests(payload.pages); + resolvePageRequests(payload); global.filesToGenerate = payload.filesToGenerate; }).catch(function (errorPayload) { From 21c7588329e76784a385124265c416a4340b9b32 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 3 May 2020 11:40:47 -0700 Subject: [PATCH 43/73] Use new lifecycle for HMR. --- examples/docs/style.css | 84 ++++++++++++++++++++++++++++++++ index.js | 86 ++++++++++++++++++++++++--------- src/Pages/Internal/Platform.elm | 77 +++++++++++++++++++++++------ 3 files changed, 211 insertions(+), 36 deletions(-) diff --git a/examples/docs/style.css b/examples/docs/style.css index b94a2d6b..a4b1cab8 100644 --- a/examples/docs/style.css +++ b/examples/docs/style.css @@ -38,3 +38,87 @@ display: none !important; } } + +.lds-default { + display: inline-block; + position: relative; + width: 80px; + height: 80px; + background-color: white; +} +.lds-default div { + position: absolute; + width: 6px; + height: 6px; + background: #000; + border-radius: 50%; + animation: lds-default 1.2s linear infinite; +} +.lds-default div:nth-child(1) { + animation-delay: 0s; + top: 37px; + left: 66px; +} +.lds-default div:nth-child(2) { + animation-delay: -0.1s; + top: 22px; + left: 62px; +} +.lds-default div:nth-child(3) { + animation-delay: -0.2s; + top: 11px; + left: 52px; +} +.lds-default div:nth-child(4) { + animation-delay: -0.3s; + top: 7px; + left: 37px; +} +.lds-default div:nth-child(5) { + animation-delay: -0.4s; + top: 11px; + left: 22px; +} +.lds-default div:nth-child(6) { + animation-delay: -0.5s; + top: 22px; + left: 11px; +} +.lds-default div:nth-child(7) { + animation-delay: -0.6s; + top: 37px; + left: 7px; +} +.lds-default div:nth-child(8) { + animation-delay: -0.7s; + top: 52px; + left: 11px; +} +.lds-default div:nth-child(9) { + animation-delay: -0.8s; + top: 62px; + left: 22px; +} +.lds-default div:nth-child(10) { + animation-delay: -0.9s; + top: 66px; + left: 37px; +} +.lds-default div:nth-child(11) { + animation-delay: -1s; + top: 62px; + left: 52px; +} +.lds-default div:nth-child(12) { + animation-delay: -1.1s; + top: 52px; + left: 62px; +} +@keyframes lds-default { + 0%, 20%, 80%, 100% { + transform: scale(1); + } + 50% { + transform: scale(1.5); + } +} diff --git a/index.js b/index.js index 48e4a66c..2b2103b4 100644 --- a/index.js +++ b/index.js @@ -73,38 +73,80 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) if (module.hot) { - module.hot.addStatusHandler(function (status) { - console.log('HMR', status) - if (status === 'idle') { - // httpGet(`${window.location.origin}${path}content.json`).then(function (/** @type JSON */ contentJson) { - // // console.log('hot contentJson', contentJson); + // found this trick in the next.js source code + // https://github.com/zeit/next.js/blob/886037b1bac4bdbfeb689b032c1612750fb593f7/packages/next/client/dev/error-overlay/eventsource.js + // https://github.com/zeit/next.js/blob/886037b1bac4bdbfeb689b032c1612750fb593f7/packages/next/client/dev/dev-build-watcher.js + // more details about this API at https://www.html5rocks.com/en/tutorials/eventsource/basics/ + let source = new window.EventSource('/__webpack_hmr') + // source.addEventListener('open', () => { console.log('open!!!!!') }) + source.addEventListener('message', (e) => { + // console.log('message!!!!!', e) + // console.log(e.data.action) + // console.log('ACTION', e.data.action); + // if (e.data && e.data.action) + + if (event.data === '\uD83D\uDC93') { + // heartbeat + } else { + const obj = JSON.parse(event.data) + console.log('obj.action', obj.action); + + if (obj.action === 'building') { + app.ports.fromJsPort.send({ thingy: 'hmr-check' }); + } else if (obj.action === 'built') { + // console.log('built -- fetching'); + + let currentPath = window.location.pathname.replace(/(\w)$/, "$1/") + httpGet(`${window.location.origin}${currentPath}content.json`).then(function (/** @type JSON */ contentJson) { + // console.log('httpGet response', contentJson); + + app.ports.fromJsPort.send({ contentJson: contentJson }); + // success() + }); + } - // app.ports.fromJsPort.send({ contentJson: contentJson }); - // }); - // console.log('Reloaded!!!!!!!!!!', status) } - }); + }) + + // module.hot.addStatusHandler(function (status) { + // console.log('HMR', status) + // if (status === 'idle') { + + // // httpGet(`${window.location.origin}${path}content.json`).then(function (/** @type JSON */ contentJson) { + // // // console.log('hot contentJson', contentJson); + + // // app.ports.fromJsPort.send({ contentJson: contentJson }); + // // }); + // // console.log('Reloaded!!!!!!!!!!', status) + // } else if (status === 'check') { + + // console.log('sending', { thingy: 'hmr-check' }); + + // app.ports.fromJsPort.send({ thingy: 'hmr-check' }); + // } + // }); } + // found this trick from https://github.com/roots/sage/issues/1826 // module.hot.addStatusHandler(function (status) { /* handle status */}) works, but after several saves // it stops working for some reason. So this is a workaround to work even when those updates stop coming through - const reporter = window.__webpack_hot_middleware_reporter__ - const success = reporter.success - reporter.success = function () { - console.log('SUCCESS'); - let currentPath = window.location.pathname.replace(/(\w)$/, "$1/") - httpGet(`${window.location.origin}${currentPath}content.json`).then(function (/** @type JSON */ contentJson) { - // console.log('hot contentJson', contentJson); + // const reporter = window.__webpack_hot_middleware_reporter__ + // console.log('reporter keys', reporter); - setTimeout(() => { - app.ports.fromJsPort.send({ contentJson: contentJson }); - }, 0) - success() - }); - } + // const success = reporter.success + // reporter.success = function () { + // console.log('SUCCESS'); + // let currentPath = window.location.pathname.replace(/(\w)$/, "$1/") + // httpGet(`${window.location.origin}${currentPath}content.json`).then(function (/** @type JSON */ contentJson) { + // // console.log('hot contentJson', contentJson); + + // app.ports.fromJsPort.send({ contentJson: contentJson }); + // success() + // }); + // } return app diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index 1999b14a..a45d2874 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -197,10 +197,43 @@ view pathKey content viewFn model = , body = [ onViewChangeElement model.url , body |> Html.map UserMsg |> Html.map AppMsg + , loadingView model.hmrStatus ] } +loadingView : HmrStatus -> Html msg +loadingView hmrStatus = + Html.div + [ Html.Attributes.id "__elm-pages-loading" + , Html.Attributes.class "lds-default" + , Html.Attributes.style "position" "fixed" + , Html.Attributes.style "bottom" "10px" + , Html.Attributes.style "right" "10px" + , Html.Attributes.style "display" + (case hmrStatus of + HmrLoading -> + "block" + + HmrLoaded -> + "none" + ) + ] + [ Html.div [] [] + , Html.div [] [] + , Html.div [] [] + , Html.div [] [] + , Html.div [] [] + , Html.div [] [] + , Html.div [] [] + , Html.div [] [] + , Html.div [] [] + , Html.div [] [] + , Html.div [] [] + , Html.div [] [] + ] + + onViewChangeElement currentUrl = -- this is a hidden tag -- it is used from the JS-side to reliably @@ -347,6 +380,7 @@ init pathKey canonicalSiteUrl document toJsPort viewFn content initUserModel fla , userModel = userModel , contentCache = contentCache , phase = phase + , hmrStatus = HmrLoaded } , cmd ) @@ -362,6 +396,7 @@ init pathKey canonicalSiteUrl document toJsPort viewFn content initUserModel fla , userModel = userModel , contentCache = contentCache , phase = Client + , hmrStatus = HmrLoaded } , Cmd.batch [ userCmd |> Cmd.map UserMsg @@ -392,6 +427,7 @@ type AppMsg userMsg metadata view | UpdateCacheForHotReload (Result Http.Error (ContentCache metadata view)) | PageScrollComplete | HotReloadComplete ContentJson + | StartingHotReload type Model userModel userMsg metadata view @@ -406,6 +442,7 @@ type alias ModelDetails userModel metadata view = , contentCache : ContentCache metadata view , userModel : userModel , phase : Phase + , hmrStatus : HmrStatus } @@ -594,11 +631,10 @@ update content allRoutes canonicalSiteUrl viewFunction pathKey onPageChangeMsg t ( model, Cmd.none ) HotReloadComplete contentJson -> - let - _ = - Debug.log "HotReloadComplete" { keys = Dict.keys contentJson.staticData, url = model.url.path } - in - ( { model | contentCache = ContentCache.init document content (Just { contentJson = contentJson, initialUrl = model.url }) } + ( { model + | contentCache = ContentCache.init document content (Just { contentJson = contentJson, initialUrl = model.url }) + , hmrStatus = HmrLoaded + } , Cmd.none -- ContentCache.init document content (Maybe.map (\cj -> { contentJson = contentJson, initialUrl = model.url }) Nothing) --|> ContentCache.lazyLoad document @@ -608,10 +644,22 @@ update content allRoutes canonicalSiteUrl viewFunction pathKey onPageChangeMsg t --|> Task.attempt UpdateCacheForHotReload ) + StartingHotReload -> + let + _ = + Debug.log "starting..." "" + in + ( { model | hmrStatus = HmrLoading }, Cmd.none ) + CliMsg _ -> ( model, Cmd.none ) +type HmrStatus + = HmrLoading + | HmrLoaded + + application : { init : Maybe @@ -718,16 +766,17 @@ application config = , config.fromJsPort |> Sub.map (\decodeValue -> - --let - -- _ = - -- Debug.log "fromJsPort" (decodeValue |> Decode.decodeValue (Decode.field "contentJson" contentJsonDecoder)) - --in - case decodeValue |> Decode.decodeValue (Decode.field "contentJson" contentJsonDecoder) of - Ok contentJson -> - AppMsg (HotReloadComplete contentJson) + case decodeValue |> Decode.decodeValue (Decode.field "thingy" Decode.string) |> Debug.log "thingy" of + Ok "hmr-check" -> + AppMsg StartingHotReload - Err error -> - Debug.todo "" + _ -> + case decodeValue |> Decode.decodeValue (Decode.field "contentJson" contentJsonDecoder) of + Ok contentJson -> + AppMsg (HotReloadComplete contentJson) + + Err error -> + Debug.todo "" ) ] From 0d7620935fc0ac3a0cf701dd804d9c4c7abf519b Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 3 May 2020 11:46:11 -0700 Subject: [PATCH 44/73] Add a hack to make sure metadata changes come through in HMR. --- generator/src/generate-elm-stuff.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/generator/src/generate-elm-stuff.js b/generator/src/generate-elm-stuff.js index 01c9fa2e..f7bb557f 100644 --- a/generator/src/generate-elm-stuff.js +++ b/generator/src/generate-elm-stuff.js @@ -4,6 +4,7 @@ const copyModifiedElmJson = require("./rewrite-elm-json.js"); const { elmPagesCliFile, elmPagesUiFile } = require("./elm-file-constants.js"); const path = require("path"); const { ensureDirSync, deleteIfExists } = require('./file-helpers.js') +let wasEqualBefore = false module.exports = function run( @@ -20,7 +21,19 @@ module.exports = function run( const uiFileContent = elmPagesUiFile(staticRoutes, markdownContent) - if (global.previousUiFileContent != uiFileContent) { + + // TODO should just write it once, but webpack doesn't seem to pick up the changes + // so this wasEqualBefore code causes it to get written twice to make sure the changes come through for HMR + if (wasEqualBefore) { + fs.writeFileSync( + "./gen/Pages.elm", + uiFileContent + ); + } + if (global.previousUiFileContent === uiFileContent) { + wasEqualBefore = false + } else { + wasEqualBefore = true fs.writeFileSync( "./gen/Pages.elm", uiFileContent From 09402d13c2750ff0b3143856ae494e79b3d5848c Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 3 May 2020 15:48:02 -0700 Subject: [PATCH 45/73] Remove unused code. --- generator/src/develop.js | 8 +--- .../src/plugin-generate-elm-pages-build.js | 33 +------------ index.js | 46 ++----------------- 3 files changed, 6 insertions(+), 81 deletions(-) diff --git a/generator/src/develop.js b/generator/src/develop.js index 9532e8f3..253c95bd 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -260,10 +260,10 @@ function webpackOptions( /assets\// ], swDest: "service-worker.js" - }) + }), // comment this out to do performance profiling // (drag-and-drop `events.json` file into Chrome performance tab) - // , new webpack.debug.ProfilingPlugin() + // new webpack.debug.ProfilingPlugin() ], output: {}, resolve: { @@ -413,10 +413,7 @@ function webpackOptions( } function hmrClientPath() { - // return require.resolve("webpack-hot-middleware/client"); var ansiColors = { - // red: 'FF0000' // note the lack of "#" - // reset: ['ffffff', '0000000'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] reset: ['ffffff', 'transparent'], // [FOREGROUD_COLOR, BACKGROUND_COLOR] black: '000', red: 'c91b00', @@ -431,7 +428,6 @@ function hmrClientPath() { var overlayStyles = { // options from https://github.com/webpack-contrib/webpack-hot-middleware/blob/master/client-overlay.js - // color: '#FF0000' // note the inclusion of "#" (these options would be the equivalent of div.style[option] = value) background: 'rgba(0,0,0,0.90)', color: '#e8e8e8', lineHeight: '1.6', diff --git a/generator/src/plugin-generate-elm-pages-build.js b/generator/src/plugin-generate-elm-pages-build.js index 059e35f4..49e2a13a 100644 --- a/generator/src/plugin-generate-elm-pages-build.js +++ b/generator/src/plugin-generate-elm-pages-build.js @@ -8,29 +8,10 @@ const globby = require("globby"); module.exports = class PluginGenerateElmPagesBuild { constructor() { - this.value = 1; } apply(/** @type {webpack.Compiler} */ compiler) { - compiler.hooks.afterEmit.tap('DoneMsg', () => { - console.log('---> DONE!'); - - }) - compiler.hooks.beforeCompile.tap('PluginGenerateElmPagesBuild', (compilation) => { - // compiler.hooks.thisCompilation.tap('PluginGenerateElmPagesBuild', (compilation) => { - - // compilation.contextDependencies.add('content') - // compiler.hooks.thisCompilation.tap('ThisCompilation', (compilation) => { - console.log('----> PluginGenerateElmPagesBuild'); - const src = `module Example exposing (..) - -value : Int -value = ${this.value++} -` - // console.log('@@@ Writing EXAMPLE module'); - // fs.writeFileSync(path.join(process.cwd(), './src/Example.elm'), src); - const staticRoutes = generateRecords(); const markdownContent = globby @@ -40,10 +21,6 @@ value = ${this.value++} return parseMarkdown(path, contents); }); - const images = globby - .sync("images/**/*", {}) - .filter(imagePath => !fs.lstatSync(imagePath).isDirectory()); - let resolvePageRequests; let rejectPageRequests; global.pagesWithRequests = new Promise(function (resolve, reject) { @@ -56,8 +33,7 @@ value = ${this.value++} staticRoutes, markdownContent ).then((payload) => { - console.log('PROMISE RESOLVED doCliStuff'); - + // console.log('PROMISE RESOLVED doCliStuff'); resolvePageRequests(payload); global.filesToGenerate = payload.filesToGenerate; @@ -66,13 +42,6 @@ value = ${this.value++} resolvePageRequests({ type: 'error', message: errorPayload }); }) - - // compilation.assets['./src/Example.elm'] = { - // source: () => src, - // size: () => src.length - // }; - // callback() - }); }; diff --git a/index.js b/index.js index 2b2103b4..0c28b282 100644 --- a/index.js +++ b/index.js @@ -90,67 +90,27 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) // heartbeat } else { const obj = JSON.parse(event.data) - console.log('obj.action', obj.action); + // console.log('obj.action', obj.action); if (obj.action === 'building') { app.ports.fromJsPort.send({ thingy: 'hmr-check' }); } else if (obj.action === 'built') { - // console.log('built -- fetching'); + // console.log('httpGet start'); let currentPath = window.location.pathname.replace(/(\w)$/, "$1/") httpGet(`${window.location.origin}${currentPath}content.json`).then(function (/** @type JSON */ contentJson) { - // console.log('httpGet response', contentJson); + // console.log('httpGet received'); app.ports.fromJsPort.send({ contentJson: contentJson }); - // success() }); } } }) - // module.hot.addStatusHandler(function (status) { - // console.log('HMR', status) - // if (status === 'idle') { - - // // httpGet(`${window.location.origin}${path}content.json`).then(function (/** @type JSON */ contentJson) { - // // // console.log('hot contentJson', contentJson); - - // // app.ports.fromJsPort.send({ contentJson: contentJson }); - // // }); - // // console.log('Reloaded!!!!!!!!!!', status) - // } else if (status === 'check') { - - // console.log('sending', { thingy: 'hmr-check' }); - - // app.ports.fromJsPort.send({ thingy: 'hmr-check' }); - // } - // }); } - - - // found this trick from https://github.com/roots/sage/issues/1826 - // module.hot.addStatusHandler(function (status) { /* handle status */}) works, but after several saves - // it stops working for some reason. So this is a workaround to work even when those updates stop coming through - // const reporter = window.__webpack_hot_middleware_reporter__ - // console.log('reporter keys', reporter); - - // const success = reporter.success - // reporter.success = function () { - // console.log('SUCCESS'); - // let currentPath = window.location.pathname.replace(/(\w)$/, "$1/") - // httpGet(`${window.location.origin}${currentPath}content.json`).then(function (/** @type JSON */ contentJson) { - // // console.log('hot contentJson', contentJson); - - // app.ports.fromJsPort.send({ contentJson: contentJson }); - // success() - // }); - // } - - return app - }); } From 4c43d02f3224671bf85f038f5177525d9233e944 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 3 May 2020 15:57:24 -0700 Subject: [PATCH 46/73] Remove unused code. --- generator/src/elm-pages.js | 112 ------------------------------------- 1 file changed, 112 deletions(-) diff --git a/generator/src/elm-pages.js b/generator/src/elm-pages.js index e4916a06..ba3e3c15 100755 --- a/generator/src/elm-pages.js +++ b/generator/src/elm-pages.js @@ -5,18 +5,10 @@ const { version } = require("../../package.json"); const fs = require("fs"); const globby = require("globby"); const develop = require("./develop.js"); -const chokidar = require("chokidar"); -const { elmPagesUiFile } = require("./elm-file-constants.js"); -const generateRecords = require("./generate-records.js"); const parseFrontmatter = require("./frontmatter.js"); -const path = require("path"); -const { ensureDirSync, deleteIfExists } = require('./file-helpers.js') global.builtAt = new Date(); global.staticHttpCache = {}; -let watcher = null; -let devServerRunning = false; - function unpackFile(path) { return { path, contents: fs.readFileSync(path).toString() }; } @@ -53,9 +45,6 @@ function parseMarkdown(path, fileContents) { } function run() { - console.log("Running elm-pages..."); - const staticRoutes = generateRecords(); - const markdownContent = globby .sync(["content/**/*.*"], {}) .map(unpackFile) @@ -88,16 +77,8 @@ function run() { app.ports.writeFile.subscribe(contents => { const routes = toRoutes(markdownContent); - let resolvePageRequests; - let rejectPageRequests; global.mode = contents.watch ? "dev" : "prod" - // global.pagesWithRequests = new Promise(function (resolve, reject) { - // resolvePageRequests = resolve; - // rejectPageRequests = reject; - // }); - // resolvePageRequests({}); // TODO temporary - do the real resolution - develop.start({ routes, @@ -108,104 +89,11 @@ function run() { customPort: contents.customPort }); - - // doCliStuff( - // contents.watch ? "dev" : "prod", - // staticRoutes, - // markdownContent - // ).then( - // function (payload) { - // if (contents.watch) { - // startWatchIfNeeded(); - // resolvePageRequests(payload.pages); - // global.filesToGenerate = payload.filesToGenerate; - // if (!devServerRunning) { - // devServerRunning = true; - // develop.start({ - // routes, - // debug: contents.debug, - // manifestConfig: payload.manifest, - // routesWithRequests: payload.pages, - // filesToGenerate: payload.filesToGenerate, - // customPort: contents.customPort - // }); - // } - // } else { - // if (payload.errors && payload.errors.length > 0) { - // printErrorsAndExit(payload.errors); - // } - - // develop.run( - // { - // routes, - // manifestConfig: payload.manifest, - // routesWithRequests: payload.pages, - // filesToGenerate: payload.filesToGenerate - // }, - // () => { } - // ); - // } - - // ensureDirSync("./gen"); - - // // prevent compilation errors if migrating from previous elm-pages version - // deleteIfExists("./gen/Pages/ContentCache.elm"); - // deleteIfExists("./gen/Pages/Platform.elm"); - - // fs.writeFileSync( - // "./gen/Pages.elm", - // elmPagesUiFile(staticRoutes, markdownContent) - // ); - // console.log("elm-pages DONE"); - - // } - // ).catch(function (errorPayload) { - // startWatchIfNeeded() - // resolvePageRequests({ type: 'error', message: errorPayload }); - // if (!devServerRunning) { - // devServerRunning = true; - // develop.start({ - // routes, - // debug: contents.debug, - // manifestConfig: stubManifest, - // routesWithRequests: {}, - // filesToGenerate: [], - // customPort: contents.customPort - // }); - // } - - // }); }); } run(); -function printErrorsAndExit(errors) { - console.error( - "Found errors. Exiting. Fix your content or parsers and re-run, or run in dev mode with `elm-pages develop`." - ); - console.error(errors.join("\n\n")); - process.exit(1); -} - -function startWatchIfNeeded() { - if (!watcher) { - console.log("Watching..."); - watcher = chokidar - .watch(["content/**/*.*", "src/**/*.elm"], { - awaitWriteFinish: { - stabilityThreshold: 500 - }, - ignoreInitial: true - }) - .on("all", function (event, filePath) { - console.log(`Rerunning for ${filePath}...`); - run(); - console.log("Done!"); - }); - } -} - function toRoutes(entries) { return entries.map(toRoute); } From 8171f205fe942c1e8cf3326984eb105ef010a5da Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 3 May 2020 17:31:19 -0700 Subject: [PATCH 47/73] Get build process working with new webpack setup. --- generator/src/add-files-plugin.js | 12 ++++++--- generator/src/develop.js | 8 +++--- generator/src/elm-pages.js | 27 +++++++++++++------ .../src/plugin-generate-elm-pages-build.js | 1 + src/OptimizedDecoder.elm | 3 ++- src/Pages/Internal/Platform.elm | 14 +++++----- 6 files changed, 42 insertions(+), 23 deletions(-) diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index 100f13de..e8d979ff 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -23,11 +23,11 @@ function unpackFile(filePath) { module.exports = class AddFilesPlugin { constructor(data, filesToGenerate) { - this.pagesWithRequests = data; + // this.pagesWithRequests = data; this.filesToGenerate = filesToGenerate; } apply(/** @type {webpack.Compiler} */ compiler) { - compiler.hooks.emit.tapAsync("AddFilesPlugin", (compilation, callback) => { + compiler.hooks.make.tapAsync("AddFilesPlugin", (compilation, callback) => { const files = globby.sync("content").map(unpackFile); @@ -56,9 +56,13 @@ module.exports = class AddFilesPlugin { const staticRequests = staticRequestData[route]; const filename = path.join(file.baseRoute, "content.json"); - compilation.contextDependencies.add('content') + if (compilation.contextDependencies) { + compilation.contextDependencies.add('content') + } // compilation.fileDependencies.add(filename); - compilation.fileDependencies.add(path.resolve(file.filePath)); + if (compilation.fileDependencies) { + compilation.fileDependencies.add(path.resolve(file.filePath)); + } const rawContents = JSON.stringify({ body: file.content, staticData: staticRequests || {} diff --git a/generator/src/develop.js b/generator/src/develop.js index 253c95bd..bdee06b8 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -75,7 +75,7 @@ function start({ routes, debug, customPort, manifestConfig, routesWithRequests, // app.use(express.static(__dirname + "/path-to-static-folder")); } -function run({ routes, manifestConfig, routesWithRequests, filesToGenerate }, callback) { +function run({ routes, manifestConfig, routesWithRequests, filesToGenerate }) { webpack( webpackOptions(true, routes, { debug: false, @@ -88,7 +88,7 @@ function run({ routes, manifestConfig, routesWithRequests, filesToGenerate }, ca console.error(err); process.exit(1); } else { - callback(); + // done } console.log( @@ -134,6 +134,7 @@ function webpackOptions( const common = { mode: production ? "production" : "development", plugins: [ + new PluginGenerateElmPagesBuild(), new AddFilesPlugin(routesWithRequests, filesToGenerate), new CopyPlugin([ { @@ -349,7 +350,7 @@ function webpackOptions( renderer: new PrerenderSPAPlugin.PuppeteerRenderer({ renderAfterDocumentEvent: "prerender-trigger", headless: true, - devtools: false + devtools: false, }), postProcess: renderedRoute => { @@ -384,7 +385,6 @@ function webpackOptions( "./index.js", ], plugins: [ - new PluginGenerateElmPagesBuild(), new webpack.NamedModulesPlugin(), new webpack.HotModuleReplacementPlugin(), // Prevents compilation errors causing the hot loader to lose state diff --git a/generator/src/elm-pages.js b/generator/src/elm-pages.js index ba3e3c15..6e29aa68 100755 --- a/generator/src/elm-pages.js +++ b/generator/src/elm-pages.js @@ -80,14 +80,25 @@ function run() { global.mode = contents.watch ? "dev" : "prod" - develop.start({ - routes, - debug: contents.debug, - manifestConfig: stubManifest, - routesWithRequests: {}, - filesToGenerate: [], - customPort: contents.customPort - }); + if (contents.watch) { + develop.start({ + routes, + debug: contents.debug, + manifestConfig: stubManifest, + routesWithRequests: {}, + filesToGenerate: [], + customPort: contents.customPort + }); + } else { + develop.run({ + routes, + debug: contents.debug, + manifestConfig: stubManifest, + routesWithRequests: {}, + filesToGenerate: [], + customPort: contents.customPort + }); + } }); } diff --git a/generator/src/plugin-generate-elm-pages-build.js b/generator/src/plugin-generate-elm-pages-build.js index 49e2a13a..5d73da98 100644 --- a/generator/src/plugin-generate-elm-pages-build.js +++ b/generator/src/plugin-generate-elm-pages-build.js @@ -58,6 +58,7 @@ function parseMarkdown(path, fileContents) { path, metadata: JSON.stringify(data), body: content, + // TODO fix this extension: "md" }; } \ No newline at end of file diff --git a/src/OptimizedDecoder.elm b/src/OptimizedDecoder.elm index 89f5212b..557ea878 100644 --- a/src/OptimizedDecoder.elm +++ b/src/OptimizedDecoder.elm @@ -576,10 +576,11 @@ nullable (OptimizedDecoder jd jde) = -} lazy : (() -> Decoder a) -> Decoder a lazy toDecoder = - Debug.todo "" + lazy toDecoder +--Debug.todo "" --Decoder <| -- \json -> -- let diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index a45d2874..2ca76f51 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -645,10 +645,10 @@ update content allRoutes canonicalSiteUrl viewFunction pathKey onPageChangeMsg t ) StartingHotReload -> - let - _ = - Debug.log "starting..." "" - in + --let + -- _ = + -- Debug.log "starting..." "" + --in ( { model | hmrStatus = HmrLoading }, Cmd.none ) CliMsg _ -> @@ -766,7 +766,7 @@ application config = , config.fromJsPort |> Sub.map (\decodeValue -> - case decodeValue |> Decode.decodeValue (Decode.field "thingy" Decode.string) |> Debug.log "thingy" of + case decodeValue |> Decode.decodeValue (Decode.field "thingy" Decode.string) of Ok "hmr-check" -> AppMsg StartingHotReload @@ -776,7 +776,9 @@ application config = AppMsg (HotReloadComplete contentJson) Err error -> - Debug.todo "" + --Debug.todo "" + -- TODO should be no message here + AppMsg StartingHotReload ) ] From 73c4a2dec22775e4da14465d0f9379476f088347 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 3 May 2020 17:38:34 -0700 Subject: [PATCH 48/73] Make sure gen directory exists. --- generator/src/generate-elm-stuff.js | 1 + 1 file changed, 1 insertion(+) diff --git a/generator/src/generate-elm-stuff.js b/generator/src/generate-elm-stuff.js index f7bb557f..5ce3de57 100644 --- a/generator/src/generate-elm-stuff.js +++ b/generator/src/generate-elm-stuff.js @@ -13,6 +13,7 @@ module.exports = function run( markdownContent ) { ensureDirSync("./elm-stuff"); + ensureDirSync("./gen"); ensureDirSync("./elm-stuff/elm-pages"); // prevent compilation errors if migrating from previous elm-pages version From a210fcfd354ffd784307e7b69ba0adb07fb0cf89 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 3 May 2020 20:15:31 -0700 Subject: [PATCH 49/73] Remove unused require. --- generator/src/frontmatter.js | 1 - generator/src/generate-records.js | 11 +++++------ 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/generator/src/frontmatter.js b/generator/src/frontmatter.js index 1f2c84be..bfeed1a2 100644 --- a/generator/src/frontmatter.js +++ b/generator/src/frontmatter.js @@ -1,4 +1,3 @@ -const path = require("path"); const matter = require("gray-matter"); module.exports = function parseFrontmatter(filePath, fileContents) { diff --git a/generator/src/generate-records.js b/generator/src/generate-records.js index a23e0d6d..19fea321 100644 --- a/generator/src/generate-records.js +++ b/generator/src/generate-records.js @@ -1,5 +1,4 @@ const path = require("path"); -const matter = require("gray-matter"); const dir = "content/"; const glob = require("glob"); const fs = require("fs"); @@ -138,14 +137,14 @@ function allImageAssetNames() { }); } function toPascalCase(str) { - var pascal = str.replace(/(\-\w)/g, function(m) { + var pascal = str.replace(/(\-\w)/g, function (m) { return m[1].toUpperCase(); }); return pascal.charAt(0).toUpperCase() + pascal.slice(1); } function toCamelCase(str) { - var pascal = str.replace(/(\-\w)/g, function(m) { + var pascal = str.replace(/(\-\w)/g, function (m) { return m[1].toUpperCase(); }); return pascal.charAt(0).toLowerCase() + pascal.slice(1); @@ -180,14 +179,14 @@ function formatRecord(directoryPath, rec, asType, level) { } else { keyVals.push( key + - " =\n" + - formatRecord(directoryPath.concat(key), val, asType, level + 1) + " =\n" + + formatRecord(directoryPath.concat(key), val, asType, level + 1) ); } } keyVals.push( `directory = ${ - keys.includes("index") ? "directoryWithIndex" : "directoryWithoutIndex" + keys.includes("index") ? "directoryWithIndex" : "directoryWithoutIndex" } [${directoryPath.map(pathFragment => `"${pathFragment}"`).join(", ")}]` ); const indentationDelimiter = `\n${indentation}, `; From 03315da32019295b75213cf6d9c06ae82c61cba0 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 4 May 2020 14:00:33 -0700 Subject: [PATCH 50/73] Change error message string. --- examples/docs/src/Metadata.elm | 2 +- generator/src/add-files-plugin.js | 2 +- src/Pages/Internal/Platform.elm | 4 ++++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/docs/src/Metadata.elm b/examples/docs/src/Metadata.elm index fd9a0364..85748cf0 100644 --- a/examples/docs/src/Metadata.elm +++ b/examples/docs/src/Metadata.elm @@ -91,7 +91,7 @@ decoder = |> Decode.map Article _ -> - Decode.fail <| "Unexpected page type " ++ pageType + Decode.fail <| "Unexpected page \"type\" " ++ pageType ) diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index e8d979ff..62369fc8 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -27,7 +27,7 @@ module.exports = class AddFilesPlugin { this.filesToGenerate = filesToGenerate; } apply(/** @type {webpack.Compiler} */ compiler) { - compiler.hooks.make.tapAsync("AddFilesPlugin", (compilation, callback) => { + compiler.hooks.emit.tapAsync("AddFilesPlugin", (compilation, callback) => { const files = globby.sync("content").map(unpackFile); diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index 2ca76f51..d92c2138 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -773,6 +773,10 @@ application config = _ -> case decodeValue |> Decode.decodeValue (Decode.field "contentJson" contentJsonDecoder) of Ok contentJson -> + let + _ = + Debug.log "HotReloadComplete" "" + in AppMsg (HotReloadComplete contentJson) Err error -> From d676064acf97b0d0acb0f53689552845ed68fa0d Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 4 May 2020 14:00:53 -0700 Subject: [PATCH 51/73] Remove some unused code. --- generator/src/elm-pages.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/generator/src/elm-pages.js b/generator/src/elm-pages.js index 6e29aa68..62213549 100755 --- a/generator/src/elm-pages.js +++ b/generator/src/elm-pages.js @@ -52,16 +52,10 @@ function run() { return parseMarkdown(path, contents); }); - const images = globby - .sync("images/**/*", {}) - .filter(imagePath => !fs.lstatSync(imagePath).isDirectory()); - let app = Elm.Main.init({ flags: { argv: process.argv, versionMessage: version, - markdownContent, - images } }); From b49fe854d85162b97071893f42c62180cb3d2337 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 4 May 2020 14:01:00 -0700 Subject: [PATCH 52/73] Formatting. --- examples/docs/src/Main.elm | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/examples/docs/src/Main.elm b/examples/docs/src/Main.elm index d69ae4c6..13005f56 100644 --- a/examples/docs/src/Main.elm +++ b/examples/docs/src/Main.elm @@ -179,13 +179,13 @@ view siteMetadata page = (D.field "stargazers_count" D.int) |> StaticHttp.map (\stars -> - { view = - \model viewForPage -> - pageView stars model siteMetadata page viewForPage - |> wrapBody stars page model - , head = head page.frontmatter - } - ) + { view = + \model viewForPage -> + pageView stars model siteMetadata page viewForPage + |> wrapBody stars page model + , head = head page.frontmatter + } + ) From d93059334091b3b0964cf4fa1e3ca889ec883a3d Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 4 May 2020 15:53:47 -0700 Subject: [PATCH 53/73] Update docs. --- src/OptimizedDecoder.elm | 28 ++++++---------------------- 1 file changed, 6 insertions(+), 22 deletions(-) diff --git a/src/OptimizedDecoder.elm b/src/OptimizedDecoder.elm index 557ea878..9230668d 100644 --- a/src/OptimizedDecoder.elm +++ b/src/OptimizedDecoder.elm @@ -1,13 +1,12 @@ module OptimizedDecoder exposing - ( decodeString, decodeValue, Value - , Error, errorToString - , Decoder, string, bool, int, float + ( Error, errorToString + , Decoder, string, bool, int, float, Value , nullable, list, array, dict, keyValuePairs , field, at, index , maybe, oneOf , lazy, value, null, succeed, fail, andThen , map, map2, map3, map4, map5, map6, map7, map8, andMap - , decoder + , decodeString, decodeValue, decoder ) {-| This package presents a somewhat experimental approach to JSON decoding. Its @@ -36,23 +35,6 @@ module which is largely a copy of [`NoRedInk/elm-decode-pipeline`][edp]. [edp]: http://package.elm-lang.org/packages/NoRedInk/elm-decode-pipeline/latest -# Running a `Decoder` - -Runing a `Decoder` works largely the same way as it does in the familiar core -library. There is one serious caveat, however: - -> This library does **not** allowing decoding non-serializable JS values. - -This means that trying to use this library to decode a `Value` which contains -non-serializable information like `function`s will not work. It will, however, -result in a `BadJson` result. - -Trying to use this library on cyclic values (like HTML events) is quite likely -to blow up completely. Don't try this, except maybe at home. - -@docs decodeString, decodeValue, strict, DecodeResult, Value - - ## Dealing with warnings and errors @docs Error, errorToString @@ -60,7 +42,7 @@ to blow up completely. Don't try this, except maybe at home. # Primitives -@docs Decoder, string, bool, int, float +@docs Decoder, string, bool, int, float, Value # Data Structures @@ -108,6 +90,8 @@ import Json.Decode as JD import Json.Decode.Exploration as JDE +{-| A decoder that will be optimized in your production bundle. +-} type alias Decoder a = OptimizedDecoder a From ba7d7fdc9c5b2f275841f1df5ef2c9652cb67296 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 4 May 2020 16:03:10 -0700 Subject: [PATCH 54/73] Wire in a custom message for StaticHttp.fail. --- examples/docs/src/Main.elm | 27 ++++++++++++++++++++------- src/Pages/Internal/Platform.elm | 6 ++++++ src/Pages/StaticHttp.elm | 3 +-- src/Pages/StaticHttpRequest.elm | 14 ++++++++++++++ 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/examples/docs/src/Main.elm b/examples/docs/src/Main.elm index 13005f56..f08e7fb6 100644 --- a/examples/docs/src/Main.elm +++ b/examples/docs/src/Main.elm @@ -89,6 +89,8 @@ generateFiles : generateFiles siteMetadata = [ Feed.fileToGenerate { siteTagline = siteTagline, siteUrl = canonicalSiteUrl } siteMetadata |> Ok , MySitemap.build { siteUrl = canonicalSiteUrl } siteMetadata |> Ok + + --, Ok { content = "Hello1!", path = [ "test.txt" ] } ] @@ -179,16 +181,27 @@ view siteMetadata page = (D.field "stargazers_count" D.int) |> StaticHttp.map (\stars -> - { view = - \model viewForPage -> - pageView stars model siteMetadata page viewForPage - |> wrapBody stars page model - , head = head page.frontmatter - } - ) + { view = + \model viewForPage -> + pageView stars model siteMetadata page viewForPage + |> wrapBody stars page model + , head = head page.frontmatter + } + ) +--StaticHttp.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages") +-- (D.field "stargazers_count" D.int) +-- |> StaticHttp.map +-- (\stars -> +-- { view = +-- \model viewForPage -> +-- pageView stars model siteMetadata page viewForPage +-- |> wrapBody stars page model +-- , head = head page.frontmatter +-- } +-- ) --let -- viewFn = -- case page.frontmatter of diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index d92c2138..0dc55dd2 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -145,6 +145,12 @@ pageViewOrError pathKey viewFn model cache = [ Html.text "I'm missing some StaticHttp data for this page:" , Html.pre [] [ Html.text missingKey ] ] + + StaticHttpRequest.UserCalledStaticHttpFail message -> + Html.div [] + [ Html.text "I ran into a call to `Pages.StaticHttp.fail` with message:" + , Html.pre [] [ Html.text message ] + ] } Err error -> diff --git a/src/Pages/StaticHttp.elm b/src/Pages/StaticHttp.elm index fdca48b7..dfefc5eb 100644 --- a/src/Pages/StaticHttp.elm +++ b/src/Pages/StaticHttp.elm @@ -451,8 +451,7 @@ fail errorMessage = Request ( [] , \appType rawResponses -> - -- TODO add a new variant for this - Err (Pages.StaticHttpRequest.DecoderError "") + Err (Pages.StaticHttpRequest.UserCalledStaticHttpFail errorMessage) ) diff --git a/src/Pages/StaticHttpRequest.elm b/src/Pages/StaticHttpRequest.elm index 75815e7d..da5c6be9 100644 --- a/src/Pages/StaticHttpRequest.elm +++ b/src/Pages/StaticHttpRequest.elm @@ -31,6 +31,7 @@ strippedResponses appType request rawResponses = type Error = MissingHttpResponse String | DecoderError String + | UserCalledStaticHttpFail String urls : Request value -> List (Secrets.Value Pages.StaticHttp.Request.Request) @@ -66,6 +67,16 @@ toBuildError path error = , fatal = True } + UserCalledStaticHttpFail decodeErrorMessage -> + { title = "Called Static Http Fail" + , message = + [ Terminal.text path + , Terminal.text "\n\n" + , Terminal.text <| "I ran into a call to `Pages.StaticHttp.fail` with message: " ++ decodeErrorMessage + ] + , fatal = True + } + permanentError : ApplicationType -> Request value -> Dict String String -> Maybe Error permanentError appType request rawResponses = @@ -83,6 +94,9 @@ permanentError appType request rawResponses = DecoderError _ -> Just error + UserCalledStaticHttpFail string -> + Just error + Done value -> Nothing From e03e4d254f24ee1ba5b7f6c63fe2cf87d47c48b3 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 4 May 2020 16:10:53 -0700 Subject: [PATCH 55/73] Pass through decode error messages for unoptimized json decoder requests. --- src/Pages/StaticHttp.elm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/Pages/StaticHttp.elm b/src/Pages/StaticHttp.elm index dfefc5eb..be8ff3e8 100644 --- a/src/Pages/StaticHttp.elm +++ b/src/Pages/StaticHttp.elm @@ -712,7 +712,10 @@ unoptimizedRequest requestWithSecrets expect = |> (\decodeResult -> case decodeResult of Err error -> - Pages.StaticHttpRequest.DecoderError "Payload sent back invalid JSON" |> Err + error + |> Decode.errorToString + |> Pages.StaticHttpRequest.DecoderError + |> Err Ok a -> Ok a From 2e8e9754d18bf4662921f1dd6375a1cd36c526e4 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 4 May 2020 20:46:14 -0700 Subject: [PATCH 56/73] Remove unused code. --- generator/src/elm-pages.js | 3 +-- generator/src/plugin-generate-elm-pages-build.js | 2 -- src/Pages/Internal/Platform.elm | 4 ---- 3 files changed, 1 insertion(+), 8 deletions(-) diff --git a/generator/src/elm-pages.js b/generator/src/elm-pages.js index 62213549..0547bc72 100755 --- a/generator/src/elm-pages.js +++ b/generator/src/elm-pages.js @@ -39,8 +39,7 @@ function parseMarkdown(path, fileContents) { return { path, metadata: JSON.stringify(data), - body: content, - extension: "md" + body: content }; } diff --git a/generator/src/plugin-generate-elm-pages-build.js b/generator/src/plugin-generate-elm-pages-build.js index 5d73da98..e4d188ec 100644 --- a/generator/src/plugin-generate-elm-pages-build.js +++ b/generator/src/plugin-generate-elm-pages-build.js @@ -58,7 +58,5 @@ function parseMarkdown(path, fileContents) { path, metadata: JSON.stringify(data), body: content, - // TODO fix this - extension: "md" }; } \ No newline at end of file diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index 0dc55dd2..8b39ff89 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -779,10 +779,6 @@ application config = _ -> case decodeValue |> Decode.decodeValue (Decode.field "contentJson" contentJsonDecoder) of Ok contentJson -> - let - _ = - Debug.log "HotReloadComplete" "" - in AppMsg (HotReloadComplete contentJson) Err error -> From feb0572f6ba507f12b139b8810024b50dc3e76da Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Tue, 5 May 2020 06:55:27 -0700 Subject: [PATCH 57/73] Add shadow. --- examples/docs/style.css | 1 + 1 file changed, 1 insertion(+) diff --git a/examples/docs/style.css b/examples/docs/style.css index a4b1cab8..5ea86769 100644 --- a/examples/docs/style.css +++ b/examples/docs/style.css @@ -45,6 +45,7 @@ width: 80px; height: 80px; background-color: white; + box-shadow: 0 8px 20px 0 rgba(0, 0, 0, 0.25), 0 2px 10px 0 rgba(0, 0, 0, 0.12); } .lds-default div { position: absolute; From ed2d671586f0833f2cf8e7a8f131e350eed4bdb0 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Tue, 5 May 2020 06:58:58 -0700 Subject: [PATCH 58/73] Change hook based on dev/prod mode. --- generator/src/add-files-plugin.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index 62369fc8..bae0c73c 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -27,7 +27,8 @@ module.exports = class AddFilesPlugin { this.filesToGenerate = filesToGenerate; } apply(/** @type {webpack.Compiler} */ compiler) { - compiler.hooks.emit.tapAsync("AddFilesPlugin", (compilation, callback) => { + + (global.mode === "dev" ? compiler.hooks.emit : compiler.hooks.make).tapAsync("AddFilesPlugin", (compilation, callback) => { const files = globby.sync("content").map(unpackFile); From d79fc802336ec4ca117add480ba781a51e110c78 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Tue, 5 May 2020 07:14:24 -0700 Subject: [PATCH 59/73] Remove unused arguments. --- generator/src/add-files-plugin.js | 4 ---- generator/src/develop.js | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/generator/src/add-files-plugin.js b/generator/src/add-files-plugin.js index bae0c73c..9f57664c 100644 --- a/generator/src/add-files-plugin.js +++ b/generator/src/add-files-plugin.js @@ -22,10 +22,6 @@ function unpackFile(filePath) { } module.exports = class AddFilesPlugin { - constructor(data, filesToGenerate) { - // this.pagesWithRequests = data; - this.filesToGenerate = filesToGenerate; - } apply(/** @type {webpack.Compiler} */ compiler) { (global.mode === "dev" ? compiler.hooks.emit : compiler.hooks.make).tapAsync("AddFilesPlugin", (compilation, callback) => { diff --git a/generator/src/develop.js b/generator/src/develop.js index bdee06b8..769740d1 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -135,7 +135,7 @@ function webpackOptions( mode: production ? "production" : "development", plugins: [ new PluginGenerateElmPagesBuild(), - new AddFilesPlugin(routesWithRequests, filesToGenerate), + new AddFilesPlugin(), new CopyPlugin([ { from: "static/**/*", From ee16b434042f65160677e1e63229e930cfe23cef Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Tue, 5 May 2020 07:14:49 -0700 Subject: [PATCH 60/73] Remove commented code. --- examples/docs/src/Main.elm | 49 -------------------------------------- 1 file changed, 49 deletions(-) diff --git a/examples/docs/src/Main.elm b/examples/docs/src/Main.elm index f08e7fb6..ca562f15 100644 --- a/examples/docs/src/Main.elm +++ b/examples/docs/src/Main.elm @@ -190,55 +190,6 @@ view siteMetadata page = ) - ---StaticHttp.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages") --- (D.field "stargazers_count" D.int) --- |> StaticHttp.map --- (\stars -> --- { view = --- \model viewForPage -> --- pageView stars model siteMetadata page viewForPage --- |> wrapBody stars page model --- , head = head page.frontmatter --- } --- ) ---let --- viewFn = --- case page.frontmatter of --- Metadata.Page metadata -> --- StaticHttp.map3 --- (\elmPagesStars elmPagesStarterStars netlifyStars -> --- { view = --- \model viewForPage -> --- { title = metadata.title --- , body = --- "elm-pages ⭐️'s: " --- ++ String.fromInt elmPagesStars --- ++ "\n\nelm-pages-starter ⭐️'s: " --- ++ String.fromInt elmPagesStarterStars --- ++ "\n\nelm-markdown ⭐️'s: " --- ++ String.fromInt netlifyStars --- |> Element.text --- |> wrapBody --- } --- , head = head page.frontmatter --- } --- ) --- (StaticHttp.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages") --- (D.field "stargazers_count" D.int) --- ) --- (StaticHttp.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-pages-starter") --- (D.field "stargazers_count" D.int) --- ) --- (StaticHttp.get (Secrets.succeed "https://api.github.com/repos/dillonkearns/elm-markdown") --- (D.field "stargazers_count" D.int) --- ) --- --- _ -> --- StaticHttp.withData "https://api.github.com/repos/dillonkearns/elm-pages" --- (Decode.field "stargazers_count" Decode.int) - - pageView : Int -> Model From 8a35d49d1cd5f94602bb1c2e42f63d4490ed53d2 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Tue, 5 May 2020 07:19:16 -0700 Subject: [PATCH 61/73] Remove unused arguments. --- generator/src/develop.js | 12 ++++-------- generator/src/elm-pages.js | 4 ---- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/generator/src/develop.js b/generator/src/develop.js index 769740d1..79192fbc 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -17,12 +17,10 @@ const webpackDevMiddleware = require("webpack-dev-middleware"); const PluginGenerateElmPagesBuild = require('./plugin-generate-elm-pages-build') module.exports = { start, run }; -function start({ routes, debug, customPort, manifestConfig, routesWithRequests, filesToGenerate }) { +function start({ routes, debug, customPort, manifestConfig }) { const config = webpackOptions(false, routes, { debug, - manifestConfig, - routesWithRequests, - filesToGenerate + manifestConfig }); const compiler = webpack(config); @@ -75,13 +73,11 @@ function start({ routes, debug, customPort, manifestConfig, routesWithRequests, // app.use(express.static(__dirname + "/path-to-static-folder")); } -function run({ routes, manifestConfig, routesWithRequests, filesToGenerate }) { +function run({ routes, manifestConfig }) { webpack( webpackOptions(true, routes, { debug: false, manifestConfig, - routesWithRequests, - filesToGenerate }) ).run((err, stats) => { if (err) { @@ -129,7 +125,7 @@ function printProgress(progress, message) { function webpackOptions( production, routes, - { debug, manifestConfig, routesWithRequests, filesToGenerate } + { debug, manifestConfig } ) { const common = { mode: production ? "production" : "development", diff --git a/generator/src/elm-pages.js b/generator/src/elm-pages.js index 0547bc72..92d73a3f 100755 --- a/generator/src/elm-pages.js +++ b/generator/src/elm-pages.js @@ -78,8 +78,6 @@ function run() { routes, debug: contents.debug, manifestConfig: stubManifest, - routesWithRequests: {}, - filesToGenerate: [], customPort: contents.customPort }); } else { @@ -87,8 +85,6 @@ function run() { routes, debug: contents.debug, manifestConfig: stubManifest, - routesWithRequests: {}, - filesToGenerate: [], customPort: contents.customPort }); } From 414f7ab1f826baa72f97f5f5df058f27cfdb82c7 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Tue, 5 May 2020 07:21:04 -0700 Subject: [PATCH 62/73] Rename parameter. --- generator/src/elm-pages.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/generator/src/elm-pages.js b/generator/src/elm-pages.js index 92d73a3f..96f8dd09 100755 --- a/generator/src/elm-pages.js +++ b/generator/src/elm-pages.js @@ -68,24 +68,24 @@ function run() { process.exit(1); }); - app.ports.writeFile.subscribe(contents => { + app.ports.writeFile.subscribe(cliOptions => { const routes = toRoutes(markdownContent); - global.mode = contents.watch ? "dev" : "prod" + global.mode = cliOptions.watch ? "dev" : "prod" - if (contents.watch) { + if (cliOptions.watch) { develop.start({ routes, - debug: contents.debug, + debug: cliOptions.debug, manifestConfig: stubManifest, - customPort: contents.customPort + customPort: cliOptions.customPort }); } else { develop.run({ routes, - debug: contents.debug, + debug: cliOptions.debug, manifestConfig: stubManifest, - customPort: contents.customPort + customPort: cliOptions.customPort }); } From e62d61fbabf6b0d927ef5d80a91347dc08045b67 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Wed, 6 May 2020 17:48:25 -0700 Subject: [PATCH 63/73] Generate manifest config for initial run. --- generator/src/elm-pages.js | 49 +++++++++++++++++++------------------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/generator/src/elm-pages.js b/generator/src/elm-pages.js index 96f8dd09..5ec6448c 100755 --- a/generator/src/elm-pages.js +++ b/generator/src/elm-pages.js @@ -6,6 +6,8 @@ const fs = require("fs"); const globby = require("globby"); const develop = require("./develop.js"); const parseFrontmatter = require("./frontmatter.js"); +const generateRecords = require("./generate-records.js"); +const doCliStuff = require("./generate-elm-stuff.js"); global.builtAt = new Date(); global.staticHttpCache = {}; @@ -13,26 +15,6 @@ function unpackFile(path) { return { path, contents: fs.readFileSync(path).toString() }; } -const stubManifest = { - sourceIcon: 'images/icon-png.png', - background_color: '#ffffff', - orientation: 'portrait', - display: 'standalone', - categories: ['education'], - description: 'elm-pages - A statically typed site generator.', - name: 'elm-pages docs', - prefer_related_applications: false, - related_applications: [], - theme_color: '#ffffff', - start_url: '', - short_name: 'elm-pages', - serviceworker: { - src: '../service-worker.js', - scope: '/', - type: '', - update_via_cache: 'none' - } -} function parseMarkdown(path, fileContents) { const { content, data } = parseFrontmatter(path, fileContents); @@ -69,26 +51,45 @@ function run() { }); app.ports.writeFile.subscribe(cliOptions => { + + + const markdownContent = globby + .sync(["content/**/*.*"], {}) + .map(unpackFile) + .map(({ path, contents }) => { + return parseMarkdown(path, contents); + }); const routes = toRoutes(markdownContent); global.mode = cliOptions.watch ? "dev" : "prod" + const staticRoutes = generateRecords(); + doCliStuff( + global.mode, + staticRoutes, + markdownContent + ).then((payload) => { if (cliOptions.watch) { develop.start({ routes, debug: cliOptions.debug, - manifestConfig: stubManifest, - customPort: cliOptions.customPort + customPort: cliOptions.customPort, + manifestConfig: payload.manifest, + }); } else { develop.run({ routes, debug: cliOptions.debug, - manifestConfig: stubManifest, - customPort: cliOptions.customPort + customPort: cliOptions.customPort, + manifestConfig: payload.manifest, }); } + }) + + + }); } From 8b365a91468a54ca0bd704448f20d2ba862770ce Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Thu, 7 May 2020 21:36:17 -0700 Subject: [PATCH 64/73] Implement OptimizedDecoder.lazy. --- src/OptimizedDecoder.elm | 33 +++++++++++++++++++++------------ 1 file changed, 21 insertions(+), 12 deletions(-) diff --git a/src/OptimizedDecoder.elm b/src/OptimizedDecoder.elm index 9230668d..cc18e168 100644 --- a/src/OptimizedDecoder.elm +++ b/src/OptimizedDecoder.elm @@ -560,19 +560,28 @@ nullable (OptimizedDecoder jd jde) = -} lazy : (() -> Decoder a) -> Decoder a lazy toDecoder = - lazy toDecoder + let + jd : JD.Decoder a + jd = + (\() -> + case toDecoder () of + OptimizedDecoder jd_ jde_ -> + jd_ + ) + |> JD.lazy - - ---Debug.todo "" ---Decoder <| --- \json -> --- let --- (Decoder decoderFn) = --- toDecoder () --- in --- decoderFn json --- Extras + jde : JDE.Decoder a + jde = + (\() -> + case toDecoder () of + OptimizedDecoder jd_ jde_ -> + jde_ + ) + |> JDE.lazy + in + OptimizedDecoder + jd + jde {-| Useful for checking a value in the JSON matches the value you expect it to From 3a1b7aea1de5f8d1099a2280653f0c3f877d178d Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Fri, 8 May 2020 06:46:09 -0700 Subject: [PATCH 65/73] Move some styles inline in loading spinner. --- examples/docs/style.css | 68 ------------ .../Internal/HotReloadLoadingIndicator.elm | 100 ++++++++++++++++++ src/Pages/Internal/Platform.elm | 37 ++----- 3 files changed, 109 insertions(+), 96 deletions(-) create mode 100644 src/Pages/Internal/HotReloadLoadingIndicator.elm diff --git a/examples/docs/style.css b/examples/docs/style.css index 5ea86769..8b502c16 100644 --- a/examples/docs/style.css +++ b/examples/docs/style.css @@ -39,14 +39,6 @@ } } -.lds-default { - display: inline-block; - position: relative; - width: 80px; - height: 80px; - background-color: white; - box-shadow: 0 8px 20px 0 rgba(0, 0, 0, 0.25), 0 2px 10px 0 rgba(0, 0, 0, 0.12); -} .lds-default div { position: absolute; width: 6px; @@ -55,66 +47,6 @@ border-radius: 50%; animation: lds-default 1.2s linear infinite; } -.lds-default div:nth-child(1) { - animation-delay: 0s; - top: 37px; - left: 66px; -} -.lds-default div:nth-child(2) { - animation-delay: -0.1s; - top: 22px; - left: 62px; -} -.lds-default div:nth-child(3) { - animation-delay: -0.2s; - top: 11px; - left: 52px; -} -.lds-default div:nth-child(4) { - animation-delay: -0.3s; - top: 7px; - left: 37px; -} -.lds-default div:nth-child(5) { - animation-delay: -0.4s; - top: 11px; - left: 22px; -} -.lds-default div:nth-child(6) { - animation-delay: -0.5s; - top: 22px; - left: 11px; -} -.lds-default div:nth-child(7) { - animation-delay: -0.6s; - top: 37px; - left: 7px; -} -.lds-default div:nth-child(8) { - animation-delay: -0.7s; - top: 52px; - left: 11px; -} -.lds-default div:nth-child(9) { - animation-delay: -0.8s; - top: 62px; - left: 22px; -} -.lds-default div:nth-child(10) { - animation-delay: -0.9s; - top: 66px; - left: 37px; -} -.lds-default div:nth-child(11) { - animation-delay: -1s; - top: 62px; - left: 52px; -} -.lds-default div:nth-child(12) { - animation-delay: -1.1s; - top: 52px; - left: 62px; -} @keyframes lds-default { 0%, 20%, 80%, 100% { transform: scale(1); diff --git a/src/Pages/Internal/HotReloadLoadingIndicator.elm b/src/Pages/Internal/HotReloadLoadingIndicator.elm new file mode 100644 index 00000000..478aea7d --- /dev/null +++ b/src/Pages/Internal/HotReloadLoadingIndicator.elm @@ -0,0 +1,100 @@ +module Pages.Internal.HotReloadLoadingIndicator exposing (..) + +import Html exposing (Html, div) +import Html.Attributes exposing (..) + + +view : Bool -> Html msg +view hmrStatus = + div + [ id "__elm-pages-loading" + , class "lds-default" + , style "position" "fixed" + , style "bottom" "10px" + , style "right" "10px" + , style "width" "80px" + , style "height" "80px" + , style "background-color" "white" + , style "box-shadow" "0 8px 15px 0 rgba(0, 0, 0, 0.25), 0 2px 10px 0 rgba(0, 0, 0, 0.12)" + , style "display" + (case hmrStatus of + True -> + "block" + + False -> + "none" + ) + ] + [ div + [ style "animation-delay" "0s" + , style "top" "37px" + , style "left" "66px" + ] + [] + , div + [ style "animation-delay" "-0.1s" + , style "top" "22px" + , style "left" "62px" + ] + [] + , div + [ style "animation-delay" "-0.2s" + , style "top" "11px" + , style "left" "52px" + ] + [] + , div + [ style "animation-delay" "-0.3s" + , style "top" "7px" + , style "left" "37px" + ] + [] + , div + [ style "animation-delay" "-0.4s" + , style "top" "11px" + , style "left" "22px" + ] + [] + , div + [ style "animation-delay" "-0.5s" + , style "top" "22px" + , style "left" "11px" + ] + [] + , div + [ style "animation-delay" "-0.6s" + , style "top" "37px" + , style "left" "7px" + ] + [] + , div + [ style "animation-delay" "-0.7s" + , style "top" "52px" + , style "left" "11px" + ] + [] + , div + [ style "animation-delay" "-0.8s" + , style "top" "62px" + , style "left" "22px" + ] + [] + , div + [ style "animation-delay" "-0.9s" + , style "top" "66px" + , style "left" "37px" + ] + [] + , div + [ style "animation-delay" "-1s" + , style "top" "62px" + , style "left" "52px" + ] + [] + , div + [ style "animation-delay" "-1.1s" + , style "top" "52px" + , style "left" "62px" + ] + [] + ] diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index 8b39ff89..8dfd4b03 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -6,13 +6,14 @@ import Browser.Navigation import Dict exposing (Dict) import Head import Html exposing (Html) -import Html.Attributes +import Html.Attributes exposing (style) import Http import Json.Decode as Decode import Json.Encode import Pages.ContentCache as ContentCache exposing (ContentCache) import Pages.Document import Pages.Internal.ApplicationType as ApplicationType +import Pages.Internal.HotReloadLoadingIndicator as HotReloadLoadingIndicator import Pages.Internal.Platform.Cli import Pages.Internal.String as String import Pages.Manifest as Manifest @@ -210,34 +211,14 @@ view pathKey content viewFn model = loadingView : HmrStatus -> Html msg loadingView hmrStatus = - Html.div - [ Html.Attributes.id "__elm-pages-loading" - , Html.Attributes.class "lds-default" - , Html.Attributes.style "position" "fixed" - , Html.Attributes.style "bottom" "10px" - , Html.Attributes.style "right" "10px" - , Html.Attributes.style "display" - (case hmrStatus of - HmrLoading -> - "block" + HotReloadLoadingIndicator.view + (case hmrStatus of + HmrLoading -> + True - HmrLoaded -> - "none" - ) - ] - [ Html.div [] [] - , Html.div [] [] - , Html.div [] [] - , Html.div [] [] - , Html.div [] [] - , Html.div [] [] - , Html.div [] [] - , Html.div [] [] - , Html.div [] [] - , Html.div [] [] - , Html.div [] [] - , Html.div [] [] - ] + HmrLoaded -> + False + ) onViewChangeElement currentUrl = From 87d810790f0d08105e30150b38917bbe6d7ada2d Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Fri, 8 May 2020 07:13:09 -0700 Subject: [PATCH 66/73] Move more of loading indicator style into Elm. --- examples/docs/style.css | 17 ------ generator/src/develop.js | 14 +++++ .../Internal/HotReloadLoadingIndicator.elm | 58 ++++++++++--------- src/Pages/Internal/Platform.elm | 16 ++--- 4 files changed, 53 insertions(+), 52 deletions(-) diff --git a/examples/docs/style.css b/examples/docs/style.css index 8b502c16..b94a2d6b 100644 --- a/examples/docs/style.css +++ b/examples/docs/style.css @@ -38,20 +38,3 @@ display: none !important; } } - -.lds-default div { - position: absolute; - width: 6px; - height: 6px; - background: #000; - border-radius: 50%; - animation: lds-default 1.2s linear infinite; -} -@keyframes lds-default { - 0%, 20%, 80%, 100% { - transform: scale(1); - } - 50% { - transform: scale(1.5); - } -} diff --git a/generator/src/develop.js b/generator/src/develop.js index 79192fbc..c5d16b26 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -16,6 +16,19 @@ const readline = require("readline"); const webpackDevMiddleware = require("webpack-dev-middleware"); const PluginGenerateElmPagesBuild = require('./plugin-generate-elm-pages-build') +const hotReloadIndicatorStyle = ` + + ` + module.exports = { start, run }; function start({ routes, debug, customPort, manifestConfig }) { const config = webpackOptions(false, routes, { @@ -185,6 +198,7 @@ function webpackOptions( console.log("No service worker registered."); } + ${production ? '' : hotReloadIndicatorStyle} diff --git a/src/Pages/Internal/HotReloadLoadingIndicator.elm b/src/Pages/Internal/HotReloadLoadingIndicator.elm index 478aea7d..a887f500 100644 --- a/src/Pages/Internal/HotReloadLoadingIndicator.elm +++ b/src/Pages/Internal/HotReloadLoadingIndicator.elm @@ -1,12 +1,26 @@ module Pages.Internal.HotReloadLoadingIndicator exposing (..) -import Html exposing (Html, div) +import Html exposing (Html) import Html.Attributes exposing (..) +circle : List (Html.Attribute msg) -> Html msg +circle attrs = + Html.div + (style "animation" "lds-default 1.2s linear infinite" + :: style "background" "#000" + :: style "position" "absolute" + :: style "width" "6px" + :: style "height" "6px" + :: style "border-radius" "50%" + :: attrs + ) + [] + + view : Bool -> Html msg -view hmrStatus = - div +view display = + Html.div [ id "__elm-pages-loading" , class "lds-default" , style "position" "fixed" @@ -17,7 +31,7 @@ view hmrStatus = , style "background-color" "white" , style "box-shadow" "0 8px 15px 0 rgba(0, 0, 0, 0.25), 0 2px 10px 0 rgba(0, 0, 0, 0.12)" , style "display" - (case hmrStatus of + (case display of True -> "block" @@ -25,76 +39,64 @@ view hmrStatus = "none" ) ] - [ div + [ circle [ style "animation-delay" "0s" , style "top" "37px" , style "left" "66px" ] - [] - , div + , circle [ style "animation-delay" "-0.1s" , style "top" "22px" , style "left" "62px" ] - [] - , div + , circle [ style "animation-delay" "-0.2s" , style "top" "11px" , style "left" "52px" ] - [] - , div + , circle [ style "animation-delay" "-0.3s" , style "top" "7px" , style "left" "37px" ] - [] - , div + , circle [ style "animation-delay" "-0.4s" , style "top" "11px" , style "left" "22px" ] - [] - , div + , circle [ style "animation-delay" "-0.5s" , style "top" "22px" , style "left" "11px" ] - [] - , div + , circle [ style "animation-delay" "-0.6s" , style "top" "37px" , style "left" "7px" ] - [] - , div + , circle [ style "animation-delay" "-0.7s" , style "top" "52px" , style "left" "11px" ] - [] - , div + , circle [ style "animation-delay" "-0.8s" , style "top" "62px" , style "left" "22px" ] - [] - , div + , circle [ style "animation-delay" "-0.9s" , style "top" "66px" , style "left" "37px" ] - [] - , div + , circle [ style "animation-delay" "-1s" , style "top" "62px" , style "left" "52px" ] - [] - , div + , circle [ style "animation-delay" "-1.1s" , style "top" "52px" , style "left" "62px" ] - [] ] diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index 8dfd4b03..5c235820 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -7,6 +7,7 @@ import Dict exposing (Dict) import Head import Html exposing (Html) import Html.Attributes exposing (style) +import Html.Lazy import Http import Json.Decode as Decode import Json.Encode @@ -211,14 +212,15 @@ view pathKey content viewFn model = loadingView : HmrStatus -> Html msg loadingView hmrStatus = - HotReloadLoadingIndicator.view - (case hmrStatus of - HmrLoading -> - True + (case hmrStatus of + HmrLoading -> + True - HmrLoaded -> - False - ) + HmrLoaded -> + False + ) + |> Html.Lazy.lazy + HotReloadLoadingIndicator.view onViewChangeElement currentUrl = From 538b76f45c4ab56a178fa21a0e13394cad54542d Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sat, 9 May 2020 15:20:44 -0700 Subject: [PATCH 67/73] Don't render loading indicator at all outside of dev mode. --- index.js | 1 + src/Pages/Internal/Platform.elm | 53 +++++++++++++++++++++------------ 2 files changed, 35 insertions(+), 19 deletions(-) diff --git a/index.js b/index.js index 0c28b282..3e03e15a 100644 --- a/index.js +++ b/index.js @@ -41,6 +41,7 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) ? window.location.origin : document.baseURI, isPrerendering: isPrerendering, + isDevServer: !!module.hot, contentJson } }); diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index 5c235820..b80ad5c3 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -205,22 +205,26 @@ view pathKey content viewFn model = , body = [ onViewChangeElement model.url , body |> Html.map UserMsg |> Html.map AppMsg - , loadingView model.hmrStatus + , Html.Lazy.lazy2 loadingView model.phase model.hmrStatus ] } -loadingView : HmrStatus -> Html msg -loadingView hmrStatus = - (case hmrStatus of - HmrLoading -> - True +loadingView : Phase -> HmrStatus -> Html msg +loadingView phase hmrStatus = + case phase of + DevClient -> + (case hmrStatus of + HmrLoading -> + True - HmrLoaded -> - False - ) - |> Html.Lazy.lazy - HotReloadLoadingIndicator.view + _ -> + False + ) + |> HotReloadLoadingIndicator.view + + _ -> + Html.text "" onViewChangeElement currentUrl = @@ -317,15 +321,25 @@ init pathKey canonicalSiteUrl document toJsPort viewFn content initUserModel fla Ok okCache -> let phase = - case Decode.decodeValue (Decode.field "isPrerendering" Decode.bool) flags of - Ok True -> + case + Decode.decodeValue + (Decode.map2 Tuple.pair + (Decode.field "isPrerendering" Decode.bool) + (Decode.field "isDevServer" Decode.bool) + ) + flags + of + Ok ( True, _ ) -> Prerender - Ok False -> - Client + Ok ( False, True ) -> + DevClient + + Ok ( False, False ) -> + ProdClient Err _ -> - Client + DevClient ( userModel, userCmd ) = maybePagePath @@ -384,7 +398,7 @@ init pathKey canonicalSiteUrl document toJsPort viewFn content initUserModel fla , baseUrl = baseUrl , userModel = userModel , contentCache = contentCache - , phase = Client + , phase = DevClient , hmrStatus = HmrLoaded } , Cmd.batch @@ -437,7 +451,8 @@ type alias ModelDetails userModel metadata view = type Phase = Prerender - | Client + | DevClient + | ProdClient update : @@ -726,7 +741,7 @@ application config = Prerender -> noOpUpdate - Client -> + _ -> config.update noOpUpdate = From df5b36d7fbd7e852060113b44efde7d72a8a60d4 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sat, 9 May 2020 20:33:32 -0700 Subject: [PATCH 68/73] Render loading indicator off to the side of the elm debugger panel. --- generator/src/develop.js | 4 + index.js | 159 ++++++++++-------- .../Internal/HotReloadLoadingIndicator.elm | 12 +- src/Pages/Internal/Platform.elm | 26 ++- 4 files changed, 112 insertions(+), 89 deletions(-) diff --git a/generator/src/develop.js b/generator/src/develop.js index c5d16b26..596c0b1e 100644 --- a/generator/src/develop.js +++ b/generator/src/develop.js @@ -56,6 +56,10 @@ function start({ routes, debug, customPort, manifestConfig }) { log: console.log, path: '/__webpack_hmr' })) + app.get('/elm-pages-dev-server-options', function (req, res) { + res.json({ elmDebugger: debug }); + }); + app.use("*", function (req, res, next) { // don't know why this works, but it does // see: https://github.com/jantimon/html-webpack-plugin/issues/145#issuecomment-170554832 diff --git a/index.js b/index.js index 3e03e15a..1c5134b5 100644 --- a/index.js +++ b/index.js @@ -32,87 +32,91 @@ function loadContentAndInitializeApp(/** @type { init: any } */ mainElmModule) const isPrerendering = navigator.userAgent.indexOf("Headless") >= 0 const path = window.location.pathname.replace(/(\w)$/, "$1/") - return httpGet(`${window.location.origin}${path}content.json`).then(function (/** @type JSON */ contentJson) { + return Promise.all([ + getConfig(), + httpGet(`${window.location.origin}${path}content.json`)]).then(function (/** @type {[DevServerConfig?, JSON]} */[devServerConfig, contentJson]) { + console.log('devServerConfig', devServerConfig); - const app = mainElmModule.init({ - flags: { - secrets: null, - baseUrl: isPrerendering - ? window.location.origin - : document.baseURI, - isPrerendering: isPrerendering, - isDevServer: !!module.hot, - contentJson - } - }); - - app.ports.toJsPort.subscribe(( - /** @type { { head: HeadTag[], allRoutes: string[] } } */ fromElm - ) => { - appendTag({ - name: "meta", - attributes: [ - ["name", "generator"], - ["content", `elm-pages v${elmPagesVersion}`] - ] + const app = mainElmModule.init({ + flags: { + secrets: null, + baseUrl: isPrerendering + ? window.location.origin + : document.baseURI, + isPrerendering: isPrerendering, + isDevServer: !!module.hot, + isElmDebugMode: devServerConfig ? devServerConfig.elmDebugger : false, + contentJson, + } }); - window.allRoutes = fromElm.allRoutes.map(route => new URL(route, document.baseURI).href); - - if (navigator.userAgent.indexOf("Headless") >= 0) { - fromElm.head.forEach(headTag => { - appendTag(headTag); + app.ports.toJsPort.subscribe(( + /** @type { { head: HeadTag[], allRoutes: string[] } } */ fromElm + ) => { + appendTag({ + name: "meta", + attributes: [ + ["name", "generator"], + ["content", `elm-pages v${elmPagesVersion}`] + ] }); - headTagsAdded = true; - if (elmViewRendered) { - document.dispatchEvent(new Event("prerender-trigger")); - } - } else { - setupLinkPrefetching(); - } - }); + window.allRoutes = fromElm.allRoutes.map(route => new URL(route, document.baseURI).href); - if (module.hot) { - - // found this trick in the next.js source code - // https://github.com/zeit/next.js/blob/886037b1bac4bdbfeb689b032c1612750fb593f7/packages/next/client/dev/error-overlay/eventsource.js - // https://github.com/zeit/next.js/blob/886037b1bac4bdbfeb689b032c1612750fb593f7/packages/next/client/dev/dev-build-watcher.js - // more details about this API at https://www.html5rocks.com/en/tutorials/eventsource/basics/ - let source = new window.EventSource('/__webpack_hmr') - // source.addEventListener('open', () => { console.log('open!!!!!') }) - source.addEventListener('message', (e) => { - // console.log('message!!!!!', e) - // console.log(e.data.action) - // console.log('ACTION', e.data.action); - // if (e.data && e.data.action) - - if (event.data === '\uD83D\uDC93') { - // heartbeat - } else { - const obj = JSON.parse(event.data) - // console.log('obj.action', obj.action); - - if (obj.action === 'building') { - app.ports.fromJsPort.send({ thingy: 'hmr-check' }); - } else if (obj.action === 'built') { - // console.log('httpGet start'); - - let currentPath = window.location.pathname.replace(/(\w)$/, "$1/") - httpGet(`${window.location.origin}${currentPath}content.json`).then(function (/** @type JSON */ contentJson) { - // console.log('httpGet received'); - - app.ports.fromJsPort.send({ contentJson: contentJson }); - }); + if (navigator.userAgent.indexOf("Headless") >= 0) { + fromElm.head.forEach(headTag => { + appendTag(headTag); + }); + headTagsAdded = true; + if (elmViewRendered) { + document.dispatchEvent(new Event("prerender-trigger")); } - + } else { + setupLinkPrefetching(); } - }) + }); - } - return app - }); + if (module.hot) { + + // found this trick in the next.js source code + // https://github.com/zeit/next.js/blob/886037b1bac4bdbfeb689b032c1612750fb593f7/packages/next/client/dev/error-overlay/eventsource.js + // https://github.com/zeit/next.js/blob/886037b1bac4bdbfeb689b032c1612750fb593f7/packages/next/client/dev/dev-build-watcher.js + // more details about this API at https://www.html5rocks.com/en/tutorials/eventsource/basics/ + let source = new window.EventSource('/__webpack_hmr') + // source.addEventListener('open', () => { console.log('open!!!!!') }) + source.addEventListener('message', (e) => { + // console.log('message!!!!!', e) + // console.log(e.data.action) + // console.log('ACTION', e.data.action); + // if (e.data && e.data.action) + + if (event.data === '\uD83D\uDC93') { + // heartbeat + } else { + const obj = JSON.parse(event.data) + // console.log('obj.action', obj.action); + + if (obj.action === 'building') { + app.ports.fromJsPort.send({ thingy: 'hmr-check' }); + } else if (obj.action === 'built') { + // console.log('httpGet start'); + + let currentPath = window.location.pathname.replace(/(\w)$/, "$1/") + httpGet(`${window.location.origin}${currentPath}content.json`).then(function (/** @type JSON */ contentJson) { + // console.log('httpGet received'); + + app.ports.fromJsPort.send({ contentJson: contentJson }); + }); + } + + } + }) + + } + + return app + }); } function setupLinkPrefetching() { @@ -226,3 +230,16 @@ function httpGet(/** @type string */ theUrl) { xmlHttp.send(null); }) } + +/** +* @returns { Promise} +*/ +function getConfig() { + if (module.hot) { + return httpGet(`/elm-pages-dev-server-options`) + } else { + return Promise.resolve(null) + } +} + +/** @typedef { { elmDebugger : boolean } } DevServerConfig */ diff --git a/src/Pages/Internal/HotReloadLoadingIndicator.elm b/src/Pages/Internal/HotReloadLoadingIndicator.elm index a887f500..4aab10c5 100644 --- a/src/Pages/Internal/HotReloadLoadingIndicator.elm +++ b/src/Pages/Internal/HotReloadLoadingIndicator.elm @@ -18,14 +18,20 @@ circle attrs = [] -view : Bool -> Html msg -view display = +view : Bool -> Bool -> Html msg +view isDebugMode display = Html.div [ id "__elm-pages-loading" , class "lds-default" , style "position" "fixed" , style "bottom" "10px" - , style "right" "10px" + , style "right" + (if isDebugMode then + "110px" + + else + "10px" + ) , style "width" "80px" , style "height" "80px" , style "background-color" "white" diff --git a/src/Pages/Internal/Platform.elm b/src/Pages/Internal/Platform.elm index b80ad5c3..23d32c16 100644 --- a/src/Pages/Internal/Platform.elm +++ b/src/Pages/Internal/Platform.elm @@ -213,7 +213,7 @@ view pathKey content viewFn model = loadingView : Phase -> HmrStatus -> Html msg loadingView phase hmrStatus = case phase of - DevClient -> + DevClient isDebugMode -> (case hmrStatus of HmrLoading -> True @@ -221,7 +221,7 @@ loadingView phase hmrStatus = _ -> False ) - |> HotReloadLoadingIndicator.view + |> HotReloadLoadingIndicator.view isDebugMode _ -> Html.text "" @@ -323,23 +323,24 @@ init pathKey canonicalSiteUrl document toJsPort viewFn content initUserModel fla phase = case Decode.decodeValue - (Decode.map2 Tuple.pair + (Decode.map3 (\a b c -> ( a, b, c )) (Decode.field "isPrerendering" Decode.bool) (Decode.field "isDevServer" Decode.bool) + (Decode.field "isElmDebugMode" Decode.bool) ) flags of - Ok ( True, _ ) -> + Ok ( True, _, _ ) -> Prerender - Ok ( False, True ) -> - DevClient + Ok ( False, True, isElmDebugMode ) -> + DevClient isElmDebugMode - Ok ( False, False ) -> + Ok ( False, False, _ ) -> ProdClient Err _ -> - DevClient + DevClient False ( userModel, userCmd ) = maybePagePath @@ -398,7 +399,7 @@ init pathKey canonicalSiteUrl document toJsPort viewFn content initUserModel fla , baseUrl = baseUrl , userModel = userModel , contentCache = contentCache - , phase = DevClient + , phase = DevClient False , hmrStatus = HmrLoaded } , Cmd.batch @@ -451,7 +452,7 @@ type alias ModelDetails userModel metadata view = type Phase = Prerender - | DevClient + | DevClient Bool | ProdClient @@ -649,10 +650,6 @@ update content allRoutes canonicalSiteUrl viewFunction pathKey onPageChangeMsg t ) StartingHotReload -> - --let - -- _ = - -- Debug.log "starting..." "" - --in ( { model | hmrStatus = HmrLoading }, Cmd.none ) CliMsg _ -> @@ -780,7 +777,6 @@ application config = AppMsg (HotReloadComplete contentJson) Err error -> - --Debug.todo "" -- TODO should be no message here AppMsg StartingHotReload ) From dd65124eb39b50f9b7ef321772e84f28d70883e3 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 10 May 2020 07:38:51 -0700 Subject: [PATCH 69/73] Update docs. --- src/OptimizedDecoder.elm | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/src/OptimizedDecoder.elm b/src/OptimizedDecoder.elm index cc18e168..c2d91d1e 100644 --- a/src/OptimizedDecoder.elm +++ b/src/OptimizedDecoder.elm @@ -9,25 +9,10 @@ module OptimizedDecoder exposing , decodeString, decodeValue, decoder ) -{-| This package presents a somewhat experimental approach to JSON decoding. Its -API looks very much like the core `Json.Decode` API. The major differences are -the final `decodeString` and `decodeValue` functions, which return a -`DecodeResult a`. - -Decoding with this library can result in one of 4 possible outcomes: - - - The input wasn't valid JSON - - One or more errors occurred - - Decoding succeeded but produced warnings - - Decoding succeeded without warnings - -Both the `Errors` and `Warnings` types are (mostly) machine readable: they are -implemented as a recursive data structure that points to the location of the -error in the input json, producing information about what went wrong (i.e. "what -was the expected type, and what did the actual value look like"). - -Further, this library also adds a few extra `Decoder`s that help with making -assertions about the structure of the JSON while decoding. +{-| This module allows you to build decoders that `elm-pages` can optimize for you in your `StaticHttp` requests. +It does this by stripping of unused fields during the CLI build step. When it runs in production, it will +just run a plain `elm/json` decoder, so you're fetching and decoding the stripped-down data, but without any +performance penalty. For convenience, this library also includes a `Json.Decode.Exploration.Pipeline` module which is largely a copy of [`NoRedInk/elm-decode-pipeline`][edp]. From bfd697717774b0cfee779bacc8ca798e47ad5962 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 10 May 2020 15:56:55 -0700 Subject: [PATCH 70/73] Update docs. --- src/Head.elm | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/Head.elm b/src/Head.elm index b4e2a987..0d2633e5 100644 --- a/src/Head.elm +++ b/src/Head.elm @@ -57,7 +57,23 @@ type alias Details pathKey = } -{-| TODO +{-| Take a look at this [Google Search Gallery](https://developers.google.com/search/docs/guides/search-gallery) +to see some examples of how structured data can be used by search engines to give rich search results. It can help boost +your rankings, get better engagement for your content, and also make your content more accessible. For example, +voice assistant devices can make use of structured data. If you're hosting a conference and want to make the event +date and location easy for attendees to find, this can make that information more accessible. + +For the current version of API, you'll need to make sure that the format is correct and contains the required and recommended +structure. + +Check out for a comprehensive listing of possible data types and fields. And take a look at +Google's [Structured Data Testing Tool](https://search.google.com/structured-data/testing-tool) +too make sure that your structured data is valid and includes the recommended values. + +In the future, `elm-pages` will likely support a typed API, but schema.org is a massive spec, and changes frequently. +And there are multiple sources of information on the possible and recommended structure. So it will take some time +for the right API design to evolve. In the meantime, this allows you to make use of this for SEO purposes. + -} structuredData : Json.Encode.Value -> Tag pathKey structuredData value = From e3b8af646c652a9e455a6e547fb0864e4803063c Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 10 May 2020 17:51:33 -0700 Subject: [PATCH 71/73] Update docs. --- src/Head.elm | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 72 insertions(+), 1 deletion(-) diff --git a/src/Head.elm b/src/Head.elm index 0d2633e5..d3cdfc47 100644 --- a/src/Head.elm +++ b/src/Head.elm @@ -57,7 +57,78 @@ type alias Details pathKey = } -{-| Take a look at this [Google Search Gallery](https://developers.google.com/search/docs/guides/search-gallery) +{-| You can learn more about structured data in [Google's intro to structured data](https://developers.google.com/search/docs/guides/intro-structured-data). + +When you add a `structuredData` item to one of your pages in `elm-pages`, it will add `json-ld` data to your document that looks like this: + +```html + +``` + +To get that data, you would write this in your `elm-pages` head tags: + + import Json.Encode as Encode + + {-| + -} + encodeArticle : + { title : String + , description : String + , author : StructuredData { authorMemberOf | personOrOrganization : () } authorPossibleFields + , publisher : StructuredData { publisherMemberOf | personOrOrganization : () } publisherPossibleFields + , url : String + , imageUrl : String + , datePublished : String + , mainEntityOfPage : Encode.Value + } + -> Head.Tag pathKey + encodeArticle info = + Encode.object + [ ( "@context", Encode.string "http://schema.org/" ) + , ( "@type", Encode.string "Article" ) + , ( "headline", Encode.string info.title ) + , ( "description", Encode.string info.description ) + , ( "image", Encode.string info.imageUrl ) + , ( "author", encode info.author ) + , ( "publisher", encode info.publisher ) + , ( "url", Encode.string info.url ) + , ( "datePublished", Encode.string info.datePublished ) + , ( "mainEntityOfPage", info.mainEntityOfPage ) + ] + |> Head.structuredData + +Take a look at this [Google Search Gallery](https://developers.google.com/search/docs/guides/search-gallery) to see some examples of how structured data can be used by search engines to give rich search results. It can help boost your rankings, get better engagement for your content, and also make your content more accessible. For example, voice assistant devices can make use of structured data. If you're hosting a conference and want to make the event From 2641097917dd924e95a9adc96adb512030f11107 Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Sun, 10 May 2020 18:04:42 -0700 Subject: [PATCH 72/73] Remove direct chokidar dependency. --- package-lock.json | 4844 ++++++++++++++++++++++++--------------------- package.json | 2 - 2 files changed, 2627 insertions(+), 2219 deletions(-) diff --git a/package-lock.json b/package-lock.json index a9696e8d..2d945a78 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,28 +5,40 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz", + "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==", "requires": { - "@babel/highlight": "^7.0.0" + "@babel/highlight": "^7.8.3" + } + }, + "@babel/compat-data": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.9.6.tgz", + "integrity": "sha512-5QPTrNen2bm7RBc7dsOmcA5hbrS4O2Vhmk5XOL4zWW/zD/hV0iinpefDlkm+tBBy8kDtFaaeEvmAqt+nURAV2g==", + "requires": { + "browserslist": "^4.11.1", + "invariant": "^2.2.4", + "semver": "^5.5.0" } }, "@babel/core": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.5.tgz", - "integrity": "sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.9.6.tgz", + "integrity": "sha512-nD3deLvbsApbHAHttzIssYqgb883yU/d9roe4RZymBCDaZryMJDbptVpEpeQuRh4BJ+SYI8le9YGxKvFEvl1Wg==", "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helpers": "^7.7.4", - "@babel/parser": "^7.7.5", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.6", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helpers": "^7.9.6", + "@babel/parser": "^7.9.6", + "@babel/template": "^7.8.6", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6", "convert-source-map": "^1.7.0", "debug": "^4.1.0", - "json5": "^2.1.0", + "gensync": "^1.0.0-beta.1", + "json5": "^2.1.2", "lodash": "^4.17.13", "resolve": "^1.3.2", "semver": "^5.4.1", @@ -34,706 +46,781 @@ } }, "@babel/generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", - "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.9.6.tgz", + "integrity": "sha512-+htwWKJbH2bL72HRluF8zumBxzuX0ZZUFl3JLNyoUjM/Ho8wnVpPXM6aUz8cfKDqQ/h7zHqKt4xzJteUosckqQ==", "requires": { - "@babel/types": "^7.7.4", + "@babel/types": "^7.9.6", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" } }, "@babel/helper-annotate-as-pure": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz", - "integrity": "sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz", + "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.3" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz", - "integrity": "sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz", + "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==", "requires": { - "@babel/helper-explode-assignable-expression": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-explode-assignable-expression": "^7.8.3", + "@babel/types": "^7.8.3" } }, - "@babel/helper-call-delegate": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz", - "integrity": "sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==", + "@babel/helper-compilation-targets": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.9.6.tgz", + "integrity": "sha512-x2Nvu0igO0ejXzx09B/1fGBxY9NXQlBW2kZsSxCJft+KHN8t9XWzIvFxtPHnBOAXpVsdxZKZFbRUC8TsNKajMw==", "requires": { - "@babel/helper-hoist-variables": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/compat-data": "^7.9.6", + "browserslist": "^4.11.1", + "invariant": "^2.2.4", + "levenary": "^1.1.1", + "semver": "^5.5.0" } }, "@babel/helper-create-regexp-features-plugin": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz", - "integrity": "sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz", + "integrity": "sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg==", "requires": { - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.6.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-regex": "^7.8.3", + "regexpu-core": "^4.7.0" } }, "@babel/helper-define-map": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz", - "integrity": "sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz", + "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==", "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/helper-function-name": "^7.8.3", + "@babel/types": "^7.8.3", "lodash": "^4.17.13" } }, "@babel/helper-explode-assignable-expression": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz", - "integrity": "sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz", + "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==", "requires": { - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", - "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.9.5.tgz", + "integrity": "sha512-JVcQZeXM59Cd1qanDUxv9fgJpt3NeKUaqBqUEvfmQ+BCOKq2xUgaWZW2hr0dkbyJgezYuplEoh5knmrnS68efw==", "requires": { - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/types": "^7.9.5" } }, "@babel/helper-get-function-arity": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", - "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz", + "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.3" } }, "@babel/helper-hoist-variables": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz", - "integrity": "sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz", + "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.3" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz", - "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz", + "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.3" } }, "@babel/helper-module-imports": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz", - "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz", + "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.3" } }, "@babel/helper-module-transforms": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz", - "integrity": "sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz", + "integrity": "sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA==", "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-simple-access": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-simple-access": "^7.8.3", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/template": "^7.8.6", + "@babel/types": "^7.9.0", "lodash": "^4.17.13" } }, "@babel/helper-optimise-call-expression": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz", - "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz", + "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.3" } }, "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==" + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==" }, "@babel/helper-regex": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.5.5.tgz", - "integrity": "sha512-CkCYQLkfkiugbRDO8eZn6lRuR8kzZoGXCg3149iTk5se7g6qykSpy3+hELSwquhu+TgHn8nkLiBwHvNX8Hofcw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz", + "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==", "requires": { "lodash": "^4.17.13" } }, "@babel/helper-remap-async-to-generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz", - "integrity": "sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz", + "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==", "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-wrap-function": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-wrap-function": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-replace-supers": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz", - "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.9.6.tgz", + "integrity": "sha512-qX+chbxkbArLyCImk3bWV+jB5gTNU/rsze+JlcF6Nf8tVTigPJSI1o1oBow/9Resa1yehUO9lIipsmu9oG4RzA==", "requires": { - "@babel/helper-member-expression-to-functions": "^7.7.4", - "@babel/helper-optimise-call-expression": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-member-expression-to-functions": "^7.8.3", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" } }, "@babel/helper-simple-access": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz", - "integrity": "sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz", + "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==", "requires": { - "@babel/template": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/template": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helper-split-export-declaration": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", - "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz", + "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==", "requires": { - "@babel/types": "^7.7.4" + "@babel/types": "^7.8.3" } }, + "@babel/helper-validator-identifier": { + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.5.tgz", + "integrity": "sha512-/8arLKUFq882w4tWGj9JYzRpAlZgiWUJ+dtteNTDqrRBz9Iguck9Rn3ykuBDoUwh2TO4tSAJlrxDUOXWklJe4g==" + }, "@babel/helper-wrap-function": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz", - "integrity": "sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz", + "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==", "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/helper-function-name": "^7.8.3", + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.8.3", + "@babel/types": "^7.8.3" } }, "@babel/helpers": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz", - "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.9.6.tgz", + "integrity": "sha512-tI4bUbldloLcHWoRUMAj4g1bF313M/o6fBKhIsb3QnGVPwRm9JsNf/gqMkQ7zjqReABiffPV6RWj7hEglID5Iw==", "requires": { - "@babel/template": "^7.7.4", - "@babel/traverse": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/template": "^7.8.3", + "@babel/traverse": "^7.9.6", + "@babel/types": "^7.9.6" } }, "@babel/highlight": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", - "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.9.0.tgz", + "integrity": "sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ==", "requires": { + "@babel/helper-validator-identifier": "^7.9.0", "chalk": "^2.0.0", - "esutils": "^2.0.2", "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==" + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.9.6.tgz", + "integrity": "sha512-AoeIEJn8vt+d/6+PXDRPaksYhnlbMIiejioBZvvMQsOjW/JYK6k/0dKnvvP3EhK5GfMBWDPtrxRtegWdAcdq9Q==" }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz", - "integrity": "sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz", + "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.7.4", - "@babel/plugin-syntax-async-generators": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz", - "integrity": "sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz", + "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-dynamic-import": "^7.8.0" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz", - "integrity": "sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz", + "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.0" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz", + "integrity": "sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz", - "integrity": "sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.6.tgz", + "integrity": "sha512-Ga6/fhGqA9Hj+y6whNpPv8psyaK5xzrQwSPsGPloVkvmH+PqW1ixdnfJ9uIO06OjQNYol3PMnfmJ8vfZtkzF+A==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-transform-parameters": "^7.9.5" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz", - "integrity": "sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz", + "integrity": "sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz", - "integrity": "sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA==", + "version": "7.8.8", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz", + "integrity": "sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.8", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-async-generators": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz", - "integrity": "sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz", - "integrity": "sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-json-strings": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz", - "integrity": "sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz", + "integrity": "sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz", - "integrity": "sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz", - "integrity": "sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-top-level-await": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz", - "integrity": "sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz", + "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz", - "integrity": "sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz", + "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz", - "integrity": "sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz", + "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==", "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.7.4" + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-remap-async-to-generator": "^7.8.3" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz", - "integrity": "sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz", + "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz", - "integrity": "sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz", + "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", + "@babel/helper-plugin-utils": "^7.8.3", "lodash": "^4.17.13" } }, "@babel/plugin-transform-classes": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz", - "integrity": "sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.5.tgz", + "integrity": "sha512-x2kZoIuLC//O5iA7PEvecB105o7TLzZo8ofBVhP79N+DO3jaX+KYfww9TQcfBEZD0nikNyYcGB1IKtRq36rdmg==", "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-define-map": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-optimise-call-expression": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-define-map": "^7.8.3", + "@babel/helper-function-name": "^7.9.5", + "@babel/helper-optimise-call-expression": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.6", + "@babel/helper-split-export-declaration": "^7.8.3", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz", - "integrity": "sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz", + "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-destructuring": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz", - "integrity": "sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.9.5.tgz", + "integrity": "sha512-j3OEsGel8nHL/iusv/mRd5fYZ3DrOxWC82x0ogmdN/vHfAP4MYw+AFKYanzWlktNwikKvlzUV//afBW5FTp17Q==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz", - "integrity": "sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz", + "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz", - "integrity": "sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz", + "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz", - "integrity": "sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz", + "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==", "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-for-of": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz", - "integrity": "sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz", + "integrity": "sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-function-name": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz", - "integrity": "sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz", + "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==", "requires": { - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-function-name": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz", - "integrity": "sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz", + "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz", - "integrity": "sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz", + "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz", - "integrity": "sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.6.tgz", + "integrity": "sha512-zoT0kgC3EixAyIAU+9vfaUVKTv9IxBDSabgHoUCBP6FqEJ+iNiN7ip7NBKcYqbfUDfuC2mFCbM7vbu4qJgOnDw==", "requires": { - "@babel/helper-module-transforms": "^7.7.5", - "@babel/helper-plugin-utils": "^7.0.0", - "babel-plugin-dynamic-import-node": "^2.3.0" + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz", - "integrity": "sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.6.tgz", + "integrity": "sha512-7H25fSlLcn+iYimmsNe3uK1at79IE6SKW9q0/QeEHTMC9MdOZ+4bA+T1VFB5fgOqBWoqlifXRzYD0JPdmIrgSQ==", "requires": { - "@babel/helper-module-transforms": "^7.7.5", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.7.4", - "babel-plugin-dynamic-import-node": "^2.3.0" + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-simple-access": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz", - "integrity": "sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.6.tgz", + "integrity": "sha512-NW5XQuW3N2tTHim8e1b7qGy7s0kZ2OH3m5octc49K1SdAKGxYxeIx7hiIz05kS1R2R+hOWcsr1eYwcGhrdHsrg==", "requires": { - "@babel/helper-hoist-variables": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "babel-plugin-dynamic-import-node": "^2.3.0" + "@babel/helper-hoist-variables": "^7.8.3", + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3", + "babel-plugin-dynamic-import-node": "^2.3.3" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz", - "integrity": "sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==", + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz", + "integrity": "sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ==", "requires": { - "@babel/helper-module-transforms": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-module-transforms": "^7.9.0", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz", - "integrity": "sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz", + "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4" + "@babel/helper-create-regexp-features-plugin": "^7.8.3" } }, "@babel/plugin-transform-new-target": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz", - "integrity": "sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz", + "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-object-super": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz", - "integrity": "sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz", + "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.7.4" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-replace-supers": "^7.8.3" } }, "@babel/plugin-transform-parameters": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz", - "integrity": "sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw==", + "version": "7.9.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.5.tgz", + "integrity": "sha512-0+1FhHnMfj6lIIhVvS4KGQJeuhe1GI//h5uptK4PvLt+BGBxsoUJbd3/IW002yk//6sZPlFgsG1hY6OHLcy6kA==", "requires": { - "@babel/helper-call-delegate": "^7.7.4", - "@babel/helper-get-function-arity": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-get-function-arity": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-property-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz", - "integrity": "sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz", + "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-regenerator": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz", - "integrity": "sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz", + "integrity": "sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA==", "requires": { - "regenerator-transform": "^0.14.0" + "regenerator-transform": "^0.14.2" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz", - "integrity": "sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz", + "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz", - "integrity": "sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz", + "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-spread": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz", - "integrity": "sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz", + "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz", - "integrity": "sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz", + "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/helper-regex": "^7.8.3" } }, "@babel/plugin-transform-template-literals": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz", - "integrity": "sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz", + "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==", "requires": { - "@babel/helper-annotate-as-pure": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz", - "integrity": "sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz", + "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==", "requires": { - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz", - "integrity": "sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz", + "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==", "requires": { - "@babel/helper-create-regexp-features-plugin": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0" + "@babel/helper-create-regexp-features-plugin": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3" } }, "@babel/preset-env": { - "version": "7.7.6", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.6.tgz", - "integrity": "sha512-k5hO17iF/Q7tR9Jv8PdNBZWYW6RofxhnxKjBMc0nG4JTaWvOTiPoO/RLFwAKcA4FpmuBFm6jkoqaRJLGi0zdaQ==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.9.6.tgz", + "integrity": "sha512-0gQJ9RTzO0heXOhzftog+a/WyOuqMrAIugVYxMYf83gh1CQaQDjMtsOpqOwXyDL/5JcWsrCm8l4ju8QC97O7EQ==", "requires": { - "@babel/helper-module-imports": "^7.7.4", - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.7.4", - "@babel/plugin-proposal-dynamic-import": "^7.7.4", - "@babel/plugin-proposal-json-strings": "^7.7.4", - "@babel/plugin-proposal-object-rest-spread": "^7.7.4", - "@babel/plugin-proposal-optional-catch-binding": "^7.7.4", - "@babel/plugin-proposal-unicode-property-regex": "^7.7.4", - "@babel/plugin-syntax-async-generators": "^7.7.4", - "@babel/plugin-syntax-dynamic-import": "^7.7.4", - "@babel/plugin-syntax-json-strings": "^7.7.4", - "@babel/plugin-syntax-object-rest-spread": "^7.7.4", - "@babel/plugin-syntax-optional-catch-binding": "^7.7.4", - "@babel/plugin-syntax-top-level-await": "^7.7.4", - "@babel/plugin-transform-arrow-functions": "^7.7.4", - "@babel/plugin-transform-async-to-generator": "^7.7.4", - "@babel/plugin-transform-block-scoped-functions": "^7.7.4", - "@babel/plugin-transform-block-scoping": "^7.7.4", - "@babel/plugin-transform-classes": "^7.7.4", - "@babel/plugin-transform-computed-properties": "^7.7.4", - "@babel/plugin-transform-destructuring": "^7.7.4", - "@babel/plugin-transform-dotall-regex": "^7.7.4", - "@babel/plugin-transform-duplicate-keys": "^7.7.4", - "@babel/plugin-transform-exponentiation-operator": "^7.7.4", - "@babel/plugin-transform-for-of": "^7.7.4", - "@babel/plugin-transform-function-name": "^7.7.4", - "@babel/plugin-transform-literals": "^7.7.4", - "@babel/plugin-transform-member-expression-literals": "^7.7.4", - "@babel/plugin-transform-modules-amd": "^7.7.5", - "@babel/plugin-transform-modules-commonjs": "^7.7.5", - "@babel/plugin-transform-modules-systemjs": "^7.7.4", - "@babel/plugin-transform-modules-umd": "^7.7.4", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", - "@babel/plugin-transform-new-target": "^7.7.4", - "@babel/plugin-transform-object-super": "^7.7.4", - "@babel/plugin-transform-parameters": "^7.7.4", - "@babel/plugin-transform-property-literals": "^7.7.4", - "@babel/plugin-transform-regenerator": "^7.7.5", - "@babel/plugin-transform-reserved-words": "^7.7.4", - "@babel/plugin-transform-shorthand-properties": "^7.7.4", - "@babel/plugin-transform-spread": "^7.7.4", - "@babel/plugin-transform-sticky-regex": "^7.7.4", - "@babel/plugin-transform-template-literals": "^7.7.4", - "@babel/plugin-transform-typeof-symbol": "^7.7.4", - "@babel/plugin-transform-unicode-regex": "^7.7.4", - "@babel/types": "^7.7.4", - "browserslist": "^4.6.0", - "core-js-compat": "^3.4.7", + "@babel/compat-data": "^7.9.6", + "@babel/helper-compilation-targets": "^7.9.6", + "@babel/helper-module-imports": "^7.8.3", + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-proposal-async-generator-functions": "^7.8.3", + "@babel/plugin-proposal-dynamic-import": "^7.8.3", + "@babel/plugin-proposal-json-strings": "^7.8.3", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-proposal-numeric-separator": "^7.8.3", + "@babel/plugin-proposal-object-rest-spread": "^7.9.6", + "@babel/plugin-proposal-optional-catch-binding": "^7.8.3", + "@babel/plugin-proposal-optional-chaining": "^7.9.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.8.3", + "@babel/plugin-syntax-async-generators": "^7.8.0", + "@babel/plugin-syntax-dynamic-import": "^7.8.0", + "@babel/plugin-syntax-json-strings": "^7.8.0", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0", + "@babel/plugin-syntax-numeric-separator": "^7.8.0", + "@babel/plugin-syntax-object-rest-spread": "^7.8.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.0", + "@babel/plugin-syntax-optional-chaining": "^7.8.0", + "@babel/plugin-syntax-top-level-await": "^7.8.3", + "@babel/plugin-transform-arrow-functions": "^7.8.3", + "@babel/plugin-transform-async-to-generator": "^7.8.3", + "@babel/plugin-transform-block-scoped-functions": "^7.8.3", + "@babel/plugin-transform-block-scoping": "^7.8.3", + "@babel/plugin-transform-classes": "^7.9.5", + "@babel/plugin-transform-computed-properties": "^7.8.3", + "@babel/plugin-transform-destructuring": "^7.9.5", + "@babel/plugin-transform-dotall-regex": "^7.8.3", + "@babel/plugin-transform-duplicate-keys": "^7.8.3", + "@babel/plugin-transform-exponentiation-operator": "^7.8.3", + "@babel/plugin-transform-for-of": "^7.9.0", + "@babel/plugin-transform-function-name": "^7.8.3", + "@babel/plugin-transform-literals": "^7.8.3", + "@babel/plugin-transform-member-expression-literals": "^7.8.3", + "@babel/plugin-transform-modules-amd": "^7.9.6", + "@babel/plugin-transform-modules-commonjs": "^7.9.6", + "@babel/plugin-transform-modules-systemjs": "^7.9.6", + "@babel/plugin-transform-modules-umd": "^7.9.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3", + "@babel/plugin-transform-new-target": "^7.8.3", + "@babel/plugin-transform-object-super": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.9.5", + "@babel/plugin-transform-property-literals": "^7.8.3", + "@babel/plugin-transform-regenerator": "^7.8.7", + "@babel/plugin-transform-reserved-words": "^7.8.3", + "@babel/plugin-transform-shorthand-properties": "^7.8.3", + "@babel/plugin-transform-spread": "^7.8.3", + "@babel/plugin-transform-sticky-regex": "^7.8.3", + "@babel/plugin-transform-template-literals": "^7.8.3", + "@babel/plugin-transform-typeof-symbol": "^7.8.4", + "@babel/plugin-transform-unicode-regex": "^7.8.3", + "@babel/preset-modules": "^0.1.3", + "@babel/types": "^7.9.6", + "browserslist": "^4.11.1", + "core-js-compat": "^3.6.2", "invariant": "^2.2.2", - "js-levenshtein": "^1.1.3", + "levenary": "^1.1.1", "semver": "^5.5.0" } }, - "@babel/runtime": { - "version": "7.7.6", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.6.tgz", - "integrity": "sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw==", + "@babel/preset-modules": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz", + "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==", "requires": { - "regenerator-runtime": "^0.13.2" + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/runtime": { + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.6.tgz", + "integrity": "sha512-64AF1xY3OAkFHqOb9s4jpgk1Mm5vDZ4L3acHvAml+53nO1XbXLuDodsVpO4OIUsmemlUHMxNdYMNJmsvOwLrvQ==", + "requires": { + "regenerator-runtime": "^0.13.4" } }, "@babel/template": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", - "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", + "version": "7.8.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.6.tgz", + "integrity": "sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg==", "requires": { - "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4" + "@babel/code-frame": "^7.8.3", + "@babel/parser": "^7.8.6", + "@babel/types": "^7.8.6" } }, "@babel/traverse": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", - "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.9.6.tgz", + "integrity": "sha512-b3rAHSjbxy6VEAvlxM8OV/0X4XrG72zoxme6q1MOoe2vd0bEc+TwayhuC1+Dfgqh1QEG+pj7atQqvUprHIccsg==", "requires": { - "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.7.4", - "@babel/helper-function-name": "^7.7.4", - "@babel/helper-split-export-declaration": "^7.7.4", - "@babel/parser": "^7.7.4", - "@babel/types": "^7.7.4", + "@babel/code-frame": "^7.8.3", + "@babel/generator": "^7.9.6", + "@babel/helper-function-name": "^7.9.5", + "@babel/helper-split-export-declaration": "^7.8.3", + "@babel/parser": "^7.9.6", + "@babel/types": "^7.9.6", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" - }, - "dependencies": { - "@babel/parser": { - "version": "7.7.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", - "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==" - } } }, "@babel/types": { - "version": "7.7.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", - "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "version": "7.9.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.9.6.tgz", + "integrity": "sha512-qxXzvBO//jO9ZnoasKF1uJzHd2+M6Q2ZPIVfnFps8JJvXy0ZBbwbNOmE6SGIY5XOY6d1Bo5lb9d9RJ8nv3WSeA==", "requires": { - "esutils": "^2.0.2", + "@babel/helper-validator-identifier": "^7.9.5", "lodash": "^4.17.13", "to-fast-properties": "^2.0.0" } @@ -749,9 +836,9 @@ "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==" }, "@hapi/hoek": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.0.tgz", - "integrity": "sha512-7XYT10CZfPsH7j9F1Jmg1+d0ezOux2oM2GfArAzLwWe4mE2Dr3hVjsAL6+TFY49RRJlCdJDMw3nJsLFroTc8Kw==" + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==" }, "@hapi/joi": { "version": "15.1.1", @@ -773,281 +860,325 @@ } }, "@jimp/bmp": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.9.3.tgz", - "integrity": "sha512-wXZYccgGQAsIK8DZX0wZE3gbSd2mL2+eheSJMts6I5hQjxhVRZd1Gwu425nUQGzfKCOgKYTW0nLv7/8OoOTTkw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.9.8.tgz", + "integrity": "sha512-CZYQPEC3iUBMuaGWrtIG+GKNl93q/PkdudrCKJR/B96dfNngsmoosEm3LuFgJHEcJIfvnJkNqKw74l+zEiqCbg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "bmp-js": "^0.1.0", "core-js": "^3.4.1" } }, "@jimp/core": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.9.3.tgz", - "integrity": "sha512-kB9lvst1QhgYOC963SAuPgv+DdVfxTProphrSffAAoo5eLeQab/Ca3ZUeX1E/SnLSr+NGVnNCd8c9gyuKDiENg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.9.8.tgz", + "integrity": "sha512-N4GCjcXb0QwR5GBABDK2xQ3cKyaF7LlCYeJEG9mV7G/ynBoRqJe4JA6YKU9Ww9imGkci/4A594nQo8tUIqdcBw==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "any-base": "^1.1.0", "buffer": "^5.2.0", "core-js": "^3.4.1", "exif-parser": "^0.1.12", "file-type": "^9.0.0", "load-bmfont": "^1.3.1", - "mkdirp": "0.5.1", + "mkdirp": "^0.5.1", "phin": "^2.9.1", "pixelmatch": "^4.0.2", "tinycolor2": "^1.4.1" } }, "@jimp/custom": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.9.3.tgz", - "integrity": "sha512-2E7yabQMeqjcK8+ZFu3Ja5cWyrB0zv/pmzNSDg/BBPJ59HE0fj/qcERAz6VklcjHUYRUfmE5uODsb+4DE0o/YQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.9.8.tgz", + "integrity": "sha512-1UpJjI7fhX02BWLJ/KEqPwkHH60eNkCNeD6hEd+IZdTwLXfZCfFiM5BVlpgiZYZJSsVoRiAL4ne2Q5mCiKPKyw==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/core": "^0.9.3", + "@jimp/core": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/gif": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.9.3.tgz", - "integrity": "sha512-DshKgMQ8lXorI/xTRyeRkZqZ3JqgnL2aGYAhx0SkAunyHgXji27chmrOGj/6KVDBucrDf/6mSexnSoUDnlWrfA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.9.8.tgz", + "integrity": "sha512-LEbfpcO1sBJIQCJHchZjNlyNxzPjZQQ4X32klpQHZJG58n9FvL7Uuh1rpkrJRbqv3cU3P0ENNtTrsBDxsYwcfA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1", "omggif": "^1.0.9" } }, "@jimp/jpeg": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.9.3.tgz", - "integrity": "sha512-AJzcTJXfN9BHtpzAbICwR3+GoH0pSr6OYXbAS6yuKwz+xVn9UHrEjQb74CIzIRqrT/VWcIKg29cMQxgokzWY7w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.9.8.tgz", + "integrity": "sha512-5u29SUzbZ32ZMmOaz3gO0hXatwSCnsvEAXRCKZoPPgbsPoyFAiZKVxjfLzjkeQF6awkvJ8hZni5chM15SNMg+g==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1", "jpeg-js": "^0.3.4" } }, "@jimp/plugin-blit": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.9.3.tgz", - "integrity": "sha512-+UxCsJ3XkRSdpigpTBJ9WkdwUc3OtBlhVZdU6OL6M9ldume5Gj3rTyWvMCqytOK1tZ/+7HmxoWe4IWX31hz9qA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.9.8.tgz", + "integrity": "sha512-6xTDomxJybhBcby1IUVaPydZFhxf+V0DRgfDlVK81kR9kSCoshJpzWqDuWrMqjNEPspPE7jRQwHMs0FdU7mVwQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-blur": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.9.3.tgz", - "integrity": "sha512-RADcYjZ5vbk5ZrUiK7qv0G4xOpHtu19HWVVX9JTDbm4VByWTxPboVKlgiYLA6l+IxIXNtEqDclsADIM0s9FQhA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.9.8.tgz", + "integrity": "sha512-dqbxuNFBRbmt35iIRacdgma7nlXklmPThsKcGWNTDmqb/hniK5IC+0xSPzBV4qMI2fLGP39LWHqqDZ0xDz14dA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + } + }, + "@jimp/plugin-circle": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.9.8.tgz", + "integrity": "sha512-+UStXUPCzPqzTixLC8eVqcFcEa6TS+BEM/6/hyM11TDb9sbiMGeUtgpwZP/euR5H5gfpAQDA1Ppzqhh5fuMDlw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-color": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.9.3.tgz", - "integrity": "sha512-gHDA5GVx4/R4fitEACKmWH7hNy0aU48MZWYRxmATvuqY39KidJ0fjwp+brQ3Ivgb35AgFVc2jQYc3U/JXv4RxQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.9.8.tgz", + "integrity": "sha512-SDHxOQsJHpt75hk6+sSlCPc2B3UJlXosFW+iLZ11xX1Qr0IdDtbfYlIoPmjKQFIDUNzqLSue/z7sKQ1OMZr/QA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1", "tinycolor2": "^1.4.1" } }, "@jimp/plugin-contain": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.9.3.tgz", - "integrity": "sha512-vdYAtp65LNDT/hMctow5o0a/SbD41/y7Z9AO7MGsfUIK92Woq90SNTWx7JplDl4HSZGrqaBONnfiEhRiYlDrdg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.9.8.tgz", + "integrity": "sha512-oK52CPt7efozuLYCML7qOmpFeDt3zpU8qq8UZlnjsDs15reU6L8EiUbwYpJvzoEnEOh1ZqamB8F/gymViEO5og==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-cover": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.9.3.tgz", - "integrity": "sha512-yOwsvakgyS2/C4iZF1a1wg63QKfYvqb2d6k+rgY/0vaAe44JtEx+Gbg+7iOt4EaMm5BDlxRwmcA2Q8Pef8TvAQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.9.8.tgz", + "integrity": "sha512-nnamtHzMrNd5j5HRSPd1VzpZ8v9YYtUJPtvCdHOOiIjqG72jxJ2kTBlsS3oG5XS64h/2MJwpl/fmmMs1Tj1CmQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-crop": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.9.3.tgz", - "integrity": "sha512-kqMXSyY8hrfo0idr6qY2USOWPrNqpDWs+D6Vwa+kV6SGJhj3rMTIcptQDaamIETSxbjkE8rwUu3K4Q5UD69D7w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.9.8.tgz", + "integrity": "sha512-Nv/6AIp4aJmbSIH2uiIqm+kSoShKM8eaX2fyrUTj811kio0hwD3f/vIxrWebvAqwDZjAFIAmMufFoFCVg6caoQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-displace": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.9.3.tgz", - "integrity": "sha512-0AdwxYRWDmJ2wIRIj2RR3sRmNjMhcy5Kwt9Jbi/RRnzxkRScZAiyzkNZhBul23EM7ClfjrUrZufuUvRMHxZRDw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.9.8.tgz", + "integrity": "sha512-0OgPjkOVa2xdbqI8P6gBKX/UK36RbaYVrFyXL8Jy9oNF69+LYWyTskuCu9YbGxzlCVjY/JFqQOvrKDbxgMYAKA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-dither": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.9.3.tgz", - "integrity": "sha512-8OE+Xak9xepiCwSV+oAsb/gupTnttG3aDKxtpSZjwHebnr+k1VG8NgICbMSFATTVJqqZ18oj6LC+5726qHUJ9w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.9.8.tgz", + "integrity": "sha512-jGM/4ByniZJnmV2fv8hKwyyydXZe/YzvgBcnB8XxzCq8kVR3Imcn+qnd2PEPZzIPKOTH4Cig/zo9Vk9Bs+m5FQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + } + }, + "@jimp/plugin-fisheye": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.9.8.tgz", + "integrity": "sha512-VnsalrD05f4pxG1msjnkwIFi5QveOqRm4y7VkoZKNX+iqs4TvRnH5+HpBnfdMzX/RXBi+Lf/kpTtuZgbOu/QWw==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-flip": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.9.3.tgz", - "integrity": "sha512-w+lzE1ZF/UOjB8qJdeIm+dLQtOK1obZwGYdCIbgxZxw4SfkkjAftJdY8o8RNOXhHDZqGu+cYQZbMKP1zcoNkyQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.9.8.tgz", + "integrity": "sha512-XbiZ4OfHD6woc0f6Sk7XxB6a7IyMjTRQ4pNU7APjaNxsl3L6qZC8qfCQphWVe3DHx7f3y7jEiPMvNnqRDP1xgA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-gaussian": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.9.3.tgz", - "integrity": "sha512-RPrWwzlZsbWC2opSgeyWt30JU9Uwg1+GwBnoNpEMLKeqm0Dv6snASASa4zVtviGWAIq//p3Jrap7g57hKqL0Cg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.9.8.tgz", + "integrity": "sha512-ZBl5RA6+4XAD+mtqLfiG7u+qd8W5yqq3RBNca8eFqUSVo1v+eB2tzeLel0CWfVC/z6cw93Awm/nVnm6/CL2Oew==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-invert": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.9.3.tgz", - "integrity": "sha512-0lRsh7IPkzyYqExrZDT50h38xdlB/+KrdiDcuxWwWyIlKauLMR0kInjwf8sPeb3elPLeETmze7uwPAxrIAtsGQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.9.8.tgz", + "integrity": "sha512-ESploqCoF6qUv5IWhVLaO5fEcrYZEsAWPFflh6ROiD2mmFKQxfeK+vHnk3IDLHtUwWTkAZQNbk89BVq7xvaNpQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-mask": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.9.3.tgz", - "integrity": "sha512-nZ0J62Hly9JtMZctlSDVgnTd8Fg2XGikzAYilSTCjzIRtbXL5Be/qSAZrMfLD3CZ8exTxdlEGRkEJI3RZKXYCw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.9.8.tgz", + "integrity": "sha512-zSvEisTV4iGsBReitEdnQuGJq9/1xB5mPATadYZmIlp8r5HpD72HQb0WdEtb51/pu9Odt8KAxUf0ASg/PRVUiQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-normalize": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.9.3.tgz", - "integrity": "sha512-0IvgTt4R15QJnoCHvvqlK56zOtCsQV7Mkx757kdNah8uyPGjadTcFBuqCaOMK943X36IIv+o7Ix7yvNUJZt4aw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.9.8.tgz", + "integrity": "sha512-dPFBfwTa67K1tRw1leCidQT25R3ozrTUUOpO4jcGFHqXvBTWaR8sML1qxdfOBWs164mE5YpfdTvu6MM/junvCg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-print": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.9.3.tgz", - "integrity": "sha512-pV6oX5Bhe9O/dbgrotz46Bv6u1M+/n9G0kRUunDjwzXrvON5raBFEJHQDPcTXiqPT25Gc9Ba4/Akfo/Zl6+wgQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.9.8.tgz", + "integrity": "sha512-nLLPv1/faehRsOjecXXUb6kzhRcZzImO55XuFZ0c90ZyoiHm4UFREwO5sKxHGvpLXS6RnkhvSav4+IWD2qGbEQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1", "load-bmfont": "^1.4.0" } }, "@jimp/plugin-resize": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.9.3.tgz", - "integrity": "sha512-YzqVE8QoDIZpVuI52v+WejwEjEEiJfNFviQfprfm5af7uSSseZgDw1sJ0koqAu+liMSY+Ewp79v2SDrKoJKqtg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.9.8.tgz", + "integrity": "sha512-L80NZ+HKsiKFyeDc6AfneC4+5XACrdL2vnyAVfAAsb3pmamgT/jDInWvvGhyI0Y76vx2w6XikplzEznW/QQvWg==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-rotate": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.9.3.tgz", - "integrity": "sha512-kADY2pI3/yMyHbuyvKB4nqPoKf8DPQBU1b4zz2K7SxcwKh1krFf4Fa9mmhhDLoFwuNSy0SPb1JCMUO4BtFCFLA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.9.8.tgz", + "integrity": "sha512-bpqzQheISYnBXKyU1lIj46uR7mRs0UhgEREWK70HnvFJSlRshdcoNMIrKamyrJeFdJrkYPSfR/a6D0d5zsWf1Q==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugin-scale": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.9.3.tgz", - "integrity": "sha512-vZaiL5Qc+WrgGEfUe4Y0vG+qbT6pe2TW68/mu124E1tKVcZjHKZUeFN0Wr/hP2myN6nqTYj0/sord2OS/04JpA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.9.8.tgz", + "integrity": "sha512-QU3ZS4Lre8nN66U9dKCOC4FNfaOh/QJFYUmQPKpPS924oYbtnm4OlmsdfpK2hVMSVVyVOis8M+xpA1rDBnIp7w==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + } + }, + "@jimp/plugin-shadow": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.9.8.tgz", + "integrity": "sha512-t/pE+QS3r1ZUxGIQNmwWDI3c5+/hLU+gxXD+C3EEC47/qk3gTBHpj/xDdGQBoObdT/HRjR048vC2BgBfzjj2hg==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", + "core-js": "^3.4.1" + } + }, + "@jimp/plugin-threshold": { + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.9.8.tgz", + "integrity": "sha512-WWmC3lnIwOTPvkKu55w4DUY8Ehlzf3nU98bY0QtIzkqxkAOZU5m+lvgC/JxO5FyGiA57j9FLMIf0LsWkjARj7g==", + "requires": { + "@babel/runtime": "^7.7.2", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1" } }, "@jimp/plugins": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.9.3.tgz", - "integrity": "sha512-KYCSgFGoZBNC0224X5yUnMHCZnCdUVrsu2Yo67o3XZfUgDjO81J+vdzZ0twpPQ6qLLVAP+nQ8hkRV/QzEUstMw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.9.8.tgz", + "integrity": "sha512-tD+cxS9SuEZaQ1hhAkNKw9TkUAqfoBAhdWPBrEZDr/GvGPrvJR4pYmmpSYhc5IZmMbXfQayHTTGqjj8D18bToA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/plugin-blit": "^0.9.3", - "@jimp/plugin-blur": "^0.9.3", - "@jimp/plugin-color": "^0.9.3", - "@jimp/plugin-contain": "^0.9.3", - "@jimp/plugin-cover": "^0.9.3", - "@jimp/plugin-crop": "^0.9.3", - "@jimp/plugin-displace": "^0.9.3", - "@jimp/plugin-dither": "^0.9.3", - "@jimp/plugin-flip": "^0.9.3", - "@jimp/plugin-gaussian": "^0.9.3", - "@jimp/plugin-invert": "^0.9.3", - "@jimp/plugin-mask": "^0.9.3", - "@jimp/plugin-normalize": "^0.9.3", - "@jimp/plugin-print": "^0.9.3", - "@jimp/plugin-resize": "^0.9.3", - "@jimp/plugin-rotate": "^0.9.3", - "@jimp/plugin-scale": "^0.9.3", + "@jimp/plugin-blit": "^0.9.8", + "@jimp/plugin-blur": "^0.9.8", + "@jimp/plugin-circle": "^0.9.8", + "@jimp/plugin-color": "^0.9.8", + "@jimp/plugin-contain": "^0.9.8", + "@jimp/plugin-cover": "^0.9.8", + "@jimp/plugin-crop": "^0.9.8", + "@jimp/plugin-displace": "^0.9.8", + "@jimp/plugin-dither": "^0.9.8", + "@jimp/plugin-fisheye": "^0.9.8", + "@jimp/plugin-flip": "^0.9.8", + "@jimp/plugin-gaussian": "^0.9.8", + "@jimp/plugin-invert": "^0.9.8", + "@jimp/plugin-mask": "^0.9.8", + "@jimp/plugin-normalize": "^0.9.8", + "@jimp/plugin-print": "^0.9.8", + "@jimp/plugin-resize": "^0.9.8", + "@jimp/plugin-rotate": "^0.9.8", + "@jimp/plugin-scale": "^0.9.8", + "@jimp/plugin-shadow": "^0.9.8", + "@jimp/plugin-threshold": "^0.9.8", "core-js": "^3.4.1", "timm": "^1.6.1" } }, "@jimp/png": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.9.3.tgz", - "integrity": "sha512-LJXUemDTSbTGAGEp9hNQH0uTRSB8gYeE6FsfT3M00oZincu6/WzDzl0P8E95rMjNxZqAihdTyOP3+kcrbbqX+w==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.9.8.tgz", + "integrity": "sha512-9CqR8d40zQCDhbnXHqcwkAMnvlV0vk9xSyE6LHjkYHS7x18Unsz5txQdsaEkEcXxCrOQSoWyITfLezlrWXRJAA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/utils": "^0.9.3", + "@jimp/utils": "^0.9.8", "core-js": "^3.4.1", "pngjs": "^3.3.3" } }, "@jimp/tiff": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.9.3.tgz", - "integrity": "sha512-w9H6dT+GDHN//Srsv27JhRn7R2byzUahOGfFw7KpIn95jg0ogcxjKTo/RAGQC56sr4U092e4Npl7E85Lt934WQ==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.9.8.tgz", + "integrity": "sha512-eMxcpJivJqMByn2dZxUHLeh6qvVs5J/52kBF3TFa3C922OJ97D9l1C1h0WKUCBqFMWzMYapQQ4vwnLgpJ5tkow==", "requires": { "@babel/runtime": "^7.7.2", "core-js": "^3.4.1", @@ -1055,24 +1186,24 @@ } }, "@jimp/types": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.9.3.tgz", - "integrity": "sha512-hUJKoT2IhnbO/trxNWzN19n8g+p7aKbM1R+71n4wMZnD41PzrVtz+sBBCdB+JCjBJs/i7fJt4d9z0i3Xe8m7Zw==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.9.8.tgz", + "integrity": "sha512-H5y/uqt0lqJ/ZN8pWqFG+pv8jPAppMKkTMByuC8YBIjWSsornwv44hjiWl93sbYhduLZY8ubz/CbX9jH2X6EwA==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/bmp": "^0.9.3", - "@jimp/gif": "^0.9.3", - "@jimp/jpeg": "^0.9.3", - "@jimp/png": "^0.9.3", - "@jimp/tiff": "^0.9.3", + "@jimp/bmp": "^0.9.8", + "@jimp/gif": "^0.9.8", + "@jimp/jpeg": "^0.9.8", + "@jimp/png": "^0.9.8", + "@jimp/tiff": "^0.9.8", "core-js": "^3.4.1", "timm": "^1.6.1" } }, "@jimp/utils": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.9.3.tgz", - "integrity": "sha512-9D2Of6BcjYONtl77YfmU2y5aRMLe0/O2e2aQvfCxdNwD33jRdwNdN4i3m73dpiClNquApIjL4nYGhTixA4UstA==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.9.8.tgz", + "integrity": "sha512-UK0Fu0eevQlpRXq5ff4o/71HJlpX9wJMddJjMYg9vUqCCl8ZnumRAljfShHFhGyO+Vc9IzN6dd8Y5JZZTp1KOw==", "requires": { "@babel/runtime": "^7.7.2", "core-js": "^3.4.1" @@ -1094,19 +1225,12 @@ "requires": { "@nodelib/fs.stat": "2.0.3", "run-parallel": "^1.1.9" - }, - "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" - } } }, "@nodelib/fs.stat": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", - "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", + "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" }, "@nodelib/fs.walk": { "version": "1.2.4", @@ -1147,24 +1271,15 @@ "integrity": "sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA==" }, "@types/body-parser": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz", - "integrity": "sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==", + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-W98JrE0j2K78swW4ukqMleo8R7h/pFETjM2DQ90MF6XK2i4LO4W3gQ71Lt4w3bfm2EvVSyWHplECvB5sK22yFQ==", "dev": true, "requires": { "@types/connect": "*", "@types/node": "*" } }, - "@types/chokidar": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/@types/chokidar/-/chokidar-2.1.3.tgz", - "integrity": "sha512-6qK3xoLLAhQVTucQGHTySwOVA1crHRXnJeLwqK6KIFkkKa2aoMFXh+WEi8PotxDtvN6MQJLyYN9ag9P6NLV81w==", - "dev": true, - "requires": { - "chokidar": "*" - } - }, "@types/color-name": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz", @@ -1172,9 +1287,9 @@ "dev": true }, "@types/connect": { - "version": "3.4.32", - "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz", - "integrity": "sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==", + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.33.tgz", + "integrity": "sha512-2+FrkXY4zllzTNfJth7jOqEHC+enpLeGslEhpnTAkg21GkRrWV4SsAtqchtT4YS9/nODBU2/ZfsBY2X4J/dX7A==", "dev": true, "requires": { "@types/node": "*" @@ -1186,23 +1301,25 @@ "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==" }, "@types/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.1.tgz", - "integrity": "sha512-VfH/XCP0QbQk5B5puLqTLEeFgR8lfCJHZJKkInZ9mkYd+u8byX0kztXEQxEk4wZXJs8HI+7km2ALXjn4YKcX9w==", + "version": "4.17.6", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.6.tgz", + "integrity": "sha512-n/mr9tZI83kd4azlPG5y997C/M4DNABK9yErhFM6hKdym4kkmd9j0vtsJyjFIwfRBxtrxZtAfGZCNRIBMFLK5w==", "dev": true, "requires": { "@types/body-parser": "*", "@types/express-serve-static-core": "*", + "@types/qs": "*", "@types/serve-static": "*" } }, "@types/express-serve-static-core": { - "version": "4.16.9", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.16.9.tgz", - "integrity": "sha512-GqpaVWR0DM8FnRUJYKlWgyARoBUAVfRIeVDZQKOttLFp5SmhhF9YFIYeTPwMd/AXfxlP7xVO2dj1fGu0Q+krKQ==", + "version": "4.17.7", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.7.tgz", + "integrity": "sha512-EMgTj/DF9qpgLXyc+Btimg+XoH7A2liE8uKul8qSmMTHCeNYzydDKFdsJskDvw42UsesCnhO63dO0Grbj8J4Dw==", "dev": true, "requires": { "@types/node": "*", + "@types/qs": "*", "@types/range-parser": "*" } }, @@ -1212,6 +1329,13 @@ "integrity": "sha512-s76OlRaBfqtGu2ZBobnZv2NETfqsQUVfKKlOkKNGo4ArBsqiblodKsnQ3j29hCCgmpQacEfLxealV96za+tzVQ==", "requires": { "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "13.13.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.5.tgz", + "integrity": "sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g==" + } } }, "@types/glob": { @@ -1222,12 +1346,19 @@ "@types/events": "*", "@types/minimatch": "*", "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "13.13.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.5.tgz", + "integrity": "sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g==" + } } }, "@types/html-minifier-terser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.0.0.tgz", - "integrity": "sha512-q95SP4FdkmF0CwO0F2q0H6ZgudsApaY/yCtAQNRn1gduef5fGpyEphzy0YCq/N0UFvDSnLg5V8jFK/YGXlDiCw==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz", + "integrity": "sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA==" }, "@types/imagemin": { "version": "7.0.0", @@ -1235,6 +1366,13 @@ "integrity": "sha512-BiNd5FazD5ZmJUYD9txsbrttL0P0welrb9yAPn6ykKK3kWufwFsxYqw5KdggfZQDjiNYwsBrX+Fwei0Xsw4oAw==", "requires": { "@types/node": "*" + }, + "dependencies": { + "@types/node": { + "version": "13.13.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.5.tgz", + "integrity": "sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g==" + } } }, "@types/imagemin-gifsicle": { @@ -1291,15 +1429,22 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" }, "@types/node": { - "version": "12.12.16", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.16.tgz", - "integrity": "sha512-vRuMyoOr5yfNf8QWxXegOjeyjpWJxFePzHzmBOIzDIzo+rSqF94RW0PkS6y4T2+VjAWLXHWrfbIJY3E3aS7lUw==" + "version": "12.12.38", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.38.tgz", + "integrity": "sha512-75eLjX0pFuTcUXnnWmALMzzkYorjND0ezNEycaKesbUBg9eGZp4GHPuDmkRc4mQQvIpe29zrzATNRA6hkYqwmA==", + "dev": true }, "@types/q": { "version": "1.5.2", "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.2.tgz", "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==" }, + "@types/qs": { + "version": "6.9.2", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.2.tgz", + "integrity": "sha512-a9bDi4Z3zCZf4Lv1X/vwnvbbDYSNz59h3i3KdyuYYN+YrLjSeJD0dnphdULDfySvUv6Exy/O0K6wX/kQpnPQ+A==", + "dev": true + }, "@types/range-parser": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz", @@ -1322,19 +1467,19 @@ "integrity": "sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA==" }, "@types/svgo": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.0.tgz", - "integrity": "sha512-3MkYdqVF0yQFEUMbusfaVvQRQoC6yhOSdUU87/ZSvlJrI+E49s3XanUtJZtLThrvnqACnUryt2lC2ezpV9O/2Q==" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-2CNgVZbMzH6KYHTaf0DOtlm8ejjK8JBxL8C8Xv0fDogDsRQaM55m2bv66+isxmWm/w6z6kmOD3GxNVZ85Z0Uyg==" }, "@types/tapable": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.4.tgz", - "integrity": "sha512-78AdXtlhpCHT0K3EytMpn4JNxaf5tbqbLcbIRoQIHzpTIyjpxLQKRoxU55ujBXAtg3Nl2h/XWvfDa9dsMOd0pQ==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.5.tgz", + "integrity": "sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==" }, "@types/uglify-js": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.0.4.tgz", - "integrity": "sha512-SudIN9TRJ+v8g5pTG8RRCqfqTMNqgWCKKd3vtynhGzkIIjxaicNAMuY5TRadJ6tzDu3Dotf3ngaMILtmOdmWEQ==", + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-3.9.0.tgz", + "integrity": "sha512-3ZcoyPYHVOCcLpnfZwD47KFLr8W/mpUcgjpf1M4Q78TMJIw7KMAHSjiCLJp1z3ZrBR9pTLbe191O0TldFK5zcw==", "requires": { "source-map": "^0.6.1" }, @@ -1347,9 +1492,9 @@ } }, "@types/webpack": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.0.tgz", - "integrity": "sha512-tWkdf9nO0zFgAY/EumUKwrDUhraHKDqCPhwfFR/R8l0qnPdgb9le0Gzhvb7uzVpouuDGBgiE//ZdY+5jcZy2TA==", + "version": "4.41.12", + "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.12.tgz", + "integrity": "sha512-BpCtM4NnBen6W+KEhrL9jKuZCXVtiH6+0b6cxdvNt2EwU949Al334PjQSl2BeAyvAX9mgoNNG21wvjP3xZJJ5w==", "requires": { "@types/anymatch": "*", "@types/node": "*", @@ -1359,6 +1504,11 @@ "source-map": "^0.6.0" }, "dependencies": { + "@types/node": { + "version": "13.13.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.5.tgz", + "integrity": "sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1367,27 +1517,31 @@ } }, "@types/webpack-dev-middleware": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@types/webpack-dev-middleware/-/webpack-dev-middleware-2.0.3.tgz", - "integrity": "sha512-DzNJJ6ah/6t1n8sfAgQyEbZ/OMmFcF9j9P3aesnm7G6/iBFR/qiGin8K89J0RmaWIBzhTMdDg3I5PmKmSv7N9w==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/webpack-dev-middleware/-/webpack-dev-middleware-2.0.4.tgz", + "integrity": "sha512-hk+OI2FmngHuTu5jNqipjbKxqeDOv6Xz2Aex86rHvYun+wZmHmiQA4l9NjlIubYtMxQGLqe01XF3i+Fb4tluzA==", "dev": true, "requires": { "@types/connect": "*", "@types/memory-fs": "*", - "@types/webpack": "*", - "loglevel": "^1.6.2" + "@types/webpack": "*" } }, "@types/webpack-sources": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.5.tgz", - "integrity": "sha512-zfvjpp7jiafSmrzJ2/i3LqOyTYTuJ7u1KOXlKgDlvsj9Rr0x7ZiYu5lZbXwobL7lmsRNtPXlBfmaUD8eU2Hu8w==", + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/@types/webpack-sources/-/webpack-sources-0.1.7.tgz", + "integrity": "sha512-XyaHrJILjK1VHVC4aVlKsdNN5KBTwufMb43cQs+flGxtPAf/1Qwl8+Q0tp5BwEGaI8D6XT1L+9bSWXckgkjTLw==", "requires": { "@types/node": "*", "@types/source-list-map": "*", "source-map": "^0.6.1" }, "dependencies": { + "@types/node": { + "version": "13.13.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-13.13.5.tgz", + "integrity": "sha512-3ySmiBYJPqgjiHA7oEaIo2Rzz0HrOZ7yrNO5HWyaE5q0lQ3BppDZ3N53Miz8bw2I7gh1/zir2MGVZBvpb1zq9g==" + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -1577,9 +1731,9 @@ } }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==" + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==" }, "acorn-dynamic-import": { "version": "2.0.2", @@ -1605,11 +1759,11 @@ } }, "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", + "version": "6.12.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.2.tgz", + "integrity": "sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==", "requires": { - "fast-deep-equal": "^2.0.1", + "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" @@ -1667,6 +1821,111 @@ "normalize-path": "^2.1.1" }, "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "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" + } + }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", @@ -1674,6 +1933,15 @@ "requires": { "remove-trailing-separator": "^1.0.1" } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, @@ -1683,9 +1951,9 @@ "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "arch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.1.tgz", - "integrity": "sha512-BLM56aPo9vLLFVa8+/+pJLnrZ7QGGTVHWsCwieAWT9o9K8UeGaQbzZbGoabWLOo2ksBCztoXdqBZBplqLDDCSg==" + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/arch/-/arch-2.1.2.tgz", + "integrity": "sha512-NTBIIbAfkJeIletyABbVtdPgeKfDafR+1mZV/AyyfC1UkVkp9iUjV+wwmqtUgphHYajbI86jejBJp5e+jkGTiQ==" }, "archive-type": { "version": "4.0.0", @@ -1783,6 +2051,13 @@ "bn.js": "^4.0.0", "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + } } }, "assert": { @@ -1868,9 +2143,9 @@ "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=" }, "aws4": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.0.tgz", - "integrity": "sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.9.1.tgz", + "integrity": "sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==" }, "babel-extract-comments": { "version": "1.0.0", @@ -1881,20 +2156,21 @@ } }, "babel-loader": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.0.6.tgz", - "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-8.1.0.tgz", + "integrity": "sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw==", "requires": { - "find-cache-dir": "^2.0.0", - "loader-utils": "^1.0.2", - "mkdirp": "^0.5.1", - "pify": "^4.0.1" + "find-cache-dir": "^2.1.0", + "loader-utils": "^1.4.0", + "mkdirp": "^0.5.3", + "pify": "^4.0.1", + "schema-utils": "^2.6.5" } }, "babel-plugin-dynamic-import-node": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", - "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "requires": { "object.assign": "^4.1.0" } @@ -2306,6 +2582,15 @@ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==" }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "binwrap": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/binwrap/-/binwrap-0.2.2.tgz", @@ -2319,6 +2604,34 @@ "unzip-stream": "^0.3.0" }, "dependencies": { + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, "tar": { "version": "4.4.13", "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", @@ -2337,17 +2650,19 @@ } }, "bl": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz", - "integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.0.2.tgz", + "integrity": "sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ==", "requires": { - "readable-stream": "^3.0.1" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" }, "dependencies": { "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -2375,9 +2690,9 @@ "integrity": "sha1-4Fpj95amwf8l9Hcex62twUjAcjM=" }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-IUTD/REb78Z2eodka1QZyyEk66pciRcP6Sroka0aI3tG/iwIdYLrBD62RsubR7vqdt3WyX8p4jxeatzmRSphtA==" }, "body-parser": { "version": "1.19.0", @@ -2431,30 +2746,11 @@ } }, "braces": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", - "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "requires": { - "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" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } + "fill-range": "^7.0.1" } }, "brorand": { @@ -2503,20 +2799,40 @@ "requires": { "bn.js": "^4.1.0", "randombytes": "^2.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + } } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.1.0.tgz", + "integrity": "sha512-VYxo7cDCeYUoBZ0ZCy4UyEUCP3smyBd4DRQM5nrFS1jJjPJjX7rP3oLRpPoWfkhQfyJ0I9ZbHbKafrFD/SGlrg==", "requires": { - "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" + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.2", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } } }, "browserify-zlib": { @@ -2528,19 +2844,20 @@ } }, "browserslist": { - "version": "4.8.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", - "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.12.0.tgz", + "integrity": "sha512-UH2GkcEDSI0k/lRkuDSzFl9ZZ87skSy9w2XAn1MsZnL+4c4rqbBd3e82UWHbYDpztABrPBhZsTEeuxVfHppqDg==", "requires": { - "caniuse-lite": "^1.0.30001015", - "electron-to-chromium": "^1.3.322", - "node-releases": "^1.1.42" + "caniuse-lite": "^1.0.30001043", + "electron-to-chromium": "^1.3.413", + "node-releases": "^1.1.53", + "pkg-up": "^2.0.0" } }, "buffer": { - "version": "5.4.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.4.3.tgz", - "integrity": "sha512-zvj65TkFeIt3i6aj5bIvJDzjjQQGs4o/sNoezg1F1kYap9Nu2jcUdpwzRSJTHMMzG0H7bZkn4rNQpImhuxWX2A==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz", + "integrity": "sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw==", "requires": { "base64-js": "^1.0.2", "ieee754": "^1.1.4" @@ -2607,9 +2924,9 @@ "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" }, "cacache": { - "version": "12.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.3.tgz", - "integrity": "sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw==", + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", "requires": { "bluebird": "^3.5.5", "chownr": "^1.1.1", @@ -2658,12 +2975,12 @@ }, "dependencies": { "find-cache-dir": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz", - "integrity": "sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "requires": { "commondir": "^1.0.1", - "make-dir": "^3.0.0", + "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" } }, @@ -2685,13 +3002,21 @@ } }, "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "requires": { "semver": "^6.0.0" } }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -2700,6 +3025,11 @@ "p-limit": "^2.2.0" } }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -2713,15 +3043,6 @@ "find-up": "^4.0.0" } }, - "schema-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", - "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", - "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -2761,12 +3082,12 @@ "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=" }, "camel-case": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", - "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.1.tgz", + "integrity": "sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q==", "requires": { - "no-case": "^2.2.0", - "upper-case": "^1.1.1" + "pascal-case": "^3.1.1", + "tslib": "^1.10.0" } }, "camelcase": { @@ -2791,9 +3112,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001015", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001015.tgz", - "integrity": "sha512-/xL2AbW/XWHNu1gnIrO8UitBGoFthcsDgU9VLK1/dpsoxbaD5LscHozKze05R6WLsBvLhqv78dAPozMFQBYLbQ==" + "version": "1.0.30001055", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001055.tgz", + "integrity": "sha512-MbwsBmKrBSKIWldfdIagO5OJWZclpJtS4h0Jrk/4HFrXJxTdVdH23Fd+xCiHriVGvYcWyW8mR/CPsYajlH8Iuw==" }, "caseless": { "version": "0.12.0", @@ -2847,12 +3168,67 @@ "path-is-absolute": "^1.0.0", "readdirp": "^2.2.1", "upath": "^1.1.1" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "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" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "chownr": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz", - "integrity": "sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==" + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" }, "chrome-trace-event": { "version": "1.0.2", @@ -2893,9 +3269,9 @@ } }, "clean-css": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz", - "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz", + "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==", "requires": { "source-map": "~0.6.0" }, @@ -2968,15 +3344,27 @@ } }, "closure-webpack-plugin": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/closure-webpack-plugin/-/closure-webpack-plugin-2.0.1.tgz", - "integrity": "sha512-ZQz24BstWdqOwyo3ttOOqS2V/CxZ9AXEO5P3W3oIO3e0ZtnL2KefFEJ+NtVwNcuvtp64ZiQf0zWs0Jur/QLtfA==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/closure-webpack-plugin/-/closure-webpack-plugin-2.3.0.tgz", + "integrity": "sha512-QW1V0oZPtrjSjGx6TkegvUlVSFzSzEWN8pXeckEti4WdkO+P+WWEGSkB4slTIf1kO9KFFWoi8yl6fZd03GPjqA==", "requires": { "acorn": "^5.0.0", "acorn-dynamic-import": "^2.0.0", "schema-utils": "1.x", "unquoted-property-validator": "^1.0.2", "webpack-sources": "1.x" + }, + "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + } } }, "coa": { @@ -3048,9 +3436,9 @@ } }, "commander": { - "version": "2.17.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", - "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" }, "common-tags": { "version": "1.8.0", @@ -3162,9 +3550,9 @@ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=" }, "copy-webpack-plugin": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.0.tgz", - "integrity": "sha512-0sNrj/Sx7/cWA0k7CVQa0sdA/dzCybqSb0+GbhKuQdOlAvnAwgC2osmbAFOAfha7ZXnreoQmCq5oDjG3gP4VHw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-5.1.1.tgz", + "integrity": "sha512-P15M5ZC8dyCjQHWwd4Ia/dm0SgVvZJMYeykVIVYXbGyqO4dWB5oyPHp9i7wjwo5LhtlhKbiBCdS2NvM07Wlybg==", "requires": { "cacache": "^12.0.3", "find-cache-dir": "^2.1.0", @@ -3193,31 +3581,54 @@ "slash": "^1.0.0" } }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } } } }, "core-js": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.1.tgz", - "integrity": "sha512-186WjSik2iTGfDjfdCZAxv2ormxtKgemjC3SI6PL31qOA0j5LhTDVjHChccoc7brwLvpvLPiMyRlcO88C4l1QQ==" + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" }, "core-js-compat": { - "version": "3.4.8", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.4.8.tgz", - "integrity": "sha512-l3WTmnXHV2Sfu5VuD7EHE2w7y+K68+kULKt5RJg8ZJk3YhHF1qLD4O8v8AmNq+8vbOwnPFFDvds25/AoEvMqlQ==", + "version": "3.6.5", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz", + "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==", "requires": { - "browserslist": "^4.8.2", - "semver": "^6.3.0" + "browserslist": "^4.8.5", + "semver": "7.0.0" }, "dependencies": { "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" } } }, @@ -3233,6 +3644,13 @@ "requires": { "bn.js": "^4.1.0", "elliptic": "^6.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + } } }, "create-hash": { @@ -3291,32 +3709,29 @@ } }, "css-loader": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.3.0.tgz", - "integrity": "sha512-x9Y1vvHe5RR+4tzwFdWExPueK00uqFTCw7mZy+9aE/X1SKWOArm5luaOrtJ4d05IpOwJ6S86b/tVcIdhw1Bu4A==", + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.5.3.tgz", + "integrity": "sha512-UEr9NH5Lmi7+dguAm+/JSPovNjYbm2k3TK58EiwQHzOHH5Jfq1Y+XoP2bQO6TMn7PptMd0opxxedAWcaSTRKHw==", "requires": { "camelcase": "^5.3.1", "cssesc": "^3.0.0", "icss-utils": "^4.1.1", "loader-utils": "^1.2.3", "normalize-path": "^3.0.0", - "postcss": "^7.0.23", + "postcss": "^7.0.27", "postcss-modules-extract-imports": "^2.0.0", "postcss-modules-local-by-default": "^3.0.2", - "postcss-modules-scope": "^2.1.1", + "postcss-modules-scope": "^2.2.0", "postcss-modules-values": "^3.0.0", - "postcss-value-parser": "^4.0.2", - "schema-utils": "^2.6.0" + "postcss-value-parser": "^4.0.3", + "schema-utils": "^2.6.6", + "semver": "^6.3.0" }, "dependencies": { - "schema-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", - "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", - "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" - } + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -3363,28 +3778,31 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==" }, "csso": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.2.tgz", - "integrity": "sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.0.3.tgz", + "integrity": "sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ==", "requires": { - "css-tree": "1.0.0-alpha.37" + "css-tree": "1.0.0-alpha.39" }, "dependencies": { "css-tree": { - "version": "1.0.0-alpha.37", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", - "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", + "version": "1.0.0-alpha.39", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.39.tgz", + "integrity": "sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA==", "requires": { - "mdn-data": "2.0.4", + "mdn-data": "2.0.6", "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } + }, + "mdn-data": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.6.tgz", + "integrity": "sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -3428,9 +3846,9 @@ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" }, "decompress": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.0.tgz", - "integrity": "sha1-eu3YVCflqS2s/lVnSnxQXpbQH50=", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", + "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "requires": { "decompress-tar": "^4.0.0", "decompress-tarbz2": "^4.0.0", @@ -3663,6 +4081,13 @@ "bn.js": "^4.1.0", "miller-rabin": "^4.0.0", "randombytes": "^2.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + } } }, "dir-glob": { @@ -3698,9 +4123,9 @@ } }, "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=" + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" }, "domain-browser": { "version": "1.2.0", @@ -3729,6 +4154,15 @@ "domelementtype": "1" } }, + "dot-case": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.3.tgz", + "integrity": "sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA==", + "requires": { + "no-case": "^3.0.3", + "tslib": "^1.10.0" + } + }, "download": { "version": "6.2.5", "resolved": "https://registry.npmjs.org/download/-/download-6.2.5.tgz", @@ -3803,9 +4237,9 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "electron-to-chromium": { - "version": "1.3.322", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", - "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==" + "version": "1.3.432", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.432.tgz", + "integrity": "sha512-/GdNhXyLP5Yl2322CUX/+Xi8NhdHBqL6lD9VJVKjH6CjoPGakvwZ5CpKgj/oOlbzuWWjOvMjDw1bBuAIRCNTlw==" }, "elliptic": { "version": "6.5.2", @@ -3819,6 +4253,13 @@ "inherits": "^2.0.1", "minimalistic-assert": "^1.0.0", "minimalistic-crypto-utils": "^1.0.0" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + } } }, "elm": { @@ -3830,42 +4271,12 @@ } }, "elm-format": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/elm-format/-/elm-format-0.8.2.tgz", - "integrity": "sha512-BRQaVQOGt9gxK1hqSJn1MISxDGdln22PSYzmHMjqpQY3S9OJY/3kPn5HoiH3bHQYQFwC+X0apsMZldK9VxySow==", + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/elm-format/-/elm-format-0.8.3.tgz", + "integrity": "sha512-shXOgfg8F5hDJagP91zJ3QT0PoMbusPfhgEeu3uRofTaN843cFpjZ8qlQip6pFQxtWyQE/P+NMg3vP6lyWI5Mg==", "dev": true, "requires": { "binwrap": "^0.2.2" - }, - "dependencies": { - "binwrap": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/binwrap/-/binwrap-0.2.2.tgz", - "integrity": "sha512-Y+Wvypk3JhH5GPZAvlwJAWOVH/OsOhQMSj37vySuWHwQivoALplPxfBA8b973rFJI7OS+O+1YmmYXIiEXVMAcw==", - "dev": true, - "requires": { - "mustache": "^3.0.1", - "request": "^2.88.0", - "request-promise": "^4.2.4", - "tar": "^4.4.10", - "unzip-stream": "^0.3.0" - } - }, - "tar": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.10.tgz", - "integrity": "sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.5", - "minizlib": "^1.2.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.3" - } - } } }, "elm-hot": { @@ -3907,9 +4318,9 @@ }, "dependencies": { "ansi-styles": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.0.tgz", - "integrity": "sha512-7kFQgnEaMdRtwf6uSfUnVr9gSGC7faurn+J/Mv90/W+iTtN0405/nLdopfMWwchyxhbGYl6TC4Sccn9TUkGAgg==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz", + "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==", "dev": true, "requires": { "@types/color-name": "^1.1.1", @@ -3932,15 +4343,6 @@ "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==", "dev": true }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, "chalk": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", @@ -3993,15 +4395,6 @@ "which": "^2.0.1" } }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, "firstline": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/firstline/-/firstline-2.0.2.tgz", @@ -4020,16 +4413,16 @@ } }, "fsevents": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz", - "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", + "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", "dev": true, "optional": true }, "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", "dev": true, "requires": { "is-glob": "^4.0.1" @@ -4050,12 +4443,6 @@ "binary-extensions": "^2.0.0" } }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, "path-key": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", @@ -4095,15 +4482,6 @@ "has-flag": "^4.0.0" } }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, "which": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/which/-/which-2.0.1.tgz", @@ -4141,10 +4519,15 @@ "binwrap": "0.2.2" } }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, "emojis-list": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-2.1.0.tgz", - "integrity": "sha1-TapNnbAPmBmIDHn6RXrlsJof04k=" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==" }, "encodeurl": { "version": "1.0.2", @@ -4181,9 +4564,9 @@ } }, "entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", - "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.2.tgz", + "integrity": "sha512-dmD3AvJQBUjKpcNkoqr+x+IF0SdRtPz9Vk0uTy4yWqga9ibB6s4v++QFWNohjiUGoMlF552ZvNyXDxz5iW0qmw==" }, "errno": { "version": "0.1.7", @@ -4202,20 +4585,21 @@ } }, "es-abstract": { - "version": "1.16.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.16.3.tgz", - "integrity": "sha512-WtY7Fx5LiOnSYgF5eg/1T+GONaGmpvpPdCpSnYij+U2gDTL0UPfWrhDw7b2IYb+9NQJsYpCA0wOQvZfsd6YwRw==", + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.5.tgz", + "integrity": "sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg==", "requires": { "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1", - "is-callable": "^1.1.4", - "is-regex": "^1.0.4", + "is-callable": "^1.1.5", + "is-regex": "^1.0.5", "object-inspect": "^1.7.0", "object-keys": "^1.1.1", - "string.prototype.trimleft": "^2.1.0", - "string.prototype.trimright": "^2.1.0" + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.1", + "string.prototype.trimright": "^2.1.1" } }, "es-to-primitive": { @@ -4296,9 +4680,9 @@ "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" }, "eventemitter3": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz", - "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==" + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.1.tgz", + "integrity": "sha512-MnI0l35oYL2C/c80rjJN7qu50MDx39yYE7y7oYck2YA3v+y7EaAenY8IU8AP4d1RWqE8VAKWFGSh3rfP87ll3g==" }, "events": { "version": "3.1.0", @@ -4450,14 +4834,6 @@ "is-descriptor": "^0.1.0" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -4550,22 +4926,11 @@ "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==" }, "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "requires": { - "is-plain-object": "^2.0.4" - } - } + "is-extendable": "^0.1.0" } }, "extglob": { @@ -4591,14 +4956,6 @@ "is-descriptor": "^1.0.0" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, "is-accessor-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", @@ -4628,14 +4985,14 @@ } }, "extract-zip": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.7.tgz", - "integrity": "sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k=", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", "requires": { - "concat-stream": "1.6.2", - "debug": "2.6.9", - "mkdirp": "0.5.1", - "yauzl": "2.4.1" + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" }, "dependencies": { "debug": { @@ -4646,26 +5003,10 @@ "ms": "2.0.0" } }, - "fd-slicer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", - "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", - "requires": { - "pend": "~1.2.0" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "yauzl": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", - "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", - "requires": { - "fd-slicer": "~1.0.1" - } } } }, @@ -4675,34 +5016,44 @@ "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=" }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", + "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" }, "fast-glob": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", - "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.2.tgz", + "integrity": "sha512-UDV82o4uQyljznxwMxyVRJgZZt3O5wENYojjzbaGEGZgeOxkLFf+V4cnUD+krzb2F72E18RhamkMZ7AdeggF7A==", "requires": { - "@mrmlnc/readdir-enhanced": "^2.2.1", - "@nodelib/fs.stat": "^1.1.2", - "glob-parent": "^3.1.0", - "is-glob": "^4.0.0", - "merge2": "^1.2.3", - "micromatch": "^3.1.10" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "dependencies": { + "glob-parent": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", + "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", + "requires": { + "is-glob": "^4.0.1" + } + } } }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" }, "fastq": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.6.0.tgz", - "integrity": "sha512-jmxqQ3Z/nXoeyDmWAzF9kH1aGZSis6e/SbfPmJpUnyZ0ogr6iscHQaml4wsEepEWSdtmpy+eVXmCRIMpxaXqOA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.7.0.tgz", + "integrity": "sha512-YOadQRnHd5q6PogvAR/x62BGituF2ufiEA6s8aavQANw5YKHERI4AREboX6KotzP8oX2klxYF2wcV/7bn1clfQ==", "requires": { - "reusify": "^1.0.0" + "reusify": "^1.0.4" } }, "favicons": { @@ -4737,9 +5088,9 @@ } }, "favicons-webpack-plugin": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/favicons-webpack-plugin/-/favicons-webpack-plugin-3.0.0.tgz", - "integrity": "sha512-5fKJzAgGYiEdWAfX46sdlWTO29mbvqIhR93U1NsKsGL+7Zj+S5cxIWPrsVLBqHt9zM1/VKAWUZ2gXbaQlenNpw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/favicons-webpack-plugin/-/favicons-webpack-plugin-3.0.1.tgz", + "integrity": "sha512-u5wIPl++qjoU+sOmCOurh8Wfmojh/7FmIQbIkteh5aYiCkJLSj/SyQps7WvVKAgJ3njKCOuxKiqIDFZnvhbEYQ==", "requires": { "@types/favicons": "5.5.0", "cache-loader": "^4.1.0", @@ -4755,12 +5106,12 @@ }, "dependencies": { "find-cache-dir": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.2.0.tgz", - "integrity": "sha512-1JKclkYYsf1q9WIJKLZa9S9muC+08RIjzAlLrK4QcYLJMS6mk9yombQ9qf+zJ7H9LS800k0s44L4sDq9VYzqyg==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", "requires": { "commondir": "^1.0.1", - "make-dir": "^3.0.0", + "make-dir": "^3.0.2", "pkg-dir": "^4.1.0" } }, @@ -4773,20 +5124,6 @@ "path-exists": "^4.0.0" } }, - "html-webpack-plugin": { - "version": "4.0.0-beta.11", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.0.0-beta.11.tgz", - "integrity": "sha512-4Xzepf0qWxf8CGg7/WQM5qBB2Lc/NFI7MhU59eUDTkuQp3skZczH4UA1d6oQyDEIoMDgERVhRyTdtUPZ5s5HBg==", - "optional": true, - "requires": { - "html-minifier-terser": "^5.0.1", - "loader-utils": "^1.2.3", - "lodash": "^4.17.15", - "pretty-error": "^2.1.1", - "tapable": "^1.1.3", - "util.promisify": "1.0.0" - } - }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", @@ -4796,13 +5133,21 @@ } }, "make-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", - "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", "requires": { "semver": "^6.0.0" } }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, "p-locate": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", @@ -4811,6 +5156,11 @@ "p-limit": "^2.2.0" } }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -4840,9 +5190,9 @@ } }, "figgy-pudding": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.1.tgz", - "integrity": "sha512-vNKxJHTEKNThjfrdJwHc7brvM6eVevuO5nTj6ez8ZQ1qbXTvGthucRF7S4vf2cr71QVnT70V34v0S1DyQsti0w==" + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" }, "figures": { "version": "1.7.0", @@ -4860,17 +5210,6 @@ "requires": { "loader-utils": "^1.2.3", "schema-utils": "^2.5.0" - }, - "dependencies": { - "schema-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", - "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", - "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" - } - } } }, "file-type": { @@ -4878,6 +5217,12 @@ "resolved": "https://registry.npmjs.org/file-type/-/file-type-9.0.0.tgz", "integrity": "sha512-Qe/5NJrgIOlwijpq3B7BEpzPFcgzggOTagZmkXQY4LA6bsXKTUstK7Wp12lEJ/mLKTpvIZxmIuRcLYWT6ov9lw==" }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, "filename-reserved-regex": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-2.0.0.tgz", @@ -4894,24 +5239,11 @@ } }, "fill-range": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", - "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "requires": { - "extend-shallow": "^2.0.1", - "is-number": "^3.0.0", - "repeat-string": "^1.6.1", - "to-regex-range": "^2.1.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } + "to-regex-range": "^5.0.1" } }, "finalhandler": { @@ -4974,11 +5306,11 @@ "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==" }, "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "requires": { - "locate-path": "^3.0.0" + "locate-path": "^2.0.0" } }, "find-versions": { @@ -4987,13 +5319,6 @@ "integrity": "sha512-P8WRou2S+oe222TOCHitLy8zj+SIsVJh52VP4lvXkaFVnOFFdoWv1H1Jjvel1aI6NCFOAaeAVm8qrI0odiLcww==", "requires": { "semver-regex": "^2.0.0" - }, - "dependencies": { - "array-uniq": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-2.1.0.tgz", - "integrity": "sha512-bdHxtev7FN6+MXI1YFW0Q8mQ8dTJc2S8AMfju+ZR77pbg2yAdVyDlwkaUI7Har0LyOMRFPHrJ9lYdyjZZswdlQ==" - } } }, "firstline": { @@ -5011,9 +5336,9 @@ } }, "follow-redirects": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.9.0.tgz", - "integrity": "sha512-CRcPzsSIbXyVDl0QI01muNDu69S8trU4jArW9LpOt2WtC6LyUJetcIrmfHsRBx7/Jb6GHJUiuqyYxPooFfNt6A==", + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.11.0.tgz", + "integrity": "sha512-KZm0V+ll8PfBrKwMzdo5D13b1bur9Iq9Zd/RMmAoQQcl2PxxFml8cxXPaaPYVbV0RjNjq1CU7zIzAOqtUPudmA==", "requires": { "debug": "^3.0.0" }, @@ -5091,12 +5416,11 @@ } }, "fs-minipass": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", - "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "requires": { - "minipass": "^2.6.0" + "minipass": "^3.0.0" } }, "fs-write-stream-atomic": { @@ -5116,550 +5440,13 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", "optional": true, "requires": { - "nan": "^2.12.1", - "node-pre-gyp": "^0.12.0" - }, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "optional": true - }, - "aproba": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "optional": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "optional": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "chownr": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.1.tgz", - "integrity": "sha512-j38EvO5+LHX84jlo6h4UzmOwi0UgW61WRyPtJz4qaadK5eY3BTS5TY/S1Stc3Uk2lIM6TPevAlULiEJwie860g==", - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", - "optional": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "optional": true - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "optional": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "optional": true - }, - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", - "optional": true, - "requires": { - "ms": "^2.1.1" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "optional": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.5.tgz", - "integrity": "sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ==", - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "optional": true - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "optional": true, - "requires": { - "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" - } - }, - "glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==", - "optional": true, - "requires": { - "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" - } - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-walk": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.1.tgz", - "integrity": "sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ==", - "optional": true, - "requires": { - "minimatch": "^3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "optional": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "optional": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "optional": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "optional": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "optional": true - }, - "minipass": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.3.5.tgz", - "integrity": "sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA==", - "optional": true, - "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "minizlib": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.2.1.tgz", - "integrity": "sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA==", - "optional": true, - "requires": { - "minipass": "^2.2.1" - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "optional": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "optional": true - }, - "needle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.0.tgz", - "integrity": "sha512-QBZu7aAFR0522EyaXZM0FZ9GLpq6lvQ3uq8gteiDUp7wKdy0lSd2hPlgFwVuW1CBkfEs9PfDQsQzZghLs/psdg==", - "optional": true, - "requires": { - "debug": "^4.1.0", - "iconv-lite": "^0.4.4", - "sax": "^1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.12.0.tgz", - "integrity": "sha512-4KghwV8vH5k+g2ylT+sLTjy5wmUOb9vPhnM8NHvRf9dHmnW/CndrFXy2aRPaPST6dugXSdHXfeaHQm77PIz/1A==", - "optional": true, - "requires": { - "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" - } - }, - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "optional": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - }, - "npm-bundled": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.0.6.tgz", - "integrity": "sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g==", - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.1.tgz", - "integrity": "sha512-+TcdO7HJJ8peiiYhvPxsEDhF3PJFGUGRcFsGve3vxvxdcpO2Z4Z7rkosRM0kWj6LfbK/P0gu3dzk5RU1ffvFcw==", - "optional": true, - "requires": { - "ignore-walk": "^3.0.1", - "npm-bundled": "^1.0.1" - } - }, - "npmlog": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", - "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "optional": true, - "requires": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "optional": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "optional": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "optional": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "optional": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "optional": true - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "optional": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", - "optional": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "optional": true, - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "optional": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "optional": true - }, - "sax": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", - "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", - "optional": true - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "optional": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "optional": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "optional": true, - "requires": { - "safe-buffer": "~5.1.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "optional": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "optional": true - }, - "tar": { - "version": "4.4.8", - "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.8.tgz", - "integrity": "sha512-LzHF64s5chPQQS0IYBn9IN5h3i98c12bo4NCO7e0sGM2llXQ3p2FGC5sdENN4cTW48O915Sh+x+EXx7XW96xYQ==", - "optional": true, - "requires": { - "chownr": "^1.1.1", - "fs-minipass": "^1.2.5", - "minipass": "^2.3.4", - "minizlib": "^1.1.1", - "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.2", - "yallist": "^3.0.2" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "optional": true, - "requires": { - "string-width": "^1.0.2 || 2" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "optional": true - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "optional": true - } + "bindings": "^1.5.0", + "nan": "^2.12.1" } }, "fstream": { @@ -5701,15 +5488,20 @@ "globule": "^1.0.0" } }, + "gensync": { + "version": "1.0.0-beta.1", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz", + "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==" + }, "get-caller-file": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==" }, "get-own-enumerable-property-symbols": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz", - "integrity": "sha512-09/VS4iek66Dh2bctjRkowueRJbY1JDGR1L/zRxO1Qk8Uxs6PnqaNSqalpizPT+CDjre3hnEsuzvhgomz9qYrA==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==" }, "get-proxy": { "version": "2.1.0", @@ -5814,9 +5606,9 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==" }, "globby": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.1.tgz", - "integrity": "sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==", + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-10.0.2.tgz", + "integrity": "sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==", "requires": { "@types/glob": "^7.1.1", "array-union": "^2.1.0", @@ -5828,24 +5620,11 @@ "slash": "^3.0.0" }, "dependencies": { - "@nodelib/fs.stat": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.3.tgz", - "integrity": "sha512-bQBFruR2TAwoevBEd/NWMoAAtNGzTRgdrqnYCc7dhzfoNvqPzLyqlEQnzZ3kVnNrSp25iyxE00/3h2fqGAGArA==" - }, "array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "requires": { - "fill-range": "^7.0.1" - } - }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -5854,53 +5633,11 @@ "path-type": "^4.0.0" } }, - "fast-glob": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.1.1.tgz", - "integrity": "sha512-nTCREpBY8w8r+boyFYAx21iL6faSsQynliPHM4Uf56SbkyohCNxpVPEH9xrF5TXKy+IsjkPUHDKiUkzBVRXn9g==", - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.0", - "merge2": "^1.3.0", - "micromatch": "^4.0.2" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "glob-parent": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", - "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", - "requires": { - "is-glob": "^4.0.1" - } - }, "ignore": { "version": "5.1.4", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==" }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" - }, - "micromatch": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", - "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", - "requires": { - "braces": "^3.0.1", - "picomatch": "^2.0.5" - } - }, "path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -5910,24 +5647,16 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==" - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "requires": { - "is-number": "^7.0.0" - } } } }, "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.1.tgz", + "integrity": "sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g==", "requires": { "glob": "~7.1.1", - "lodash": "~4.17.10", + "lodash": "~4.17.12", "minimatch": "~3.0.2" } }, @@ -6017,9 +5746,9 @@ } }, "graceful-fs": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz", - "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==" + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==" }, "graceful-readlink": { "version": "1.0.1", @@ -6114,6 +5843,24 @@ "kind-of": "^4.0.0" }, "dependencies": { + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "kind-of": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", @@ -6125,12 +5872,30 @@ } }, "hash-base": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz", - "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + } } }, "hash.js": { @@ -6158,9 +5923,9 @@ } }, "hosted-git-info": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", - "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==" + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.8.tgz", + "integrity": "sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg==" }, "html-comment-regex": { "version": "1.1.2", @@ -6168,9 +5933,9 @@ "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==" }, "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=" + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz", + "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==" }, "html-minifier": { "version": "3.5.21", @@ -6184,33 +5949,63 @@ "param-case": "2.1.x", "relateurl": "0.2.x", "uglify-js": "3.4.x" - } - }, - "html-minifier-terser": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.0.2.tgz", - "integrity": "sha512-VAaitmbBuHaPKv9bj47XKypRhgDxT/cDLvsPiiF7w+omrN3K0eQhpigV9Z1ilrmHa9e0rOYcD6R/+LCDADGcnQ==", - "requires": { - "camel-case": "^3.0.0", - "clean-css": "^4.2.1", - "commander": "^4.0.0", - "he": "^1.2.0", - "param-case": "^2.1.1", - "relateurl": "^0.2.7", - "terser": "^4.3.9" }, "dependencies": { + "camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", + "requires": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, "commander": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-4.0.1.tgz", - "integrity": "sha512-IPF4ouhCP+qdlcmCedhxX4xiGBPyigb8v5NeUp+0LyhwLgxMqyp3S0vl7TAPfS/hiP7FC3caI/PB9lTmP8r1NA==" + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==" + }, + "lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + }, + "no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "requires": { + "lower-case": "^1.1.1" + } + }, + "param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "requires": { + "no-case": "^2.2.0" + } } } }, + "html-minifier-terser": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz", + "integrity": "sha512-tiYE76O1zunboByeB/nFGwUEb263Z3nkNv6Lz2oLC1s6M36bLKfTrjQ+7ssVfaucVllE+N7hh/FbpbxvnIA+LQ==", + "requires": { + "camel-case": "^4.1.1", + "clean-css": "^4.2.3", + "commander": "^4.1.1", + "he": "^1.2.0", + "param-case": "^3.0.3", + "relateurl": "^0.2.7", + "terser": "^4.6.3" + } + }, "html-webpack-plugin": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.2.0.tgz", - "integrity": "sha512-zL7LYTuq/fcJX6vV6tmmvFR508Bd9e6kvVGbS76YAjZ2CPVRzsjkvDYs/SshPevpolSdTWgaDV39D6k6oQoVFw==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz", + "integrity": "sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w==", "requires": { "@types/html-minifier-terser": "^5.0.0", "@types/tapable": "^1.0.5", @@ -6221,31 +6016,6 @@ "pretty-error": "^2.1.1", "tapable": "^1.1.3", "util.promisify": "1.0.0" - }, - "dependencies": { - "@types/tapable": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.5.tgz", - "integrity": "sha512-/gG2M/Imw7cQFp8PGvz/SwocNrmKFjFsm5Pb8HdbHkZ1K8pmuPzOX4VeVoiEecFCVf4CsN1r3/BRvx+6sNqwtQ==" - }, - "@types/webpack": { - "version": "4.41.12", - "resolved": "https://registry.npmjs.org/@types/webpack/-/webpack-4.41.12.tgz", - "integrity": "sha512-BpCtM4NnBen6W+KEhrL9jKuZCXVtiH6+0b6cxdvNt2EwU949Al334PjQSl2BeAyvAX9mgoNNG21wvjP3xZJJ5w==", - "requires": { - "@types/anymatch": "*", - "@types/node": "*", - "@types/tapable": "*", - "@types/uglify-js": "*", - "@types/webpack-sources": "*", - "source-map": "^0.6.0" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" - } } }, "htmlparser2": { @@ -6267,9 +6037,9 @@ "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==" }, "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -6321,6 +6091,122 @@ "is-glob": "^4.0.0", "lodash": "^4.17.5", "micromatch": "^3.1.9" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "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" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "http-signature": { @@ -6409,6 +6295,38 @@ "replace-ext": "^1.0.0" }, "dependencies": { + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==" + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "dir-glob": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz", @@ -6418,11 +6336,64 @@ "path-type": "^3.0.0" } }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "requires": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + } + }, "file-type": { "version": "10.11.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==" }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, "globby": { "version": "8.0.2", "resolved": "https://registry.npmjs.org/globby/-/globby-8.0.2.tgz", @@ -6444,6 +6415,24 @@ } } }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, "make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", @@ -6458,6 +6447,35 @@ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" } } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "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" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } } } }, @@ -6534,12 +6552,12 @@ } }, "imagemin-svgo": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-7.0.0.tgz", - "integrity": "sha512-+iGJFaPIMx8TjFW6zN+EkOhlqcemdL7F3N3Y0wODvV2kCUBuUtZK7DRZc1+Zfu4U2W/lTMUyx2G8YMOrZntIWg==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/imagemin-svgo/-/imagemin-svgo-7.1.0.tgz", + "integrity": "sha512-0JlIZNWP0Luasn1HT82uB9nU9aa+vUj6kpT+MjPW11LbprXC+iC4HDwn1r4Q2/91qj4iy9tRZNsFySMlEpLdpg==", "requires": { - "is-svg": "^3.0.0", - "svgo": "^1.0.5" + "is-svg": "^4.2.1", + "svgo": "^1.3.2" } }, "imagemin-webpack-plugin": { @@ -6578,9 +6596,9 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==" }, "indent-string": { "version": "2.1.0", @@ -6647,9 +6665,9 @@ "integrity": "sha1-3FiQdvZZ9BnCIgOaMzFvHHOH7/0=" }, "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==" + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, "is-accessor-descriptor": { "version": "0.1.6", @@ -6688,9 +6706,9 @@ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==" + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz", + "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==" }, "is-data-descriptor": { "version": "0.1.4", @@ -6711,9 +6729,9 @@ } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz", + "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==" }, "is-descriptor": { "version": "0.1.6", @@ -6743,12 +6761,9 @@ "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" }, "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "requires": { - "number-is-nan": "^1.0.0" - } + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==" }, "is-fullwidth-code-point": { "version": "1.0.0", @@ -6759,9 +6774,9 @@ } }, "is-function": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz", - "integrity": "sha1-Es+5i2W1fdPRk6MSH19uL0N2ArU=" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" }, "is-gif": { "version": "3.0.0", @@ -6797,22 +6812,9 @@ "integrity": "sha1-q5124dtM7VHjXeDHLr7PCfc0zeg=" }, "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-obj": { "version": "1.0.1", @@ -6843,11 +6845,11 @@ "integrity": "sha1-1XSxK/J1wDUEVVcLDltXqwYgd84=" }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz", + "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==", "requires": { - "has": "^1.0.1" + "has": "^1.0.3" } }, "is-regexp": { @@ -6866,11 +6868,11 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" }, "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-4.2.1.tgz", + "integrity": "sha512-PHx3ANecKsKNl5y5+Jvt53Y4J7MfMpbNZkv384QNiswMKAWIbvcqbPz+sYbFKJI8Xv3be01GSFniPmoaP+Ai5A==", "requires": { - "html-comment-regex": "^1.1.0" + "html-comment-regex": "^1.1.2" } }, "is-symbol": { @@ -6931,22 +6933,22 @@ } }, "jimp": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.9.3.tgz", - "integrity": "sha512-dIxvT1OMRkd3+B18XUhJ5WZ2Dw7Hp8mvjaTqfi945zZ7fga6LT22h3NLYDorHHAiy9z30KjfNnOgpBoxrdjDZg==", + "version": "0.9.8", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.9.8.tgz", + "integrity": "sha512-DHN4apKMwLIvD/TKO9tFfPuankNuVK98vCwHm/Jv9z5cJnrd38xhi+4I7IAGmDU3jIDlrEVhzTkFH1Ymv5yTQQ==", "requires": { "@babel/runtime": "^7.7.2", - "@jimp/custom": "^0.9.3", - "@jimp/plugins": "^0.9.3", - "@jimp/types": "^0.9.3", + "@jimp/custom": "^0.9.8", + "@jimp/plugins": "^0.9.8", + "@jimp/types": "^0.9.8", "core-js": "^3.4.1", "regenerator-runtime": "^0.13.3" } }, "jpeg-js": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.6.tgz", - "integrity": "sha512-MUj2XlMB8kpe+8DJUGH/3UJm4XpI8XEgZQ+CiHDeyrGoKPdW/8FJv6ku+3UiYm5Fz3CWaL+iXmD8Q4Ap6aC1Jw==" + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.3.7.tgz", + "integrity": "sha512-9IXdWudL61npZjvLuVe/ktHiA41iE8qFyLB+4VDTblEsWBzeg8WQTlktdUK4CdncUqtUgUg0bbOmTE2bKBKaBQ==" }, "jpegtran-bin": { "version": "4.0.0", @@ -6959,14 +6961,9 @@ } }, "js-base64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==" - }, - "js-levenshtein": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/js-levenshtein/-/js-levenshtein-1.1.6.tgz", - "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==" + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.2.tgz", + "integrity": "sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ==" }, "js-tokens": { "version": "4.0.0", @@ -7026,11 +7023,11 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=" }, "json5": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz", - "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz", + "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==", "requires": { - "minimist": "^1.2.0" + "minimist": "^1.2.5" } }, "jsonfile": { @@ -7071,9 +7068,9 @@ } }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==" + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "lcid": { "version": "1.0.0", @@ -7083,6 +7080,19 @@ "invert-kv": "^1.0.0" } }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, + "levenary": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/levenary/-/levenary-1.1.1.tgz", + "integrity": "sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ==", + "requires": { + "leven": "^3.1.0" + } + }, "load-bmfont": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.0.tgz", @@ -7123,12 +7133,12 @@ "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==" }, "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", "requires": { "big.js": "^5.2.2", - "emojis-list": "^2.0.0", + "emojis-list": "^3.0.0", "json5": "^1.0.1" }, "dependencies": { @@ -7143,11 +7153,11 @@ } }, "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "requires": { - "p-locate": "^3.0.0", + "p-locate": "^2.0.0", "path-exists": "^3.0.0" } }, @@ -7197,12 +7207,6 @@ "squeak": "^1.0.0" } }, - "loglevel": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz", - "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==", - "dev": true - }, "longest": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", @@ -7226,9 +7230,12 @@ } }, "lower-case": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-1.1.4.tgz", - "integrity": "sha1-miyr0bno4K6ZOkv31YdcOcQujqw=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.1.tgz", + "integrity": "sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ==", + "requires": { + "tslib": "^1.10.0" + } }, "lowercase-keys": { "version": "1.0.1", @@ -7343,23 +7350,12 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", "requires": { - "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" + "braces": "^3.0.1", + "picomatch": "^2.0.5" } }, "miller-rabin": { @@ -7369,6 +7365,13 @@ "requires": { "bn.js": "^4.0.0", "brorand": "^1.0.1" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + } } }, "mime": { @@ -7377,22 +7380,22 @@ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.42.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz", - "integrity": "sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==" + "version": "1.44.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" }, "mime-types": { - "version": "2.1.25", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz", - "integrity": "sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==", + "version": "2.1.27", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", + "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", "requires": { - "mime-db": "1.42.0" + "mime-db": "1.44.0" } }, "mimic-response": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.0.0.tgz", - "integrity": "sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==" }, "min-document": { "version": "2.19.0", @@ -7421,27 +7424,39 @@ } }, "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=" + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, "minipass": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", - "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", - "dev": true, + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", + "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", "requires": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "minizlib": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", - "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", - "dev": true, + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", + "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", "requires": { - "minipass": "^2.9.0" + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "mississippi": { @@ -7481,20 +7496,18 @@ } }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" - } + "minimist": "^1.2.5" } }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "move-concurrently": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", @@ -7530,15 +7543,15 @@ "dev": true }, "mustache": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.0.2.tgz", - "integrity": "sha512-64neoEgmozb8e/ecGBOSE+RfnevLSFzCI0UKPcrWmjv953/8fXhYO9+EQFtfbi6hwoFxcTA+Fp5mRiOiI9eTuA==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.2.1.tgz", + "integrity": "sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA==", "dev": true }, "nan": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", - "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.1.tgz", + "integrity": "sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw==" }, "nanomatch": { "version": "1.2.13", @@ -7556,12 +7569,31 @@ "regex-not": "^1.0.0", "snapdragon": "^0.8.1", "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "napi-build-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", - "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==" }, "negotiator": { "version": "0.6.2", @@ -7579,17 +7611,18 @@ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "no-case": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/no-case/-/no-case-2.3.2.tgz", - "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.3.tgz", + "integrity": "sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw==", "requires": { - "lower-case": "^1.1.1" + "lower-case": "^2.0.1", + "tslib": "^1.10.0" } }, "node-abi": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.13.0.tgz", - "integrity": "sha512-9HrZGFVTR5SOu3PZAnAY2hLO36aW1wmA+FDsVkr85BTST32TLCA1H/AEcatVRAsWLyXS3bqUDYCAjq5/QGuSTA==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.16.0.tgz", + "integrity": "sha512-+sa0XNlWDA6T+bDLmkCUYn6W5k5W6BPRL6mqzSCs6H/xUgtl4D5x2fORKDzopKiU6wsyn/+wXlRXwXeSp+mtoA==", "requires": { "semver": "^5.4.1" } @@ -7628,6 +7661,16 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=" + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } } } }, @@ -7684,24 +7727,14 @@ } }, "node-releases": { - "version": "1.1.42", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.42.tgz", - "integrity": "sha512-OQ/ESmUqGawI2PRX+XIRao44qWYBBfN54ImQYdWVTQqUckuejOg76ysSqDBK8NG3zwySRVnX36JwDQ6x+9GxzA==", - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } + "version": "1.1.55", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.55.tgz", + "integrity": "sha512-H3R3YR/8TjT5WPin/wOoHOUPHgvj8leuU/Keta/rwelEQN9pA/S2Dx8/se4pZ2LBxSd0nAGzsNzhqwa77v7F1w==" }, "node-sass": { - "version": "4.13.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.13.0.tgz", - "integrity": "sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA==", + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", + "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", "requires": { "async-foreach": "^0.1.3", "chalk": "^1.1.1", @@ -7717,7 +7750,7 @@ "node-gyp": "^3.8.0", "npmlog": "^4.0.0", "request": "^2.88.0", - "sass-graph": "^2.2.4", + "sass-graph": "2.2.5", "stdout-stream": "^1.4.0", "true-case-path": "^1.0.2" }, @@ -7939,12 +7972,12 @@ } }, "object.getownpropertydescriptors": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", - "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz", + "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==", "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.5.1" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" } }, "object.pick": { @@ -7956,12 +7989,12 @@ } }, "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" } @@ -8061,19 +8094,19 @@ "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" }, "p-limit": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.1.tgz", - "integrity": "sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "requires": { - "p-try": "^2.0.0" + "p-try": "^1.0.0" } }, "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "requires": { - "p-limit": "^2.0.0" + "p-limit": "^1.1.0" } }, "p-map-series": { @@ -8103,14 +8136,14 @@ } }, "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" }, "pako": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz", - "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==" + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" }, "parallel-transform": { "version": "1.2.0", @@ -8123,11 +8156,12 @@ } }, "param-case": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", - "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.3.tgz", + "integrity": "sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA==", "requires": { - "no-case": "^2.2.0" + "dot-case": "^3.0.3", + "tslib": "^1.10.0" } }, "parse-asn1": { @@ -8201,6 +8235,15 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "pascal-case": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.1.tgz", + "integrity": "sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA==", + "requires": { + "no-case": "^3.0.3", + "tslib": "^1.10.0" + } + }, "pascalcase": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", @@ -8284,9 +8327,9 @@ "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" }, "picomatch": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.1.1.tgz", - "integrity": "sha512-OYMyqkKzK7blWO/+XZYP6w8hH0LDvkBvdvKukti+7kqYFCiEAk+gI3DWnryapc0Dau05ugGTy0foQ6mqn4AHYA==" + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==" }, "pify": { "version": "4.0.1", @@ -8320,6 +8363,54 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "requires": { "find-up": "^3.0.0" + }, + "dependencies": { + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + } + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "requires": { + "find-up": "^2.1.0" } }, "pngjs": { @@ -8360,9 +8451,9 @@ } }, "portfinder": { - "version": "1.0.25", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz", - "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==", + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz", + "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==", "requires": { "async": "^2.6.2", "debug": "^3.1.1", @@ -8375,19 +8466,7 @@ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "requires": { "ms": "^2.1.1" - }, - "dependencies": { - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" } } }, @@ -8397,9 +8476,9 @@ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=" }, "postcss": { - "version": "7.0.24", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.24.tgz", - "integrity": "sha512-Xl0XvdNWg+CblAXzNvbSOUvgJXwSjmbAKORqyw9V2AlHrm1js2gFw9y3jibBAhpKZi8b5JzJCVh/FyzPsTtgTA==", + "version": "7.0.29", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.29.tgz", + "integrity": "sha512-ba0ApvR3LxGvRMMiUa9n0WR4HjzcYm7tS+ht4/2Nd0NLtHpPIH77fuB9Xh1/yJVz9O/E/95Y/dn8ygWsyffXtw==", "requires": { "chalk": "^2.4.2", "source-map": "^0.6.1", @@ -8441,9 +8520,9 @@ } }, "postcss-modules-scope": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.1.tgz", - "integrity": "sha512-OXRUPecnHCg8b9xWvldG/jUpRIGPNRka0r4D4j0ESUU2/5IOnpsjfPPmDprM3Ih8CgZ8FXjWqaniK5v4rWt3oQ==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz", + "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==", "requires": { "postcss": "^7.0.6", "postcss-selector-parser": "^6.0.0" @@ -8469,9 +8548,9 @@ } }, "postcss-value-parser": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz", - "integrity": "sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ==" + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==" }, "prebuild-install": { "version": "5.3.3", @@ -8560,18 +8639,18 @@ "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" }, "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", "requires": { "forwarded": "~0.1.2", - "ipaddr.js": "1.9.0" + "ipaddr.js": "1.9.1" } }, "proxy-from-env": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz", - "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, "prr": { "version": "1.0.1", @@ -8584,9 +8663,9 @@ "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" }, "psl": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.6.0.tgz", - "integrity": "sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA==" + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==" }, "public-encrypt": { "version": "4.0.3", @@ -8599,6 +8678,13 @@ "parse-asn1": "^5.0.0", "randombytes": "^2.0.1", "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", + "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==" + } } }, "pump": { @@ -8652,9 +8738,9 @@ }, "dependencies": { "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz", + "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==" } } }, @@ -8730,37 +8816,22 @@ } }, "raw-loader": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.0.tgz", - "integrity": "sha512-iINUOYvl1cGEmfoaLjnZXt4bKfT2LJnZZib5N/LLyAphC+Dd11vNP9CNVb38j+SAJpFI1uo8j9frmih53ASy7Q==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/raw-loader/-/raw-loader-4.0.1.tgz", + "integrity": "sha512-baolhQBSi3iNh1cglJjA0mYzga+wePk7vdEX//1dTFd+v4TsQlQE0jitJSNF1OIP82rdYulH7otaVmdlDaJ64A==", "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.5.0" + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.5" }, "dependencies": { - "ajv": { - "version": "6.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.0.tgz", - "integrity": "sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw==", + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "fast-deep-equal": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz", - "integrity": "sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==" - }, - "schema-utils": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.5.tgz", - "integrity": "sha512-5KXuwKziQrTVHh8j/Uxz+QUbxkaLW9X/86NBlx/gnKgtsZA2GIVMUn17qWhRFwF8jdYb3Dig5hRO/W5mZqy6SQ==", - "requires": { - "ajv": "^6.12.0", - "ajv-keywords": "^3.4.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } } } @@ -8837,9 +8908,9 @@ } }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -8858,6 +8929,122 @@ "graceful-fs": "^4.1.11", "micromatch": "^3.1.10", "readable-stream": "^2.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "requires": { + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "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" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } } }, "redent": { @@ -8875,24 +9062,25 @@ "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==" }, "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", "requires": { "regenerate": "^1.4.0" } }, "regenerator-runtime": { - "version": "0.13.3", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.3.tgz", - "integrity": "sha512-naKIZz2GQ8JWh///G7L3X6LaQUAMp2lvb1rvwwsURe/VXwD6VMfr+/1NuNw3ag8v2kY1aQ/go5SNn79O9JU7yw==" + "version": "0.13.5", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz", + "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==" }, "regenerator-transform": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz", - "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==", + "version": "0.14.4", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.4.tgz", + "integrity": "sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw==", "requires": { - "private": "^0.1.6" + "@babel/runtime": "^7.8.4", + "private": "^0.1.8" } }, "regex-not": { @@ -8902,19 +9090,38 @@ "requires": { "extend-shallow": "^3.0.2", "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "regexpu-core": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz", - "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==", + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz", + "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==", "requires": { "regenerate": "^1.4.0", - "regenerate-unicode-properties": "^8.1.0", - "regjsgen": "^0.5.0", - "regjsparser": "^0.6.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", "unicode-match-property-ecmascript": "^1.0.4", - "unicode-match-property-value-ecmascript": "^1.1.0" + "unicode-match-property-value-ecmascript": "^1.2.0" } }, "regjsgen": { @@ -8923,9 +9130,9 @@ "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==" }, "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz", + "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==", "requires": { "jsesc": "~0.5.0" }, @@ -8978,14 +9185,14 @@ } }, "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz", + "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==" }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", "requires": { "aws-sign2": "~0.7.0", "aws4": "^1.8.0", @@ -8994,7 +9201,7 @@ "extend": "~3.0.2", "forever-agent": "~0.6.1", "form-data": "~2.3.2", - "har-validator": "~5.1.0", + "har-validator": "~5.1.3", "http-signature": "~1.2.0", "is-typedarray": "~1.0.0", "isstream": "~0.1.2", @@ -9004,7 +9211,7 @@ "performance-now": "^2.1.0", "qs": "~6.5.2", "safe-buffer": "^5.1.2", - "tough-cookie": "~2.4.3", + "tough-cookie": "~2.5.0", "tunnel-agent": "^0.6.0", "uuid": "^3.3.2" } @@ -9107,13 +9314,26 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.1.2.tgz", "integrity": "sha1-E1uZLAV1yYXPoPSUoyJ+0jhYPs4=" + }, + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "requires": { + "minimist": "0.0.8" + } } } }, "resolve": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.13.1.tgz", - "integrity": "sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w==", + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", + "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", "requires": { "path-parse": "^1.0.6" } @@ -9190,77 +9410,157 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", "requires": { "glob": "^7.0.0", "lodash": "^4.0.0", "scss-tokenizer": "^0.2.3", - "yargs": "^7.0.0" + "yargs": "^13.3.2" }, "dependencies": { - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=" + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } }, "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "requires": { - "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", + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", "require-directory": "^2.1.1", - "require-main-filename": "^1.0.1", + "require-main-filename": "^2.0.0", "set-blocking": "^2.0.0", - "string-width": "^1.0.2", - "which-module": "^1.0.0", - "y18n": "^3.2.1", - "yargs-parser": "^5.0.0" + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "requires": { - "camelcase": "^3.0.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, "sass-loader": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.0.tgz", - "integrity": "sha512-+qeMu563PN7rPdit2+n5uuYVR0SSVwm0JsOUsaJXzgYcClWSlmX0iHDnmeOobPkf5kUglVot3QS6SyLyaQoJ4w==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-8.0.2.tgz", + "integrity": "sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ==", "requires": { "clone-deep": "^4.0.1", "loader-utils": "^1.2.3", "neo-async": "^2.6.1", - "schema-utils": "^2.1.0", + "schema-utils": "^2.6.1", "semver": "^6.3.0" }, "dependencies": { - "schema-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", - "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", - "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -9274,13 +9574,12 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" }, "schema-utils": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", - "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "version": "2.6.6", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz", + "integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==", "requires": { - "ajv": "^6.1.0", - "ajv-errors": "^1.0.0", - "ajv-keywords": "^3.1.0" + "ajv": "^6.12.0", + "ajv-keywords": "^3.4.1" } }, "script-ext-html-webpack-plugin": { @@ -9317,16 +9616,6 @@ "requires": { "extend-shallow": "^2.0.1", "kind-of": "^6.0.0" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "seek-bzip": { @@ -9437,16 +9726,6 @@ "is-extendable": "^0.1.1", "is-plain-object": "^2.0.3", "split-string": "^3.0.1" - }, - "dependencies": { - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - } } }, "setimmediate": { @@ -9492,53 +9771,10 @@ "tunnel-agent": "^0.6.0" }, "dependencies": { - "fs-minipass": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.0.0.tgz", - "integrity": "sha512-40Qz+LFXmd9tzYVnnBmZvFfvAADfUA14TXPK1s7IfElJTIZ97rA8w4Kin7Wt5JBrC3ShnnFJO/5vPjPEeJIq9A==", - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.1.tgz", - "integrity": "sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minizlib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.0.tgz", - "integrity": "sha512-EzTZN/fjSvifSX0SlqUERCN39o6T40AMarPbv0MrarSFtIITCBh7bi+dU8nxGFHuqs9jdIAeoYoKuQAAASsPPA==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - }, - "tar": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/tar/-/tar-5.0.5.tgz", - "integrity": "sha512-MNIgJddrV2TkuwChwcSNds/5E9VijOiw7kAc1y5hTNJoLDSuIyid2QtLYiCYNnICebpuvjhPQZsXwUL0O3l7OQ==", - "requires": { - "chownr": "^1.1.3", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.0", - "mkdirp": "^0.5.0", - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -9556,9 +9792,9 @@ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" }, "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==" }, "simple-concat": { "version": "1.0.0", @@ -9626,14 +9862,6 @@ "is-descriptor": "^0.1.0" } }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "^0.1.0" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -9732,11 +9960,11 @@ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" }, "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", "requires": { - "atob": "^2.1.1", + "atob": "^2.1.2", "decode-uri-component": "^0.2.0", "resolve-url": "^0.2.1", "source-map-url": "^0.4.0", @@ -9744,9 +9972,9 @@ } }, "source-map-support": { - "version": "0.5.16", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", - "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -9774,9 +10002,9 @@ } }, "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==" + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" }, "spdx-expression-parse": { "version": "3.0.0", @@ -9807,6 +10035,25 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "requires": { "extend-shallow": "^3.0.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "sprintf-js": { @@ -9946,9 +10193,9 @@ } }, "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" }, "stream-to": { "version": "0.2.2", @@ -9978,22 +10225,42 @@ "strip-ansi": "^3.0.0" } }, - "string.prototype.trimleft": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz", - "integrity": "sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw==", + "string.prototype.trimend": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz", + "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5" + } + }, + "string.prototype.trimleft": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz", + "integrity": "sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5", + "string.prototype.trimstart": "^1.0.0" } }, "string.prototype.trimright": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz", - "integrity": "sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz", + "integrity": "sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg==", "requires": { "define-properties": "^1.1.3", - "function-bind": "^1.1.1" + "es-abstract": "^1.17.5", + "string.prototype.trimend": "^1.0.0" + } + }, + "string.prototype.trimstart": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz", + "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==", + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" } }, "string_decoder": { @@ -10079,21 +10346,22 @@ } }, "style-loader": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.0.1.tgz", - "integrity": "sha512-CnpEkSR1C+REjudiTWCv4+ssP7SCiuaQZJTZDWBRwTJoS90mdqkB8uOGMHKgVeUzpaU7IfLWoyQbvvs5Joj3Xw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz", + "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==", "requires": { - "loader-utils": "^1.2.3", - "schema-utils": "^2.0.1" + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.6" }, "dependencies": { - "schema-utils": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.1.tgz", - "integrity": "sha512-0WXHDs1VDJyo+Zqs9TKLKyD/h7yDpHUhEFsM2CzkICFdoX1av+GBq/J2xRTFfsQO5kBfhZzANf2VcIm84jqDbg==", + "loader-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz", + "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==", "requires": { - "ajv": "^6.10.2", - "ajv-keywords": "^3.4.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" } } } @@ -10159,32 +10427,42 @@ "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==" }, "tar": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", - "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/tar/-/tar-5.0.5.tgz", + "integrity": "sha512-MNIgJddrV2TkuwChwcSNds/5E9VijOiw7kAc1y5hTNJoLDSuIyid2QtLYiCYNnICebpuvjhPQZsXwUL0O3l7OQ==", "requires": { - "block-stream": "*", - "fstream": "^1.0.12", - "inherits": "2" + "chownr": "^1.1.3", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.0", + "mkdirp": "^0.5.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } } }, "tar-fs": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", - "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.1.tgz", + "integrity": "sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA==", "requires": { "chownr": "^1.1.1", - "mkdirp": "^0.5.1", + "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^2.0.0" } }, "tar-stream": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz", - "integrity": "sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.2.tgz", + "integrity": "sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q==", "requires": { - "bl": "^3.0.0", + "bl": "^4.0.1", "end-of-stream": "^1.4.1", "fs-constants": "^1.0.0", "inherits": "^2.0.3", @@ -10192,9 +10470,9 @@ }, "dependencies": { "readable-stream": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", - "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -10236,9 +10514,9 @@ } }, "terser": { - "version": "4.4.2", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.2.tgz", - "integrity": "sha512-Uufrsvhj9O1ikwgITGsZ5EZS6qPokUOkCegS7fYOdGTv+OA90vndUbU6PEjr5ePqHfNUbGyMO7xyIZv2MhsALQ==", + "version": "4.6.13", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.13.tgz", + "integrity": "sha512-wMvqukYgVpQlymbnNbabVZbtM6PN63AzqexpwJL8tbh/mRT9LE5o+ruVduAGL7D6Fpjl+Q+06U5I9Ul82odAhw==", "requires": { "commander": "^2.20.0", "source-map": "~0.6.1", @@ -10273,6 +10551,16 @@ "worker-farm": "^1.7.0" }, "dependencies": { + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -10378,15 +10666,33 @@ "extend-shallow": "^3.0.2", "regex-not": "^1.0.2", "safe-regex": "^1.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + } + }, + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } } }, "to-regex-range": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", - "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" + "is-number": "^7.0.0" } }, "toidentifier": { @@ -10395,19 +10701,12 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=" - } + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, "traverse": { @@ -10438,9 +10737,9 @@ } }, "tslib": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.1.tgz", - "integrity": "sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==" + "version": "1.11.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.11.2.tgz", + "integrity": "sha512-tTSkux6IGPnUGUd1XAZHcpu85MOkIl5zX49pO+jfsie3eP0B6pyhOlLXm3cAC6T7s+euSDDUUV+Acop5WmtkVg==" }, "tty-browserify": { "version": "0.0.0", @@ -10475,9 +10774,9 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" }, "typescript": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.3.tgz", - "integrity": "sha512-N7bceJL1CtRQ2RiG0AQME13ksR7DiuQh/QehubYcghzv20tnh+MQnQIuJddTmsbqYj+dztchykemz0zFzlvdQw==", + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==", "dev": true }, "uglify-js": { @@ -10502,9 +10801,9 @@ } }, "unbzip2-stream": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.3.3.tgz", - "integrity": "sha512-fUlAF7U9Ah1Q6EieQ4x4zLNejrRvDWUYmxXUpN3uziFYCHapjWFaCAnreY9bGgxzaMCFAPPpYNng57CypwJVhg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.2.tgz", + "integrity": "sha512-pZMVAofMrrHX6Ik39hCk470kulCbmZ2SWfQLPmTWqfJV/oUm0gn1CblvHdUu4+54Je6Jq34x8kY6XjTy6dMkOg==", "requires": { "buffer": "^5.2.1", "through": "^2.3.8" @@ -10525,14 +10824,14 @@ } }, "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==" }, "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==" }, "union-value": { "version": "1.0.1", @@ -10745,9 +11044,9 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, "uuid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", - "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==" + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==" }, "validate-npm-package-license": { "version": "3.0.4", @@ -10844,17 +11143,128 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.1.tgz", "integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==" }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "requires": { - "minimist": "^1.2.5" + "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" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "requires": { + "is-plain-object": "^2.0.4" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "requires": { + "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" + } + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } } } @@ -10872,9 +11282,9 @@ }, "dependencies": { "mime": { - "version": "2.4.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz", - "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==" + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.5.tgz", + "integrity": "sha512-3hQhEUF027BuxZjQA3s7rIv/7VCQPa27hN9u9g87sEkWaKwQPuXOkVKtOeiyUrnWqTDiOs8Ed2rwg733mB0R5w==" } } }, diff --git a/package.json b/package.json index e4682616..1e3b295d 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,6 @@ "@babel/core": "^7.5.5", "@babel/preset-env": "^7.5.5", "babel-loader": "^8.0.6", - "chokidar": "^2.1.5", "closure-webpack-plugin": "^2.0.1", "copy-webpack-plugin": "^5.0.4", "cross-spawn": "6.0.5", @@ -56,7 +55,6 @@ "xhr2": "^0.2.0" }, "devDependencies": { - "@types/chokidar": "^2.1.3", "@types/express": "^4.17.0", "@types/node": "^12.7.7", "@types/webpack": "^4.32.1", From 30fbb917cd73f98e55a77816da4ee51d9e83884c Mon Sep 17 00:00:00 2001 From: Dillon Kearns Date: Mon, 11 May 2020 09:37:47 -0700 Subject: [PATCH 73/73] Improve some variable names and add some notes. --- src/Pages/Internal/Platform/Cli.elm | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/src/Pages/Internal/Platform/Cli.elm b/src/Pages/Internal/Platform/Cli.elm index 0ca5a4d6..19ec4f27 100644 --- a/src/Pages/Internal/Platform/Cli.elm +++ b/src/Pages/Internal/Platform/Cli.elm @@ -592,17 +592,22 @@ cliDictKey = staticResponsesInit : Dict String (Maybe String) -> Result (List BuildError) (List ( PagePath pathKey, metadata )) -> Config pathKey userMsg userModel metadata view -> List ( PagePath pathKey, StaticHttp.Request value ) -> StaticResponses -staticResponsesInit staticHttpCache siteMetadata config list = +staticResponsesInit staticHttpCache siteMetadataResult config list = let - foo : StaticHttp.Request (List (Result String { path : List String, content : String })) - foo = - config.generateFiles thing2 + generateFilesRequest : StaticHttp.Request (List (Result String { path : List String, content : String })) + generateFilesRequest = + config.generateFiles siteMetadataWithContent generateFilesStaticRequest = - ( cliDictKey, NotFetched (foo |> StaticHttp.map (\_ -> ())) Dict.empty ) + ( -- we don't want to include the CLI-only StaticHttp responses in the production bundle + -- since that data is only needed to run these functions during the build step + -- in the future, this could be refactored to have a type to represent this more clearly + cliDictKey + , NotFetched (generateFilesRequest |> StaticHttp.map (\_ -> ())) Dict.empty + ) - thing2 = - siteMetadata + siteMetadataWithContent = + siteMetadataResult |> Result.withDefault [] |> List.map (\( pagePath, metadata ) ->