diff --git a/example/src/index.js b/example/src/index.js index 50b1efd..78518b6 100644 --- a/example/src/index.js +++ b/example/src/index.js @@ -5,7 +5,7 @@ import ReportViewer from '../../src'; import '../../src/report-styles.css'; import './index.css'; -import jsonReport from './report5.json'; +import jsonReport from './report6.json'; const App = () => (
diff --git a/example/src/report6.json b/example/src/report6.json new file mode 100644 index 0000000..9b5e11e --- /dev/null +++ b/example/src/report6.json @@ -0,0 +1,5053 @@ +{ + "requestedUrl": "https://blencorp.com/", + "finalUrl": "https://blencorp.com/", + "lighthouseVersion": "6.1.0", + "userAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/83.0.4103.93 Safari/537.36", + "fetchTime": "2020-07-09T22:54:13.633Z", + "environment": { + "networkUserAgent": "Mozilla/5.0 (Linux; Android 7.0; Moto G (4)) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4143.7 Mobile Safari/537.36 Chrome-Lighthouse", + "hostUserAgent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) HeadlessChrome/83.0.4103.93 Safari/537.36", + "benchmarkIndex": 701 + }, + "runWarnings": [], + "configSettings": { + "emulatedFormFactor": "mobile", + "locale": "en-US", + "onlyCategories": [ + "pwa", + "performance", + "accessibility", + "best-practices", + "seo" + ], + "channel": "lr" + }, + "audits": { + "aria-input-field-name": { + "id": "aria-input-field-name", + "title": "ARIA input fields have accessible names", + "description": "When an input field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-input-field-name/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "content-width": { + "id": "content-width", + "title": "Content is sized correctly for the viewport", + "description": "If the width of your app's content doesn't match the width of the viewport, your app might not be optimized for mobile screens. [Learn more](https://web.dev/content-width/).", + "score": 1, + "scoreDisplayMode": "binary" + }, + "speed-index": { + "id": "speed-index", + "title": "Speed Index", + "description": "Speed Index shows how quickly the contents of a page are visibly populated. [Learn more](https://web.dev/speed-index/).", + "score": 0.95, + "scoreDisplayMode": "numeric", + "displayValue": "2.9 s", + "numericValue": 2880.3503529808213 + }, + "diagnostics": { + "id": "diagnostics", + "title": "Diagnostics", + "description": "Collection of useful page vitals.", + "score": null, + "scoreDisplayMode": "informative", + "details": { + "items": [ + { + "totalByteWeight": 736186, + "maxRtt": 0.00019831840647958885, + "mainDocumentTransferSize": 4588, + "numTasks": 733, + "numTasksOver10ms": 12, + "maxServerLatency": null, + "numFonts": 3, + "numScripts": 18, + "numTasksOver500ms": 0, + "numRequests": 45, + "rtt": 0.00019831840647958885, + "numTasksOver25ms": 7, + "throughput": 47780185962.29611, + "totalTaskTime": 654.3159999999979, + "numTasksOver100ms": 1, + "numTasksOver50ms": 2, + "numStylesheets": 7 + } + ], + "type": "debugdata" + } + }, + "is-on-https": { + "id": "is-on-https", + "title": "Uses HTTPS", + "description": "All sites should be protected with HTTPS, even ones that don't handle sensitive data. This includes avoiding [mixed content](https://developers.google.com/web/fundamentals/security/prevent-mixed-content/what-is-mixed-content), where some resources are loaded over HTTP despite the initial request being servedover HTTPS. HTTPS prevents intruders from tampering with or passively listening in on the communications between your app and your users, and is a prerequisite for HTTP/2 and many new web platform APIs. [Learn more](https://web.dev/is-on-https/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "items": [], + "type": "table", + "headings": [] + } + }, + "main-thread-tasks": { + "id": "main-thread-tasks", + "title": "Tasks", + "description": "Lists the toplevel main thread tasks that executed during page load.", + "score": null, + "scoreDisplayMode": "informative", + "details": { + "headings": [ + { + "itemType": "ms", + "key": "startTime", + "text": "Start Time", + "granularity": 1 + }, + { + "key": "duration", + "text": "End Time", + "itemType": "ms", + "granularity": 1 + } + ], + "type": "table", + "items": [ + { + "startTime": 128.49, + "duration": 9.422 + }, + { + "duration": 5.389, + "startTime": 141.051 + }, + { + "duration": 5.951, + "startTime": 173.3 + }, + { + "duration": 77.784, + "startTime": 267.461 + }, + { + "startTime": 345.274, + "duration": 41.413 + }, + { + "startTime": 390.311, + "duration": 24.253 + }, + { + "startTime": 420.976, + "duration": 6.996 + }, + { + "duration": 16.582, + "startTime": 429.389 + }, + { + "duration": 17.315, + "startTime": 460.369 + }, + { + "duration": 19.729, + "startTime": 478.753 + }, + { + "duration": 18.328, + "startTime": 501.893 + }, + { + "duration": 107.261, + "startTime": 523.167 + }, + { + "startTime": 641.826, + "duration": 35.182 + }, + { + "startTime": 677.457, + "duration": 8.42 + }, + { + "startTime": 688.682, + "duration": 40.34 + }, + { + "startTime": 731.84, + "duration": 30.82 + }, + { + "startTime": 772.986, + "duration": 7.328 + }, + { + "duration": 44.853, + "startTime": 1139.707 + }, + { + "startTime": 1228.246, + "duration": 6.029 + } + ] + } + }, + "bypass": { + "id": "bypass", + "title": "The page contains a heading, skip link, or landmark region", + "description": "Adding ways to bypass repetitive content lets keyboard users navigate the page more efficiently. [Learn more](https://web.dev/bypass/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "items": [], + "headings": [], + "type": "table" + } + }, + "image-size-responsive": { + "id": "image-size-responsive", + "title": "Serves images with low resolution", + "description": "Image natural dimensions should be proportional to the display size and the pixel ratio to maximize image clarity. [Learn more](https://web.dev/serve-responsive-images/).", + "score": 0, + "scoreDisplayMode": "binary", + "details": { + "headings": [ + { + "key": "url", + "itemType": "thumbnail" + }, + { + "text": "URL", + "itemType": "url", + "key": "elidedUrl" + }, + { + "text": "Displayed size", + "itemType": "text", + "key": "displayedSize" + }, + { + "text": "Actual size", + "key": "actualSize", + "itemType": "text" + }, + { + "text": "Expected size", + "key": "expectedSize", + "itemType": "text" + } + ], + "type": "table", + "items": [ + { + "expectedPixels": 40260, + "actualPixels": 5800, + "expectedSize": "305 x 132", + "elidedUrl": "https://blencorp.com/assets/img/logo.png", + "displayedSize": "116 x 50", + "actualSize": "116 x 50", + "url": "https://blencorp.com/assets/img/logo.png" + } + ] + } + }, + "uses-webp-images": { + "id": "uses-webp-images", + "title": "Serve images in next-gen formats", + "description": "Image formats like JPEG 2000, JPEG XR, and WebP often provide better compression than PNG or JPEG, which means faster downloads and less data consumption. [Learn more](https://web.dev/uses-webp-images/).", + "score": 0.88, + "scoreDisplayMode": "numeric", + "displayValue": "Potential savings of 48 KiB", + "details": { + "overallSavingsMs": 140, + "overallSavingsBytes": 48831, + "items": [ + { + "fromProtocol": true, + "wastedBytes": 18164, + "totalBytes": 34092, + "url": "https://blencorp.com/assets/img/banners/banner-abc7.png", + "isCrossOrigin": false + }, + { + "fromProtocol": true, + "isCrossOrigin": false, + "url": "https://blencorp.com/assets/img/project/portfolio-eleat.png", + "wastedBytes": 16214, + "totalBytes": 25798 + }, + { + "url": "https://blencorp.com/assets/img/project/portfolio-cdcnpin.png", + "fromProtocol": true, + "totalBytes": 16243, + "isCrossOrigin": false, + "wastedBytes": 14453 + } + ], + "headings": [ + { + "valueType": "thumbnail", + "key": "url" + }, + { + "label": "URL", + "valueType": "url", + "key": "url" + }, + { + "label": "Resource Size", + "key": "totalBytes", + "valueType": "bytes" + }, + { + "label": "Potential Savings", + "key": "wastedBytes", + "valueType": "bytes" + } + ], + "type": "opportunity" + }, + "warnings": [], + "numericValue": 140 + }, + "apple-touch-icon": { + "id": "apple-touch-icon", + "title": "Does not provide a valid `apple-touch-icon`", + "description": "For ideal appearance on iOS when users add a progressive web app to the home screen, define an `apple-touch-icon`. It must point to a non-transparent 192px (or 180px) square PNG. [Learn More](https://web.dev/apple-touch-icon/).", + "score": 0, + "scoreDisplayMode": "binary", + "warnings": [] + }, + "first-contentful-paint": { + "id": "first-contentful-paint", + "title": "First Contentful Paint", + "description": "First Contentful Paint marks the time at which the first text or image is painted. [Learn more](https://web.dev/first-contentful-paint/).", + "score": 0.89, + "scoreDisplayMode": "numeric", + "displayValue": "2.4 s", + "numericValue": 2400 + }, + "object-alt": { + "id": "object-alt", + "title": "`` elements have `[alt]` text", + "description": "Screen readers cannot translate non-text content. Adding alt text to `` elements helps screen readers convey meaning to users. [Learn more](https://web.dev/object-alt/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "robots-txt": { + "id": "robots-txt", + "title": "robots.txt is valid", + "description": "If your robots.txt file is malformed, crawlers may not be able to understand how you want your website to be crawled or indexed. [Learn more](https://web.dev/robots-txt/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "pwa-each-page-has-url": { + "id": "pwa-each-page-has-url", + "title": "Each page has a URL", + "description": "Ensure individual pages are deep linkable via URL and that URLs are unique for the purpose of shareability on social media. [Learn more](https://web.dev/pwa-each-page-has-url/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "layout-shift-elements": { + "id": "layout-shift-elements", + "title": "Avoid large layout shifts", + "description": "These DOM elements contribute most to the CLS of the page.", + "score": null, + "scoreDisplayMode": "notApplicable", + "details": { + "items": [], + "type": "table", + "headings": [] + } + }, + "crawlable-anchors": { + "id": "crawlable-anchors", + "title": "Links are not crawlable", + "description": "Search engines may use `href` attributes on links to crawl websites. Ensure that the `href` attribute of anchor elements links to an appropriate destination, so more pages of the site can be discovered. [Learn More](https://support.google.com/webmasters/answer/9112205)", + "score": 0, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "items": [ + { + "node": { + "snippet": "", + "type": "node", + "nodeLabel": "Large button", + "selector": "div.carousel-caption > div.row > div.col-md-6 > a.btn", + "path": "1,HTML,1,BODY,2,HEADER,3,DIV,0,DIV,1,DIV,0,DIV,1,DIV,1,A" + } + }, + { + "node": { + "snippet": "", + "nodeLabel": "Read how we're helping", + "type": "node", + "selector": "div.carousel-caption > div.row > div.col-md-6 > a.btn", + "path": "1,HTML,1,BODY,2,HEADER,3,DIV,1,DIV,1,DIV,0,DIV,0,DIV,1,A" + } + }, + { + "node": { + "type": "node", + "selector": "div.carousel-caption > div.row > div.col-md-8 > a.btn", + "snippet": "", + "path": "1,HTML,1,BODY,2,HEADER,3,DIV,2,DIV,1,DIV,0,DIV,0,DIV,1,A", + "nodeLabel": "Large button" + } + } + ], + "headings": [ + { + "text": "Uncrawlable Link", + "key": "node", + "itemType": "node" + } + ] + } + }, + "performance-budget": { + "id": "performance-budget", + "title": "Performance budget", + "description": "Keep the quantity and size of network requests under the targets set by the provided performance budget. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/budgets).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "largest-contentful-paint": { + "id": "largest-contentful-paint", + "title": "Largest Contentful Paint", + "description": "Largest Contentful Paint marks the time at which the largest text or image is painted. [Learn More](https://web.dev/lighthouse-largest-contentful-paint/)", + "score": 0.58, + "scoreDisplayMode": "numeric", + "displayValue": "3.7 s", + "numericValue": 3714.5 + }, + "visual-order-follows-dom": { + "id": "visual-order-follows-dom", + "title": "Visual order on the page follows DOM order", + "description": "DOM order matches the visual order, improving navigation for assistive technology. [Learn more](https://web.dev/visual-order-follows-dom/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "aria-valid-attr": { + "id": "aria-valid-attr", + "title": "`[aria-*]` attributes are valid and not misspelled", + "description": "Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid names. [Learn more](https://web.dev/aria-valid-attr/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "efficient-animated-content": { + "id": "efficient-animated-content", + "title": "Use video formats for animated content", + "description": "Large GIFs are inefficient for delivering animated content. Consider using MPEG4/WebM videos for animations and PNG/WebP for static images instead of GIF to save network bytes. [Learn more](https://web.dev/efficient-animated-content/)", + "score": 1, + "scoreDisplayMode": "numeric", + "details": { + "items": [], + "type": "opportunity", + "overallSavingsMs": 0, + "overallSavingsBytes": 0, + "headings": [] + }, + "numericValue": 0 + }, + "charset": { + "id": "charset", + "title": "Properly defines charset", + "description": "A character encoding declaration is required. It can be done with a tag in the first 1024 bytes of the HTML or in the Content-Type HTTP response header. [Learn more](https://web.dev/charset/).", + "score": 1, + "scoreDisplayMode": "binary" + }, + "document-title": { + "id": "document-title", + "title": "Document has a `` element", + "description": "The title gives screen reader users an overview of the page, and search engine users rely on it heavily to determine if a page is relevant to their search. [Learn more](https://web.dev/document-title/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "headings": [], + "type": "table", + "items": [] + } + }, + "uses-long-cache-ttl": { + "id": "uses-long-cache-ttl", + "title": "Serve static assets with an efficient cache policy", + "description": "A long cache lifetime can speed up repeat visits to your page. [Learn more](https://web.dev/uses-long-cache-ttl/).", + "score": 0.16, + "scoreDisplayMode": "numeric", + "displayValue": "27 resources found", + "details": { + "type": "table", + "items": [ + { + "wastedBytes": 1004.5583333333334, + "totalBytes": 1013, + "cacheHitProbability": 0.008333333333333333, + "url": "https://v1.addthisedge.com/live/boost/ra-5bce424807b2e74c/_ate.track.config_resp", + "debugData": { + "type": "debugdata", + "public": true, + "max-age": 60, + "s-maxage": "86400" + }, + "cacheLifetimeMs": 60000 + }, + { + "debugData": { + "type": "debugdata", + "max-age": 600, + "public": true + }, + "wastedBytes": 107019.91666666666, + "totalBytes": 116749, + "cacheLifetimeMs": 600000, + "cacheHitProbability": 0.08333333333333333, + "url": "https://s7.addthis.com/js/300/addthis_widget.js" + }, + { + "totalBytes": 34739, + "url": "https://blencorp.com/assets/img/banners/banner-abc7.png", + "debugData": { + "type": "debugdata", + "max-age": 600 + }, + "cacheHitProbability": 0.08333333333333333, + "wastedBytes": 31844.083333333332, + "cacheLifetimeMs": 600000 + }, + { + "totalBytes": 26448, + "wastedBytes": 24244, + "cacheLifetimeMs": 600000, + "debugData": { + "max-age": 600, + "type": "debugdata" + }, + "url": "https://blencorp.com/assets/img/project/portfolio-eleat.png", + "cacheHitProbability": 0.08333333333333333 + }, + { + "cacheHitProbability": 0.08333333333333333, + "debugData": { + "type": "debugdata", + "max-age": 600 + }, + "totalBytes": 16893, + "cacheLifetimeMs": 600000, + "url": "https://blencorp.com/assets/img/project/portfolio-cdcnpin.png", + "wastedBytes": 15485.25 + }, + { + "totalBytes": 14678, + "wastedBytes": 13454.833333333332, + "debugData": { + "max-age": 600, + "type": "debugdata" + }, + "cacheHitProbability": 0.08333333333333333, + "cacheLifetimeMs": 600000, + "url": "https://blencorp.com/assets/fonts/OpenSans-Semibold-webfont.woff" + }, + { + "wastedBytes": 13417.25, + "cacheHitProbability": 0.08333333333333333, + "debugData": { + "max-age": 600, + "type": "debugdata" + }, + "cacheLifetimeMs": 600000, + "url": "https://blencorp.com/assets/fonts/OpenSans-Regular-webfont.woff", + "totalBytes": 14637 + }, + { + "wastedBytes": 6350.666666666666, + "url": "https://blencorp.com/assets/img/project/portfolio-callr.png", + "cacheLifetimeMs": 600000, + "debugData": { + "type": "debugdata", + "max-age": 600 + }, + "totalBytes": 6928, + "cacheHitProbability": 0.08333333333333333 + }, + { + "url": "https://blencorp.com/assets/js/jquery.prettyPhoto.js", + "cacheHitProbability": 0.08333333333333333, + "wastedBytes": 6168.25, + "debugData": { + "max-age": 600, + "type": "debugdata" + }, + "totalBytes": 6729, + "cacheLifetimeMs": 600000 + }, + { + "totalBytes": 5794, + "cacheLifetimeMs": 600000, + "debugData": { + "max-age": 600, + "type": "debugdata" + }, + "cacheHitProbability": 0.08333333333333333, + "url": "https://blencorp.com/assets/js/jquery.isotope.min.js", + "wastedBytes": 5311.166666666666 + }, + { + "url": "https://blencorp.com/assets/css/hoverex-all.css", + "debugData": { + "max-age": 600, + "type": "debugdata" + }, + "wastedBytes": 4697.916666666666, + "cacheLifetimeMs": 600000, + "cacheHitProbability": 0.08333333333333333, + "totalBytes": 5125 + }, + { + "totalBytes": 3786, + "debugData": { + "type": "debugdata", + "max-age": 600 + }, + "cacheLifetimeMs": 600000, + "cacheHitProbability": 0.08333333333333333, + "wastedBytes": 3470.5, + "url": "https://blencorp.com/assets/img/clients/arlingtoncu.png" + }, + { + "totalBytes": 3628, + "debugData": { + "max-age": 600, + "type": "debugdata" + }, + "cacheHitProbability": 0.08333333333333333, + "url": "https://blencorp.com/assets/img/clients/ed.png", + "cacheLifetimeMs": 600000, + "wastedBytes": 3325.6666666666665 + }, + { + "url": "https://blencorp.com/assets/css/prettyPhoto.css", + "totalBytes": 3487, + "cacheHitProbability": 0.08333333333333333, + "debugData": { + "max-age": 600, + "type": "debugdata" + }, + "wastedBytes": 3196.4166666666665, + "cacheLifetimeMs": 600000 + }, + { + "totalBytes": 3215, + "url": "https://blencorp.com/css/style.css", + "debugData": { + "max-age": 600, + "type": "debugdata" + }, + "cacheHitProbability": 0.08333333333333333, + "wastedBytes": 2947.083333333333, + "cacheLifetimeMs": 600000 + }, + { + "cacheLifetimeMs": 600000, + "url": "https://blencorp.com/assets/js/jquery.hoverdir.js", + "cacheHitProbability": 0.08333333333333333, + "wastedBytes": 2400.75, + "totalBytes": 2619, + "debugData": { + "max-age": 600, + "type": "debugdata" + } + }, + { + "url": "https://blencorp.com/assets/img/clients/bio.png", + "wastedBytes": 2097.333333333333, + "cacheHitProbability": 0.08333333333333333, + "debugData": { + "max-age": 600, + "type": "debugdata" + }, + "cacheLifetimeMs": 600000, + "totalBytes": 2288 + }, + { + "url": "https://blencorp.com/assets/js/jquery.hoverex.min.js", + "totalBytes": 2114, + "cacheHitProbability": 0.08333333333333333, + "wastedBytes": 1937.8333333333333, + "cacheLifetimeMs": 600000, + "debugData": { + "type": "debugdata", + "max-age": 600 + } + }, + { + "totalBytes": 1999, + "wastedBytes": 1832.4166666666665, + "debugData": { + "max-age": 600, + "type": "debugdata" + }, + "cacheLifetimeMs": 600000, + "url": "https://blencorp.com/assets/img/clients/geico.png", + "cacheHitProbability": 0.08333333333333333 + }, + { + "debugData": { + "type": "debugdata", + "max-age": 600 + }, + "wastedBytes": 1821.4166666666665, + "cacheLifetimeMs": 600000, + "totalBytes": 1987, + "url": "https://blencorp.com/assets/img/logo.png", + "cacheHitProbability": 0.08333333333333333 + }, + { + "totalBytes": 1547, + "url": "https://blencorp.com/assets/css/syntax.css", + "cacheLifetimeMs": 600000, + "cacheHitProbability": 0.08333333333333333, + "wastedBytes": 1418.0833333333333, + "debugData": { + "type": "debugdata", + "max-age": 600 + } + }, + { + "totalBytes": 1547, + "url": "https://blencorp.com/assets/js/carousel.js", + "debugData": { + "max-age": 600, + "type": "debugdata" + }, + "cacheLifetimeMs": 600000, + "wastedBytes": 1418.0833333333333, + "cacheHitProbability": 0.08333333333333333 + }, + { + "url": "https://blencorp.com/assets/js/custom.js", + "wastedBytes": 1032.1666666666665, + "totalBytes": 1126, + "cacheLifetimeMs": 600000, + "cacheHitProbability": 0.08333333333333333, + "debugData": { + "max-age": 600, + "type": "debugdata" + } + }, + { + "cacheLifetimeMs": 1200000, + "wastedBytes": 119954.01666666666, + "cacheHitProbability": 0.11666666666666667, + "debugData": { + "public": true, + "max-age": 1200, + "type": "debugdata" + }, + "url": "https://connect.facebook.net/signals/config/179141459671554?v=2.9.22&r=stable", + "totalBytes": 135797 + }, + { + "cacheHitProbability": 0.11666666666666667, + "debugData": { + "type": "debugdata", + "max-age": 1200, + "public": true + }, + "url": "https://connect.facebook.net/en_US/fbevents.js", + "cacheLifetimeMs": 1200000, + "totalBytes": 35449, + "wastedBytes": 31313.283333333333 + }, + { + "url": "https://www.google-analytics.com/analytics.js", + "wastedBytes": 14313.75, + "cacheLifetimeMs": 7200000, + "totalBytes": 19085, + "cacheHitProbability": 0.25, + "debugData": { + "type": "debugdata", + "public": true, + "max-age": 7200 + } + }, + { + "totalBytes": 1420, + "wastedBytes": 663.1367129629629, + "debugData": { + "max-age": 57457, + "type": "debugdata" + }, + "cacheHitProbability": 0.5330023148148149, + "url": "https://z.moatads.com/addthismoatframe568911941483/moatframe.js", + "cacheLifetimeMs": 57457000 + } + ], + "headings": [ + { + "text": "URL", + "itemType": "url", + "key": "url" + }, + { + "key": "cacheLifetimeMs", + "text": "Cache TTL", + "displayUnit": "duration", + "itemType": "ms" + }, + { + "text": "Transfer Size", + "displayUnit": "kb", + "granularity": 1, + "itemType": "bytes", + "key": "totalBytes" + } + ], + "summary": { + "wastedBytes": 422139.8283796295 + } + }, + "numericValue": 422139.8283796295 + }, + "aria-hidden-body": { + "id": "aria-hidden-body", + "title": "`[aria-hidden=\"true\"]` is not present on the document `<body>`", + "description": "Assistive technologies, like screen readers, work inconsistently when `aria-hidden=\"true\"` is set on the document `<body>`. [Learn more](https://web.dev/aria-hidden-body/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [], + "items": [] + } + }, + "resource-summary": { + "id": "resource-summary", + "title": "Keep request counts low and transfer sizes small", + "description": "To set budgets for the quantity and size of page resources, add a budget.json file. [Learn more](https://web.dev/use-lighthouse-for-performance-budgets/).", + "score": null, + "scoreDisplayMode": "informative", + "displayValue": "45 requests • 719 KiB", + "details": { + "headings": [ + { + "key": "label", + "text": "Resource Type", + "itemType": "text" + }, + { + "itemType": "numeric", + "text": "Requests", + "key": "requestCount" + }, + { + "key": "transferSize", + "itemType": "bytes", + "text": "Transfer Size" + } + ], + "type": "table", + "items": [ + { + "transferSize": 736186, + "resourceType": "total", + "requestCount": 45, + "label": "Total" + }, + { + "transferSize": 468491, + "resourceType": "script", + "label": "Script", + "requestCount": 18 + }, + { + "requestCount": 12, + "label": "Image", + "resourceType": "image", + "transferSize": 100461 + }, + { + "transferSize": 95230, + "requestCount": 3, + "resourceType": "font", + "label": "Font" + }, + { + "resourceType": "stylesheet", + "transferSize": 39976, + "label": "Stylesheet", + "requestCount": 7 + }, + { + "resourceType": "document", + "requestCount": 3, + "transferSize": 30461, + "label": "Document" + }, + { + "requestCount": 2, + "label": "Other", + "transferSize": 1567, + "resourceType": "other" + }, + { + "label": "Media", + "requestCount": 0, + "transferSize": 0, + "resourceType": "media" + }, + { + "requestCount": 23, + "transferSize": 570284, + "label": "Third-party", + "resourceType": "third-party" + } + ] + } + }, + "first-cpu-idle": { + "id": "first-cpu-idle", + "title": "First CPU Idle", + "description": "First CPU Idle marks the first time at which the page's main thread is quiet enough to handle input. [Learn more](https://web.dev/first-cpu-idle/).", + "score": 0.52, + "scoreDisplayMode": "numeric", + "displayValue": "6.4 s", + "numericValue": 6359 + }, + "pwa-cross-browser": { + "id": "pwa-cross-browser", + "title": "Site works cross-browser", + "description": "To reach the most number of users, sites should work across every major browser. [Learn more](https://web.dev/pwa-cross-browser/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "screenshot-thumbnails": { + "id": "screenshot-thumbnails", + "title": "Screenshot Thumbnails", + "description": "This is what the load of your site looked like.", + "score": null, + "scoreDisplayMode": "informative", + "details": { + "type": "filmstrip", + "scale": 3000, + "items": [ + { + "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRQBAwQEBQQFCQUFCRQNCw0UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFP/AABEIANUAeAMBEQACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AP1ToAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgD//Z", + "timestamp": 1076282305555.0001, + "timing": 300 + }, + { + "timestamp": 1076282605555.0001, + "timing": 600, + "data": "data:image/jpeg;base64,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" + }, + { + "timing": 900, + "data": "data:image/jpeg;base64,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", + "timestamp": 1076282905555.0001 + }, + { + "timestamp": 1076283205555.0001, + "data": "data:image/jpeg;base64,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", + "timing": 1200 + }, + { + "timestamp": 1076283505555.0001, + "data": "data:image/jpeg;base64,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", + "timing": 1500 + }, + { + "data": "data:image/jpeg;base64,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", + "timing": 1800, + "timestamp": 1076283805555.0001 + }, + { + "timestamp": 1076284105555.0001, + "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRQBAwQEBQQFCQUFCRQNCw0UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFP/AABEIANUAeAMBEQACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AOd0Twffa94f8QazbtELTRIoZbkOxDsJZViQIMcncwJzjgV+eQpucZSX2f8Ahj+r6uKpUa1OjLeo7R+UXJ3+4wmYBGORwCeT6Vlrex16PR9Tq/ih4Cm+F/jrUfDNzdpe3FksJknjQopZ4UkIAJPA34z3xnAror0XQqOl2t+Op52W5hHNcJHGQjZScvwfL+SOWrnPSas7MQkA8nHagV9Li0k77DCmAUAFABQAUAFABQG4U7Mm67iUh9bHpfwy825+GPxXs4EM0j6VaT+XGCz7I72Eu2B/CqkknoAOa7sOm6dTl6L9Uz5zNYJ1sG5Oyc5Le29OS+/t5nU/D/xTYfFyy1vwrr/hbQkvJNPur2w1zTdPisXsJYYnlBnMSqPJOMEnuQCDkY76VVY793UitOq6ep8rjcNU4YcMXhK0pJytKMnfmT162tb5ncfEuw0ay+P3xT8W63pNv4jtfDlhYTQ6RO/yzyyw2sSs64IaNA5LAjHK5xWlSlBVq1apqoKP5I87BYrEU8pwWBw9TkdeU05bNJSe3m7/AIehnyweHvF/wxit/Flt4S0bxZ4hurc+HYvC9jGl3CHkC/vzE2FhOcFX+YAPkGQALrUUK0Ixr2TdrW6evqVg5V8Hi6lXL3UdGkpc7nL3XZdLxve/ZfOxzPjD4p6N8OfGz+GNI+H/AIavNE8PTvp10dV02Ga61N4mMckkkxUlSSpK4HGeQRhRy1sVHCz9hCCaTs77nqYTKMRnGHWYYjFTjVmrx5XpBdFbr+G/e5wvxw8P6T4c+I17FoMDWuiXVva39nA7lzHHNBHJtyeeCxAzk4xXBiowhWvFaNbH12TVq+IwcPrcrzjKUZPvyycU/wADhK4j2woAKACgAoAKADJHI69s0Bp1PTtI8RW0Wj2ccmteFImWBFaGbQYpJF+UZDOdNclvVi7c/wATdT6MZU1FXa+S/wCAfJVcNV9q3CFbfpNJfd7XT7jzDLMctjPsMCvPe7Pq4aRsze8C+O9U+HniBNW0tYnk8t4Jra6j8yC5hcYeKVMjch4yPUA9QDWtKrKlLmSvfdXVmcWOwVLH0lSqtqzumnaUbPRrzOx1L43W1loOqad4N8Had4NbWbdrXVbq2kkuJJ4mBDRR+aSIYzuOVUf3cEbQa6vrfLHlpQUL72a/VnkLJfbVIVcwrOs4fCmkknpZ+6lzPTdiab+0N4i0260W7+xadd31jp8mkXdxeWol/tSwYqUt7kE/ME2kBhgkEA55LJY2rHlatdJp7aq+lxVuHsJW9pGUnaT5o2duSXVxfm7vt5FW8+KHh+HUNDn0H4f6doCWF9BfyvHdTz3E7xtuKCR2O2M4Hy7Tg81LxEYyXs6aXXfX8zdZXXqQqwxWKlPnjKO0UlzLeySTfqch4w8RN4v8Xa5rj2xtW1S+nvTCrb/K82QuVBwM43YzgZrnq1HUqOpbfzX+Z6WBwkcDhoYaEvhilfv5lnxv4xk8a6vbX0lp9lMNja2IjD7siGFIg2cDqEzjtmqrVpVpKTXTy/zNMJhoYSEqcZNpuT185OX6mBv/ANlqw1/pr/M6g3/7LUa/01/mAb/9lqNf6a/zAN/+y1Gv9Nf5gG//AGWo1/pr/MA3/wCy1Gv9Nf5gG/8A2Wo1/pr/ADAN/wDstRr/AE1/mAb/APZajX+mv8wPG8e5r+s9Ox/nzqGPc0adg1DHuaNOwahj3NGnYNQx7mjTsGoY9zRp2DUMe5o07BqGPc0adg1DHuaNOwahj3NGnYNQx7mjTsGoY9zRp2DUMe5o07BqGPc0adg1DHuaNOwahQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFAATgZ98D3PpSel79AWux9a/s+/sBa78Q7K28QeObubwn4bljS5hijMbXV3ERu3ZJKwjBBy4J/2cc18zjc8p0X7PD2nLzWi/zPZw+WyqR567suh6WPBv7GXw0mbSdY1qPxDexffu3ub293Z7FrRRFxnGAOMc15V85xa9pBWT7WX4Xuejy5bR0k7v0b/IzfE3w2/ZM+JXhrWW8Fa3/ZOuWVlPcW8EF5c2z3MiRsyoqXikPkjogzSdfOcH71RNr7/yEqWXYj3YWTfy/M+I/iV8OPGXw8sl1dLMX/h2Ut5d95DLtx1DDPOPUZHc4ziumhnU62jlZmVbLo0ldK6PMf8AhOdQ2b9tts/vbDj+ddqx9e9upyfV6fYX/hNtS/552/8A37P+NP6/XH9XprcQeOdQPRLY/wDbM/40fX6wfVqfYUeN9RJxstycZwIz/jR9er+gfVqexYn8Ta3a21vcTWSRQXCl4ZXhYLIAdrFTnkBgR9RU/wBoVtr3H9VgtbFb/hONR2htlttPfyz/AI1X1+sL6vTFPjfUVxmO3GemYzz+tL+0Kwvq9Mu6P4ovtQ1W2t5liSNyckIQeFJ9faujD4ytUqxhIyq4enGEpo66vfPLCgD2r/gnXqXwx+J3xni/4S3VrSw1KyVTpWgavEvl6pO+5flZsoxTKlYz87MQQCEavhMbnccRh/ZUYuLlu7n1OGyyVOt7SrJNH6JftFfAHxV8dpbeys/iXL4R8NxxMk2lWenNJ9rZuG89xcJvXGAEK4HPUnI8XAY2GClzOlzS73tb8GelisNLEpRVTlSPnpf+CVqKoA+KHQY/5AP/AN017z4kd7ypf+TafkeR/Y8dvaf195i+N/8AgmP/AMI94L1/VE+JX2h7LTri5WL+wwu/ZGzbd32k4ztxnFZV+IOenKmqNrrv/wAA0p5RGE1JVNi7p/2jRZ/ifLrvjWy8SfD/AFizvF0Hw09zFP8AYknJNpbraCVjGIVeMANGgiETKMAgV8rJqSjZWZ76i1fmeh5N8W/h38OPCHxostYK+BoPCGu+PvCstnawPZbINNjguF1JJYQcwQb2g80SKqMdu7JXj0aVadSKUXqkzhq04wleS0Z82fD3xXovxA+NOnnxjaeHtA0fVbW80bfaaXbWllpzXFtNDb3DgKq/uJZo5TNIxk/dBi5Kg16c4unSbjdtO/rbU4ItSnaS0Penk+CVhb+G7Y/8IZqF1D4o0jwVqbwpEgfT7G+ne41hSrEBbuD7CrzD7wE4DHLVyRjWd7Po39/T5HW1DRsoWV74O0h9G1TxlZ/C278aQeHfE889topsZdNuGjhV9JWVLVvsxuDKJ0VYj5rIIQ3zEZim5uG7tePr5/JCSindnn9rrPgnX/g1qE+p3Vk3xMbSbuTToJbK1i0+BG1BnuVRQyxw3LQuxiXy1CrHiLMrw7NFGUazte2n5ENr2S7mp8ANU+HOr+BNL03xhaeH7S+tr240Jr27hhjuGh1KexRbxmPzSfZIV1SQSuCsTG35GVFaV3U57xem/wDXr+hNJRcbs9M+FnhT4YeG/HThvEngHX9BttT0bQdTsNQuNHhgkgjsYTe6nHc3sUzTRPcNcKY7bZIxMZ85QoxyTqVZpJ6df+AbqNO9jzLw/b6VqfwBt7l5/B2gX1haxhbJP7Jv9U1uZ712abzVb7dZyJHIqlGUxskPBXcAfXwEn9fjrpd9+zOLExX1WT2ZwdfeHywUAc14I/Yr+JPiPVdet7+TQ/AtxoupnQvM8VatHYi71XarrYWx582dlZWXb8pVgd+GBP4pdx1R+kNXVmbGjyarZxXOmayr22uaVcy6bqNuZAxiuYXKSKSpIJyOoJHPFfp2VVIYnDpzirx0PjcdCeHrOKdupS1LxnFpt7LbSC4LRgEshGDkA+vvXRXxNGjP2cqf5f5GNOFWpHmUz7L+A2t/DL4OfC/Wdc8daPq0nii+sriFr6FUf+zreaMR+XGrS4Mh3HLbc5bYOM5+GzDHTx1X2dKPKvl/kfS4XDLDx9pUdz5c+JPx6h8SatdxeHJ9X0bQd7LAreULqVc8NI6/dY+inAzjLda7sPg8NTiue7Zy1sViJ3ULWPQvjhfeCvFX7PnhDWbc662uNLbPdtcRwCEMYXEuwq27lwuAe2e9cWE5IYqUFsdeI554eMup8wkaWer3n/fKf417f+z+Z5H7wUjTG6tdnv8AcT/GtG6Hn+H+ZLU12F/4luQd95nOQQqcH86X7jd3/r5hepfoN2aWAAGvMDp8q8cY459hRehvqDdVaKwFNLbOWuzkYPypn+f+cmh+ye9x/vH2FI0xlKl7sg84Kp/jS/cb6/18xfvE9LGp4aawGs26xNdFznaJAu3hT15+tdeF9k60Wr31X4GVbn9nJO1jua+lPHCgDL1z9r+0+JT6mnxK+HGk+KLKXVjrdjBp19caabOb7LbWi2+5S+618mzgUx/LIdpIlU4I/FLX0R+kFTwbposdJe4GnwaSuozPqCWFo7tDbxy4aNELs7lQhTG9mbHUk5r9NyWjKjhryWrbf9fcfH5nVjUxDs9kfRfwO8C6B4y+HGp2raGh13V/GulaBPrV99mnht7V7WeU7VltneJDtKuYpEdm8tt4WMxt89nNSSxstdEl+SPTy2EXQWmtyv8AFx/B/jPxBp9hFLqNj4X0eO4v/Eljf6jLbT2cIkhgtbh5xYSFlea7jjMMdvK6kMSdpVl8TCfu4Of2un4npYhKbUOhxXj34SeAPh54a+IlpNpmta1r1jq+jQ6NqcGq+QIrfUdOuruJJIHtMyFTGofKxPJtXb9nw6v6VPEVJuMr2VtThnRiotbnuvjD9nPRBPovgKSXVofD8fxAsPCsV0WjE0lvIt8zuX8vaZAIYSCFA+fkfMMeXRqTlVlVl2b+7Q7qsEqUaaZ866B4E+E2o+ErfxZrs3ijw/4b1nxBJ4d0ycXMd4dI8qzgle5uzHbD7Rue5QiCNYSEjkw7kA16k69SEuSW5wKjTlG51Ft8MfBHhP4deNreHT9X1PxUPh1pniJ9S1IQGxje8utPlAtovL8yNo0nEXmeY2/98NqDg5KrOdWN9FdmjpqEGVfhB+zR4Z8e6B8OrXU73WV8RfET+1xpd/YSxrY6SbJTgXCNEzSs7KSwSSPZGyN82cVtWrzjN22RlSpKaV+pV+IHwQ8DeEvhtDPaSeIJvFEvgPSPGf2ua8hNmslze2trLa+SLcNgCV3V/N4yFKnBZlGvUlU12vYqVJRj8rl/4AfBiPxH8KtRbWPDmkXd741nudO8NXuo6xbWF5Fc2ttKyC0jnljMxnvJrKE+WH+VZlbaStGIquNSNnov1CjTvH3upueEfCngnUvgPoOk32heGrzX7/wZrOswww2d2niCS6gvNRVbj7UGS2W3iit9zLI7O3kFVjJdDWE6jjVbT00NIUlyWa7nP/Gaz0D4ReNZPhr4e8KaBf6K9lY39j4zmt7htRvlltIp3uYpfO8sRuxkQKqbAuRjeC9eplbdTEQm5bt6fJnJjUoU5xjH5nF2ttLe3MNvAu+aVxGi5AyxOAMngc9zxX3TaWrPmEr6EIOQOnTtRvqgemhv/sXfCT4bab8d9Am+K/kapoeW8mO9KJpyXO0+WbpXB8yInjB2jdt3ZTcD+f4nIZ0KEqsKnNJfZt/wT6ylmkatTkcbJ+Z9F/tcfsc638NPEN/4o8KWc+t+EL6Sa7aKwtCTpC8uUcJn9yq8rJgABSGxgFvZyrNqdeHsKjUZJW9f+D5HmY/ASpP2kHdM8+/ZF+Evjb4peMfFdlod8DoENtFcXNhcXjJbPOSERzHypcKsoDYyASM8mvMz+HLNT/mtb5LX8TvymV04djgvjJ4v+Ltj8aNfhHjrxGuqaTeXGlxNb+ILovCA6pJHEwYEK7QoSBwxUccCujDZc5UYy0s0nqc1bHKNVq2p7n8EP2UPjtJZ6z478YeJtU8MWF3AW1GDWdcntXvYYo2TffKzf6qNNwCS8bS3RfveBi6kFahS959z1sNB2dWpojwP4x/Ff4h+M/GUctn4z1yXS9JuY5tMJ1e4Ajmj3BbhAWGx/ncKwAIU4GMkV72Gyeoqa5lq0eXicwhOVo7I4Xwjr/xH+H8U8XhfxXrHhuK4dXnTSNWmtBMy5wX8tl3YyevTJxXbPK6k9ZJHMsZGKshbzxT8SJ/CX/CN3HjHWf8AhGEhEJ0h9Zn+xCJTuVPJLeWFBAIG3qAewrJ5W6f7ySWnU0+u8/umZpfi/wAY6B4cv/D2l+M7/StBvxILvS7HWZYbW58xNknmRKwR9yfKdwOQADWFTCU6jfM19/8AwC4YiULcvQqX+s+ItUhEV54mmuohYx6WI59TeRRZxuskdvhmI8pXRGWP7oKqQMgGmsNBdY733E68pb+gyHVdft20RovEksbaG2/SimpOpsG80y7oMH90fMJfKY+b5uvNDwsHfVa+Ye3enka6fEb4gR+Hbnw+vxE1oeH7lZkm0j+35/skqyszShod+w7mdmORyWJOSTUvCU27tx+8pYmSVrGhonxB8bzaZaeGLnxxqtz4WjXYNC/tqZ7PavzIv2ffsIVlVgMcEAjpXXhMLTp4iE01fXr5Mxr15SpSizRIDDBAIPUEZBr6k8UAPUkn1JzQAY98UnbW4j6g/Z8/bx8XfCW3sNC8RofFnhO3jjt4YHKpdWUS8ARSY/eAKT8kn9xVDIM185jskoYr36L5JHsYbMqtD3amsT6U8Aftu/s+2Wsapqltpl14N1LU9pvbiTRwGuipYgubYybmy7cnnmvnK2UZk7Ra5ktte561LMMJH3vhbMzR/ir8IvE/j+5m+Eunx2vi2ea61nUPEMukCSV1Ku0wja4+dWYkYVQq84yK+F42xWdZVgKMlV9nHm5dFF6KEpWs4u9+Xq1qe9kVPL8ZiKloc75e7Vm2km/vLnxKOo/E/wAOJo/ifxBfXmk3TrNHaRwJb7sIrq1wIJQVQBsjJb7jNtyoz+O4bijPKdWmqWKlGdRNxvCk7bu8tHZWtfZ79j7ytlOArwkpUY2i9bTlrstNd77+qPMn/ZY+G1vgyRXCxvareQGNJW3xsUUKcXHD72cEf7HXBr31x1xBP31mMnHk59KdG9m0uWyj8Su18rnmf6u5XdL6ql71n71T/MSb9lL4fliLWKWf93HJl/OURA72k8z998uxI2fvnjpkGrqcY8TKbpwzCV7X/h0bWT9675dLRT+at1RnHI8nfK/qy1/vz7evcr+NP2Uvhno2n3sd0t+IEiu2nlt45A0UcLTBiC1wV3MIHK5GOueldVDi/Pp4qGHxGNlKLck/3dJL3eZbqN73j+ZEsiy+FJ1aeHimkvtVOqj/AHvNnzF+0N8H/h34E8GaBrHhBtbNzqttLdSW+sqoe3VZ/JQHY+NxKSnHPGwg84r7jDZpifrdCEqzkptaOMNvkrnh18FQ9hUlGko8vVOX6uxznx9/Z+0/4S+KvE0Wjaxca54c0+G4W2vpVAkF3bXsVpdW0wCgK6NJ5gAJJjlgbjfivuqWIU0lJa6fkfNzoWk7bambe/s0eIbO2vpBruhz3Glw3J1ezR7lZdLuYbG4vWtJt8CqZjHaXSjy2dA8DKzrlcpYqHb8iPYSsidv2UfG1v4p8P6BeXGladf67YaXfWP2y5eNZDfziGG3JKZEysJiyY6W8u0sQA1/WadnpsH1eZxl14atfCXjewsbTxJpXidWhMr3OkpdJHExDjy3W5hhdXG3JBXow59PTy6SqVYtLq/yZyYmPLCaOnr7A+fCgAoAKACgDpfh941uPAviFL+IboZEMM6AAlkJB4z0IIB/CvhuM+HXxNlE8HT0qJqUG+klp9zTcfK/N0Pp+HM2jk2YQxFVN09pJdmn+Kdn959J+GtW0zxY3iPUtU8e3fhTw/pui21/FqFvYrdJ5kt2IcPDsZ36hdqlSDyeARX4dwbwdh6eHq0s3y9Tqqbj711ZKKeklJR3b162P0TiTPJTq03gMTywcE7rq+Z7rdO1lZ2elzpfiP8ADjU/B1j4m1G38X32oppd99stdK+1aeL270aHy1up1UJuEnmPJtfy9qi3k3A7k3fodDhTh+pNQnlsFdNXtOylfRt821ranylXOMxipSWMbs9NVf7jN8eXfh3wzf8AxH02y1vxhPeeFbK2niuJb6waK4knkgiUFRZA4U3AJAOSEIGM5GtPgzJUqdSWAp+9q1aV1bXX3vIyln2OvOKxM9Nvh1Nf4ufDK20TQfF9l/bXiphHMmnWUk88CLdGRbrLBX02PzSBbriOFmDmQKshJGeKjwxk8FGVHAwUkt0pX6eb/I6P7Yx03yyxErW/unxt+0df67rep6fr82ntpket2dujWVvA0VqkcNvBHGkEbLuCKqAZ3yD5fvZBA9rC5PQ9p7T6v7y20OOtj6kYpKrddbtGHrPx/wDGmv6N8SNIvbS1l0zx1qw1y9tPIlMdleed5pltQXPllh+7bO7cgAPKqR639nzXLeLuvI85YpJOPMrPzIL/AOMmo6h4r0nxU/gfw6niu01SLWLzV0t70vq06tuk+1RtcmIrKxLSCJI8knBUEgtZfPlkuV6+QfWoXvzK/qani39o/wAW/EDR59L8TeH9I1uyuPET+Ipknguo2Zma5cWgeOdWW2V726ZVUhwZT8+OKdPATpS5oJrS2zHLFQkrOSJ/EXx01b4majZw6x4R0SEwaXbaPZXm29mn063t3mlUQSz3EjZczMjGQyfKEC7doNduAwk6FeD1td9H2Zz4nExqUpJMzq+wPACgAoAKACgANF30ADkgDsOgz0pcsVJySV3uOUpTtzMaVB7c+oPNFl2Q7vuAXGOOlOy7ILvuKQSwbcRjsDxU8sVdpIV33YY5z3p2S2QXuHPqaLLsIOfU0WXYA59TRZdgF5o07AFMAoAKACgAoAKACgAoA3/AvgPX/iZ4lt/D/hnTZNV1edJJI7eNlT5UUsxLOQqjAPJI5wOpAONarChB1KjsjSFOVR8sVdlXUfCmtaV/aP2rS7qI6dcPa3StGd0UqMqOpHX5WdFb+6XQHBdQaU4SScXe5Li1uinqOmXmkXklpfW0lrcRna8cmAyNgZVh1VhnBU4IIIIBFVGSkroTTRWqhBQAUAFABQAUAGfY07MYZ9jRZgGfY0WYBn2NFmAZ9jRZgGfY0WYHTfDn4l+JfhL4oj8Q+FNTfStWjieETLGsgZGxlWRwVYcA4IPIBGCARzYjDU8VB060bo1pVZ0ZqcHZmZq/ijVNcudUuL66NzcaldSXt1NJGu+SZ3Ls24AMMsckKQDhcj5RjSNGELKMbJEOcpNtvVlbUdUudWmE104kmAILrEibuc5O1RlueWPJ7k4q4x5VZITdyrn2NVZiDPsaLMAz7GizAM+xoswDPsaLMAz7GizA/Vv/AId2fBr/AKB2q/8Agyevzf8At/GeX4/5n2P9lUO7/D/IP+Hdnwa/6B2q/wDgyej+38Z5fj/mH9lUO7/D/IP+Hdnwa/6B2q/+DJ6P7fxnl+P+Yf2VQ7v8P8g/4d2fBr/oHar/AODJ6P7fxnl+P+Yf2VQ7v8P8g/4d2fBr/oHar/4Mno/t/GeX4/5h/ZVDu/w/yD/h3Z8Gv+gdqv8A4Mno/t/GeX4/5h/ZVDu/w/yD/h3Z8Gv+gdqv/gyej+38Z5fj/mH9lUO7/D/IP+Hdnwa/6B2q/wDgyej+38Z5fj/mH9lUO7/D/IP+Hdnwa/6B2q/+DJ6P7fxnl+P+Yf2VQ7v8P8g/4d2fBr/oHar/AODJ6P7fxnl+P+Yf2VQ7v8P8g/4d2fBr/oHar/4Mno/t/GeX4/5h/ZVDu/w/yD/h3Z8Gv+gdqv8A4Mno/t/GeX4/5h/ZVDu/w/yD/h3Z8Gv+gdqv/gyej+38Z5fj/mH9lUO7/D/IP+Hdnwa/6B2q/wDgyej+38Z5fj/mH9lUO7/D/IP+Hdnwa/6B2q/+DJ6P7fxnl+P+Yf2VQ7v8P8j6br5s9kKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDG8U+Irbwl4Z1TWr1ZGtdPtZLmVYRl2VFLEKMjnjA5Fb0aTr1Y0oPVu33nDjcVTwWGqYir8MFc8y/tz4ly+G7XWpbzw/pVxfFPsujtpV1ciN5WxFFPcJKNpG5Q0nlhQcnpXrqllsZ+z5ZyS1cuZdNW0nutHZX/yPkpVs9nTjiZThC7SUOWUt2rKUt02nvaye7O++HPiuTxt4Us9Xn0+TSrqQyw3NjK4cwTxStFKm4cEB42we4weOleTiaMcPWdKDut0+6eqf469mfU5fi5Y7DRrzhyPVNdnGTi/xWh1Fc56QUAFABQAUAFABQAUAFABQAUAFAGbrmiWviDRb7TL+EXFleQPBNE3AdGUhh+RrWlVlRmqsNGtV8jkxWGhi6M8PVXuzTT+Z8vD9oy18CaLrnw8fVLi51/S719D0vWfILlYd4jSaUbBukgBYEBcSGIcndmvsYZPLHSjjYq0JayV+q1dtdn+Gp+V1uKJZX7TKpPnqwajGbWlns5dbwW9k+Zn0j4D8JWngTwxY6FZSTzQ2quxmuZDJLK7uXeRm7szszH3JxXyeKxEsZXlXmrX7bdrL0sj9My3BQy/Cww0G2o9Xu29W/m7s6KuU9MKACgAoAKACgAoAKACgAoAKACgBGGVI9RQB474h/Zd8IeIvibB4znhlW4EouLiwD5t7mYfdkYEZHqQCAxAJ/i3e5RzrF0MM8LC1u/VHx+J4Vy7F45Y6onfdro3dW+63zPYI0Kk5x7Yrwz65Kw+goKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAQnAzx+NAHm158Tr7SbPxXf3trH5ukQXVxDoBt3hupYoGI88TuwSSN12OSifJv25dhggGzL8SYbXUZLK60bUrSa304apePMIfKtIT5oHmSLIV3EwsAFLdQegYqAc9pfx807xG+kLoej32q/bdUOmTLFNbZt2Fu8+/cJSjjah+63G18/MArAC/wDDRng97vWreC4luzpiM7PbGOUTYmSDCBXJXMsiqDIEDA7hlfmoAkj+PeiwxXsmpabqWjLbRXrr9tNv/pD2sgjmhj2TNmXcwAU43dQSOaAPR7Sdrm2jleGS3d1DGKXG5CR0OCRkdOCR7mgCagAoAKACgAoAKACgAoARhkcdaAOev/AekastyL+Ga9FxZ3Ng4muZT+4uGVpkHzcBiq8jlQoCkDigCbU/Bula1HqqX1sZ11OzWwusyuDJApkKpweMGaTkYPzdeBgApWvw20O01H+0Fgna+N2t+1y13MzmYQmENkv08tmTb0wenAoAyfGHwyF34FvtA8PqltDczBns5rmSKCSJ7gS3EYID7A43gYQgBiAADQBhxfDLXNYv9Dtdc0/QU8PaZqo1a2t7K5cPZbIyI4IgkESuvmYkLNjhim04DUAetAYGBQAtABQAUAFABQAUAFABQAUAFAGP4qg1e50jytDuYbPUTcQET3EfmIsYmQy5XvmMOMAg5IwV6gAWzTVYLkx3FxBLZxiNEmYYmkxGd7vgBclscKAAAT3woBFfHWLaB5LUW9wy27MI8ZMkvGAMsoxgN1Yc4yQOaANSwaVrWIzYExUF8KFG7uQMnAJycZP1oAsUAFABQAUAFABQAUAFABQAUAFAGbr0LXumTWkV8dOuLlTHFOuNwbGeAcZ4B4BBxnBB5AByclhHqdvqn2LxqXiuJiztFcBjbhpVVVQh/kwYpYxjGSWzkrigDRj0OeGWD7Zr0ktzIqxbZGaJZXHnMSsayAZIboc/LEM5IyoBv6XA1lbeVLdNckyOyvITu2s7FV5JJwCBnvigC9QAUAFABQAUAFABQAUAFABQAUAc1feCdJvNYGqSQyrftcx3BmhneMmSOMohO0jIClhtOVO9sg5oAXRPAmieHxdJp1jHZxTSiWSOLKqWErTA8dMO7H6cdAAABt74E0a+is454JXitIHtoIxcSKqIY3iPAYbjsdlDHJGTgg5oAq6B8OrDw7r6anpjG0t/scVqbQF3BVFCqMsxAACp0UHK9eWyAdhQAUAFABQAUAf/2Q==", + "timing": 2100 + }, + { + "timestamp": 1076284405555.0001, + "timing": 2400, + "data": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRQBAwQEBQQFCQUFCRQNCw0UFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFP/AABEIANUAeAMBEQACEQEDEQH/xAGiAAABBQEBAQEBAQAAAAAAAAAAAQIDBAUGBwgJCgsQAAIBAwMCBAMFBQQEAAABfQECAwAEEQUSITFBBhNRYQcicRQygZGhCCNCscEVUtHwJDNicoIJChYXGBkaJSYnKCkqNDU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6g4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2drh4uPk5ebn6Onq8fLz9PX29/j5+gEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoLEQACAQIEBAMEBwUEBAABAncAAQIDEQQFITEGEkFRB2FxEyIygQgUQpGhscEJIzNS8BVictEKFiQ04SXxFxgZGiYnKCkqNTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqCg4SFhoeIiYqSk5SVlpeYmZqio6Slpqeoqaqys7S1tre4ubrCw8TFxsfIycrS09TV1tfY2dri4+Tl5ufo6ery8/T19vf4+fr/2gAMAwEAAhEDEQA/AOd0Twffa94f8QazbtELTRIoZbkOxDsJZViQIMcncwJzjgV+eQpucZSX2f8Ahj+r6uKpUa1OjLeo7R+UXJ3+4wmYBGORwCeT6Vlrex16PR9Tq/ih4Cm+F/jrUfDNzdpe3FksJknjQopZ4UkIAJPA34z3xnAror0XQqOl2t+Op52W5hHNcJHGQjZScvwfL+SOWrnPSas7MQkA8nHagV9Li0k77DCmAUAFABQAUAFABQG4U7Mm67iUh9bHpfwy825+GPxXs4EM0j6VaT+XGCz7I72Eu2B/CqkknoAOa7sOm6dTl6L9Uz5zNYJ1sG5Oyc5Le29OS+/t5nU/D/xTYfFyy1vwrr/hbQkvJNPur2w1zTdPisXsJYYnlBnMSqPJOMEnuQCDkY76VVY793UitOq6ep8rjcNU4YcMXhK0pJytKMnfmT162tb5ncfEuw0ay+P3xT8W63pNv4jtfDlhYTQ6RO/yzyyw2sSs64IaNA5LAjHK5xWlSlBVq1apqoKP5I87BYrEU8pwWBw9TkdeU05bNJSe3m7/AIehnyweHvF/wxit/Flt4S0bxZ4hurc+HYvC9jGl3CHkC/vzE2FhOcFX+YAPkGQALrUUK0Ixr2TdrW6evqVg5V8Hi6lXL3UdGkpc7nL3XZdLxve/ZfOxzPjD4p6N8OfGz+GNI+H/AIavNE8PTvp10dV02Ga61N4mMckkkxUlSSpK4HGeQRhRy1sVHCz9hCCaTs77nqYTKMRnGHWYYjFTjVmrx5XpBdFbr+G/e5wvxw8P6T4c+I17FoMDWuiXVva39nA7lzHHNBHJtyeeCxAzk4xXBiowhWvFaNbH12TVq+IwcPrcrzjKUZPvyycU/wADhK4j2woAKACgAoAKADJHI69s0Bp1PTtI8RW0Wj2ccmteFImWBFaGbQYpJF+UZDOdNclvVi7c/wATdT6MZU1FXa+S/wCAfJVcNV9q3CFbfpNJfd7XT7jzDLMctjPsMCvPe7Pq4aRsze8C+O9U+HniBNW0tYnk8t4Jra6j8yC5hcYeKVMjch4yPUA9QDWtKrKlLmSvfdXVmcWOwVLH0lSqtqzumnaUbPRrzOx1L43W1loOqad4N8Had4NbWbdrXVbq2kkuJJ4mBDRR+aSIYzuOVUf3cEbQa6vrfLHlpQUL72a/VnkLJfbVIVcwrOs4fCmkknpZ+6lzPTdiab+0N4i0260W7+xadd31jp8mkXdxeWol/tSwYqUt7kE/ME2kBhgkEA55LJY2rHlatdJp7aq+lxVuHsJW9pGUnaT5o2duSXVxfm7vt5FW8+KHh+HUNDn0H4f6doCWF9BfyvHdTz3E7xtuKCR2O2M4Hy7Tg81LxEYyXs6aXXfX8zdZXXqQqwxWKlPnjKO0UlzLeySTfqch4w8RN4v8Xa5rj2xtW1S+nvTCrb/K82QuVBwM43YzgZrnq1HUqOpbfzX+Z6WBwkcDhoYaEvhilfv5lnxv4xk8a6vbX0lp9lMNja2IjD7siGFIg2cDqEzjtmqrVpVpKTXTy/zNMJhoYSEqcZNpuT185OX6mBv/ANlqw1/pr/M6g3/7LUa/01/mAb/9lqNf6a/zAN/+y1Gv9Nf5gG//AGWo1/pr/MA3/wCy1Gv9Nf5gG/8A2Wo1/pr/ADAN/wDstRr/AE1/mAb/APZajX+mv8wPG8e5r+s9Ox/nzqGPc0adg1DHuaNOwahj3NGnYNQx7mjTsGoY9zRp2DUMe5o07BqGPc0adg1DHuaNOwahj3NGnYNQx7mjTsGoY9zRp2DUMe5o07BqGPc0adg1DHuaNOwahQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFABQAUAFAATgZ98D3PpSel79AWux9a/s+/sBa78Q7K28QeObubwn4bljS5hijMbXV3ERu3ZJKwjBBy4J/2cc18zjc8p0X7PD2nLzWi/zPZw+WyqR567suh6WPBv7GXw0mbSdY1qPxDexffu3ub293Z7FrRRFxnGAOMc15V85xa9pBWT7WX4Xuejy5bR0k7v0b/IzfE3w2/ZM+JXhrWW8Fa3/ZOuWVlPcW8EF5c2z3MiRsyoqXikPkjogzSdfOcH71RNr7/yEqWXYj3YWTfy/M+I/iV8OPGXw8sl1dLMX/h2Ut5d95DLtx1DDPOPUZHc4ziumhnU62jlZmVbLo0ldK6PMf8AhOdQ2b9tts/vbDj+ddqx9e9upyfV6fYX/hNtS/552/8A37P+NP6/XH9XprcQeOdQPRLY/wDbM/40fX6wfVqfYUeN9RJxstycZwIz/jR9er+gfVqexYn8Ta3a21vcTWSRQXCl4ZXhYLIAdrFTnkBgR9RU/wBoVtr3H9VgtbFb/hONR2htlttPfyz/AI1X1+sL6vTFPjfUVxmO3GemYzz+tL+0Kwvq9Mu6P4ovtQ1W2t5liSNyckIQeFJ9faujD4ytUqxhIyq4enGEpo66vfPLCgD2r/gnXqXwx+J3xni/4S3VrSw1KyVTpWgavEvl6pO+5flZsoxTKlYz87MQQCEavhMbnccRh/ZUYuLlu7n1OGyyVOt7SrJNH6JftFfAHxV8dpbeys/iXL4R8NxxMk2lWenNJ9rZuG89xcJvXGAEK4HPUnI8XAY2GClzOlzS73tb8GelisNLEpRVTlSPnpf+CVqKoA+KHQY/5AP/AN017z4kd7ypf+TafkeR/Y8dvaf195i+N/8AgmP/AMI94L1/VE+JX2h7LTri5WL+wwu/ZGzbd32k4ztxnFZV+IOenKmqNrrv/wAA0p5RGE1JVNi7p/2jRZ/ifLrvjWy8SfD/AFizvF0Hw09zFP8AYknJNpbraCVjGIVeMANGgiETKMAgV8rJqSjZWZ76i1fmeh5N8W/h38OPCHxostYK+BoPCGu+PvCstnawPZbINNjguF1JJYQcwQb2g80SKqMdu7JXj0aVadSKUXqkzhq04wleS0Z82fD3xXovxA+NOnnxjaeHtA0fVbW80bfaaXbWllpzXFtNDb3DgKq/uJZo5TNIxk/dBi5Kg16c4unSbjdtO/rbU4ItSnaS0Penk+CVhb+G7Y/8IZqF1D4o0jwVqbwpEgfT7G+ne41hSrEBbuD7CrzD7wE4DHLVyRjWd7Po39/T5HW1DRsoWV74O0h9G1TxlZ/C278aQeHfE889topsZdNuGjhV9JWVLVvsxuDKJ0VYj5rIIQ3zEZim5uG7tePr5/JCSindnn9rrPgnX/g1qE+p3Vk3xMbSbuTToJbK1i0+BG1BnuVRQyxw3LQuxiXy1CrHiLMrw7NFGUazte2n5ENr2S7mp8ANU+HOr+BNL03xhaeH7S+tr240Jr27hhjuGh1KexRbxmPzSfZIV1SQSuCsTG35GVFaV3U57xem/wDXr+hNJRcbs9M+FnhT4YeG/HThvEngHX9BttT0bQdTsNQuNHhgkgjsYTe6nHc3sUzTRPcNcKY7bZIxMZ85QoxyTqVZpJ6df+AbqNO9jzLw/b6VqfwBt7l5/B2gX1haxhbJP7Jv9U1uZ712abzVb7dZyJHIqlGUxskPBXcAfXwEn9fjrpd9+zOLExX1WT2ZwdfeHywUAc14I/Yr+JPiPVdet7+TQ/AtxoupnQvM8VatHYi71XarrYWx582dlZWXb8pVgd+GBP4pdx1R+kNXVmbGjyarZxXOmayr22uaVcy6bqNuZAxiuYXKSKSpIJyOoJHPFfp2VVIYnDpzirx0PjcdCeHrOKdupS1LxnFpt7LbSC4LRgEshGDkA+vvXRXxNGjP2cqf5f5GNOFWpHmUz7L+A2t/DL4OfC/Wdc8daPq0nii+sriFr6FUf+zreaMR+XGrS4Mh3HLbc5bYOM5+GzDHTx1X2dKPKvl/kfS4XDLDx9pUdz5c+JPx6h8SatdxeHJ9X0bQd7LAreULqVc8NI6/dY+inAzjLda7sPg8NTiue7Zy1sViJ3ULWPQvjhfeCvFX7PnhDWbc662uNLbPdtcRwCEMYXEuwq27lwuAe2e9cWE5IYqUFsdeI554eMup8wkaWer3n/fKf417f+z+Z5H7wUjTG6tdnv8AcT/GtG6Hn+H+ZLU12F/4luQd95nOQQqcH86X7jd3/r5hepfoN2aWAAGvMDp8q8cY459hRehvqDdVaKwFNLbOWuzkYPypn+f+cmh+ye9x/vH2FI0xlKl7sg84Kp/jS/cb6/18xfvE9LGp4aawGs26xNdFznaJAu3hT15+tdeF9k60Wr31X4GVbn9nJO1jua+lPHCgDL1z9r+0+JT6mnxK+HGk+KLKXVjrdjBp19caabOb7LbWi2+5S+618mzgUx/LIdpIlU4I/FLX0R+kFTwbposdJe4GnwaSuozPqCWFo7tDbxy4aNELs7lQhTG9mbHUk5r9NyWjKjhryWrbf9fcfH5nVjUxDs9kfRfwO8C6B4y+HGp2raGh13V/GulaBPrV99mnht7V7WeU7VltneJDtKuYpEdm8tt4WMxt89nNSSxstdEl+SPTy2EXQWmtyv8AFx/B/jPxBp9hFLqNj4X0eO4v/Eljf6jLbT2cIkhgtbh5xYSFlea7jjMMdvK6kMSdpVl8TCfu4Of2un4npYhKbUOhxXj34SeAPh54a+IlpNpmta1r1jq+jQ6NqcGq+QIrfUdOuruJJIHtMyFTGofKxPJtXb9nw6v6VPEVJuMr2VtThnRiotbnuvjD9nPRBPovgKSXVofD8fxAsPCsV0WjE0lvIt8zuX8vaZAIYSCFA+fkfMMeXRqTlVlVl2b+7Q7qsEqUaaZ866B4E+E2o+ErfxZrs3ijw/4b1nxBJ4d0ycXMd4dI8qzgle5uzHbD7Rue5QiCNYSEjkw7kA16k69SEuSW5wKjTlG51Ft8MfBHhP4deNreHT9X1PxUPh1pniJ9S1IQGxje8utPlAtovL8yNo0nEXmeY2/98NqDg5KrOdWN9FdmjpqEGVfhB+zR4Z8e6B8OrXU73WV8RfET+1xpd/YSxrY6SbJTgXCNEzSs7KSwSSPZGyN82cVtWrzjN22RlSpKaV+pV+IHwQ8DeEvhtDPaSeIJvFEvgPSPGf2ua8hNmslze2trLa+SLcNgCV3V/N4yFKnBZlGvUlU12vYqVJRj8rl/4AfBiPxH8KtRbWPDmkXd741nudO8NXuo6xbWF5Fc2ttKyC0jnljMxnvJrKE+WH+VZlbaStGIquNSNnov1CjTvH3upueEfCngnUvgPoOk32heGrzX7/wZrOswww2d2niCS6gvNRVbj7UGS2W3iit9zLI7O3kFVjJdDWE6jjVbT00NIUlyWa7nP/Gaz0D4ReNZPhr4e8KaBf6K9lY39j4zmt7htRvlltIp3uYpfO8sRuxkQKqbAuRjeC9eplbdTEQm5bt6fJnJjUoU5xjH5nF2ttLe3MNvAu+aVxGi5AyxOAMngc9zxX3TaWrPmEr6EIOQOnTtRvqgemhv/sXfCT4bab8d9Am+K/kapoeW8mO9KJpyXO0+WbpXB8yInjB2jdt3ZTcD+f4nIZ0KEqsKnNJfZt/wT6ylmkatTkcbJ+Z9F/tcfsc638NPEN/4o8KWc+t+EL6Sa7aKwtCTpC8uUcJn9yq8rJgABSGxgFvZyrNqdeHsKjUZJW9f+D5HmY/ASpP2kHdM8+/ZF+Evjb4peMfFdlod8DoENtFcXNhcXjJbPOSERzHypcKsoDYyASM8mvMz+HLNT/mtb5LX8TvymV04djgvjJ4v+Ltj8aNfhHjrxGuqaTeXGlxNb+ILovCA6pJHEwYEK7QoSBwxUccCujDZc5UYy0s0nqc1bHKNVq2p7n8EP2UPjtJZ6z478YeJtU8MWF3AW1GDWdcntXvYYo2TffKzf6qNNwCS8bS3RfveBi6kFahS959z1sNB2dWpojwP4x/Ff4h+M/GUctn4z1yXS9JuY5tMJ1e4Ajmj3BbhAWGx/ncKwAIU4GMkV72Gyeoqa5lq0eXicwhOVo7I4Xwjr/xH+H8U8XhfxXrHhuK4dXnTSNWmtBMy5wX8tl3YyevTJxXbPK6k9ZJHMsZGKshbzxT8SJ/CX/CN3HjHWf8AhGEhEJ0h9Zn+xCJTuVPJLeWFBAIG3qAewrJ5W6f7ySWnU0+u8/umZpfi/wAY6B4cv/D2l+M7/StBvxILvS7HWZYbW58xNknmRKwR9yfKdwOQADWFTCU6jfM19/8AwC4YiULcvQqX+s+ItUhEV54mmuohYx6WI59TeRRZxuskdvhmI8pXRGWP7oKqQMgGmsNBdY733E68pb+gyHVdft20RovEksbaG2/SimpOpsG80y7oMH90fMJfKY+b5uvNDwsHfVa+Ye3enka6fEb4gR+Hbnw+vxE1oeH7lZkm0j+35/skqyszShod+w7mdmORyWJOSTUvCU27tx+8pYmSVrGhonxB8bzaZaeGLnxxqtz4WjXYNC/tqZ7PavzIv2ffsIVlVgMcEAjpXXhMLTp4iE01fXr5Mxr15SpSizRIDDBAIPUEZBr6k8UAPUkn1JzQAY98UnbW4j6g/Z8/bx8XfCW3sNC8RofFnhO3jjt4YHKpdWUS8ARSY/eAKT8kn9xVDIM185jskoYr36L5JHsYbMqtD3amsT6U8Aftu/s+2Wsapqltpl14N1LU9pvbiTRwGuipYgubYybmy7cnnmvnK2UZk7Ra5ktte561LMMJH3vhbMzR/ir8IvE/j+5m+Eunx2vi2ea61nUPEMukCSV1Ku0wja4+dWYkYVQq84yK+F42xWdZVgKMlV9nHm5dFF6KEpWs4u9+Xq1qe9kVPL8ZiKloc75e7Vm2km/vLnxKOo/E/wAOJo/ifxBfXmk3TrNHaRwJb7sIrq1wIJQVQBsjJb7jNtyoz+O4bijPKdWmqWKlGdRNxvCk7bu8tHZWtfZ79j7ytlOArwkpUY2i9bTlrstNd77+qPMn/ZY+G1vgyRXCxvareQGNJW3xsUUKcXHD72cEf7HXBr31x1xBP31mMnHk59KdG9m0uWyj8Su18rnmf6u5XdL6ql71n71T/MSb9lL4fliLWKWf93HJl/OURA72k8z998uxI2fvnjpkGrqcY8TKbpwzCV7X/h0bWT9675dLRT+at1RnHI8nfK/qy1/vz7evcr+NP2Uvhno2n3sd0t+IEiu2nlt45A0UcLTBiC1wV3MIHK5GOueldVDi/Pp4qGHxGNlKLck/3dJL3eZbqN73j+ZEsiy+FJ1aeHimkvtVOqj/AHvNnzF+0N8H/h34E8GaBrHhBtbNzqttLdSW+sqoe3VZ/JQHY+NxKSnHPGwg84r7jDZpifrdCEqzkptaOMNvkrnh18FQ9hUlGko8vVOX6uxznx9/Z+0/4S+KvE0Wjaxca54c0+G4W2vpVAkF3bXsVpdW0wCgK6NJ5gAJJjlgbjfivuqWIU0lJa6fkfNzoWk7bambe/s0eIbO2vpBruhz3Glw3J1ezR7lZdLuYbG4vWtJt8CqZjHaXSjy2dA8DKzrlcpYqHb8iPYSsidv2UfG1v4p8P6BeXGladf67YaXfWP2y5eNZDfziGG3JKZEysJiyY6W8u0sQA1/WadnpsH1eZxl14atfCXjewsbTxJpXidWhMr3OkpdJHExDjy3W5hhdXG3JBXow59PTy6SqVYtLq/yZyYmPLCaOnr7A+fCgAoAKACgDpfh941uPAviFL+IboZEMM6AAlkJB4z0IIB/CvhuM+HXxNlE8HT0qJqUG+klp9zTcfK/N0Pp+HM2jk2YQxFVN09pJdmn+Kdn959J+GtW0zxY3iPUtU8e3fhTw/pui21/FqFvYrdJ5kt2IcPDsZ36hdqlSDyeARX4dwbwdh6eHq0s3y9Tqqbj711ZKKeklJR3b162P0TiTPJTq03gMTywcE7rq+Z7rdO1lZ2elzpfiP8ADjU/B1j4m1G38X32oppd99stdK+1aeL270aHy1up1UJuEnmPJtfy9qi3k3A7k3fodDhTh+pNQnlsFdNXtOylfRt821ranylXOMxipSWMbs9NVf7jN8eXfh3wzf8AxH02y1vxhPeeFbK2niuJb6waK4knkgiUFRZA4U3AJAOSEIGM5GtPgzJUqdSWAp+9q1aV1bXX3vIyln2OvOKxM9Nvh1Nf4ufDK20TQfF9l/bXiphHMmnWUk88CLdGRbrLBX02PzSBbriOFmDmQKshJGeKjwxk8FGVHAwUkt0pX6eb/I6P7Yx03yyxErW/unxt+0df67rep6fr82ntpket2dujWVvA0VqkcNvBHGkEbLuCKqAZ3yD5fvZBA9rC5PQ9p7T6v7y20OOtj6kYpKrddbtGHrPx/wDGmv6N8SNIvbS1l0zx1qw1y9tPIlMdleed5pltQXPllh+7bO7cgAPKqR639nzXLeLuvI85YpJOPMrPzIL/AOMmo6h4r0nxU/gfw6niu01SLWLzV0t70vq06tuk+1RtcmIrKxLSCJI8knBUEgtZfPlkuV6+QfWoXvzK/qani39o/wAW/EDR59L8TeH9I1uyuPET+Ipknguo2Zma5cWgeOdWW2V726ZVUhwZT8+OKdPATpS5oJrS2zHLFQkrOSJ/EXx01b4majZw6x4R0SEwaXbaPZXm29mn063t3mlUQSz3EjZczMjGQyfKEC7doNduAwk6FeD1td9H2Zz4nExqUpJMzq+wPACgAoAKACgANF30ADkgDsOgz0pcsVJySV3uOUpTtzMaVB7c+oPNFl2Q7vuAXGOOlOy7ILvuKQSwbcRjsDxU8sVdpIV33YY5z3p2S2QXuHPqaLLsIOfU0WXYA59TRZdgF5o07AFMAoAKACgAoAKACgAoA3/AvgPX/iZ4lt/D/hnTZNV1edJJI7eNlT5UUsxLOQqjAPJI5wOpAONarChB1KjsjSFOVR8sVdlXUfCmtaV/aP2rS7qI6dcPa3StGd0UqMqOpHX5WdFb+6XQHBdQaU4SScXe5Li1uinqOmXmkXklpfW0lrcRna8cmAyNgZVh1VhnBU4IIIIBFVGSkroTTRWqhBQAUAFABQAUAGfY07MYZ9jRZgGfY0WYBn2NFmAZ9jRZgGfY0WYHTfDn4l+JfhL4oj8Q+FNTfStWjieETLGsgZGxlWRwVYcA4IPIBGCARzYjDU8VB060bo1pVZ0ZqcHZmZq/ijVNcudUuL66NzcaldSXt1NJGu+SZ3Ls24AMMsckKQDhcj5RjSNGELKMbJEOcpNtvVlbUdUudWmE104kmAILrEibuc5O1RlueWPJ7k4q4x5VZITdyrn2NVZiDPsaLMAz7GizAM+xoswDPsaLMAz7GizA/Vv/AId2fBr/AKB2q/8Agyevzf8At/GeX4/5n2P9lUO7/D/IP+Hdnwa/6B2q/wDgyej+38Z5fj/mH9lUO7/D/IP+Hdnwa/6B2q/+DJ6P7fxnl+P+Yf2VQ7v8P8g/4d2fBr/oHar/AODJ6P7fxnl+P+Yf2VQ7v8P8g/4d2fBr/oHar/4Mno/t/GeX4/5h/ZVDu/w/yD/h3Z8Gv+gdqv8A4Mno/t/GeX4/5h/ZVDu/w/yD/h3Z8Gv+gdqv/gyej+38Z5fj/mH9lUO7/D/IP+Hdnwa/6B2q/wDgyej+38Z5fj/mH9lUO7/D/IP+Hdnwa/6B2q/+DJ6P7fxnl+P+Yf2VQ7v8P8g/4d2fBr/oHar/AODJ6P7fxnl+P+Yf2VQ7v8P8g/4d2fBr/oHar/4Mno/t/GeX4/5h/ZVDu/w/yD/h3Z8Gv+gdqv8A4Mno/t/GeX4/5h/ZVDu/w/yD/h3Z8Gv+gdqv/gyej+38Z5fj/mH9lUO7/D/IP+Hdnwa/6B2q/wDgyej+38Z5fj/mH9lUO7/D/IP+Hdnwa/6B2q/+DJ6P7fxnl+P+Yf2VQ7v8P8j6br5s9kKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgDG8U+Irbwl4Z1TWr1ZGtdPtZLmVYRl2VFLEKMjnjA5Fb0aTr1Y0oPVu33nDjcVTwWGqYir8MFc8y/tz4ly+G7XWpbzw/pVxfFPsujtpV1ciN5WxFFPcJKNpG5Q0nlhQcnpXrqllsZ+z5ZyS1cuZdNW0nutHZX/yPkpVs9nTjiZThC7SUOWUt2rKUt02nvaye7O++HPiuTxt4Us9Xn0+TSrqQyw3NjK4cwTxStFKm4cEB42we4weOleTiaMcPWdKDut0+6eqf469mfU5fi5Y7DRrzhyPVNdnGTi/xWh1Fc56QUAFABQAUAFABQAUAFABQAUAFAGbrmiWviDRb7TL+EXFleQPBNE3AdGUhh+RrWlVlRmqsNGtV8jkxWGhi6M8PVXuzTT+Z8vD9oy18CaLrnw8fVLi51/S719D0vWfILlYd4jSaUbBukgBYEBcSGIcndmvsYZPLHSjjYq0JayV+q1dtdn+Gp+V1uKJZX7TKpPnqwajGbWlns5dbwW9k+Zn0j4D8JWngTwxY6FZSTzQ2quxmuZDJLK7uXeRm7szszH3JxXyeKxEsZXlXmrX7bdrL0sj9My3BQy/Cww0G2o9Xu29W/m7s6KuU9MKACgAoAKACgAoAKACgAoAKACgBGGVI9RQB474h/Zd8IeIvibB4znhlW4EouLiwD5t7mYfdkYEZHqQCAxAJ/i3e5RzrF0MM8LC1u/VHx+J4Vy7F45Y6onfdro3dW+63zPYI0Kk5x7Yrwz65Kw+goKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAKACgAoAQnAzx+NAHm158Tr7SbPxXf3trH5ukQXVxDoBt3hupYoGI88TuwSSN12OSifJv25dhggGzL8SYbXUZLK60bUrSa304apePMIfKtIT5oHmSLIV3EwsAFLdQegYqAc9pfx807xG+kLoej32q/bdUOmTLFNbZt2Fu8+/cJSjjah+63G18/MArAC/wDDRng97vWreC4luzpiM7PbGOUTYmSDCBXJXMsiqDIEDA7hlfmoAkj+PeiwxXsmpabqWjLbRXrr9tNv/pD2sgjmhj2TNmXcwAU43dQSOaAPR7Sdrm2jleGS3d1DGKXG5CR0OCRkdOCR7mgCagAoAKACgAoAKACgAoARhkcdaAOev/AekastyL+Ga9FxZ3Ng4muZT+4uGVpkHzcBiq8jlQoCkDigCbU/Bula1HqqX1sZ11OzWwusyuDJApkKpweMGaTkYPzdeBgApWvw20O01H+0Fgna+N2t+1y13MzmYQmENkv08tmTb0wenAoAyfGHwyF34FvtA8PqltDczBns5rmSKCSJ7gS3EYID7A43gYQgBiAADQBhxfDLXNYv9Dtdc0/QU8PaZqo1a2t7K5cPZbIyI4IgkESuvmYkLNjhim04DUAetAYGBQAtABQAUAFABQAUAFABQAUAFAGP4qg1e50jytDuYbPUTcQET3EfmIsYmQy5XvmMOMAg5IwV6gAWzTVYLkx3FxBLZxiNEmYYmkxGd7vgBclscKAAAT3woBFfHWLaB5LUW9wy27MI8ZMkvGAMsoxgN1Yc4yQOaANSwaVrWIzYExUF8KFG7uQMnAJycZP1oAsUAFABQAUAFABQAUAFABQAUAFAGbr0LXumTWkV8dOuLlTHFOuNwbGeAcZ4B4BBxnBB5AByclhHqdvqn2LxqXiuJiztFcBjbhpVVVQh/kwYpYxjGSWzkrigDRj0OeGWD7Zr0ktzIqxbZGaJZXHnMSsayAZIboc/LEM5IyoBv6XA1lbeVLdNckyOyvITu2s7FV5JJwCBnvigC9QAUAFABQAUAFABQAUAFABQAUAc1feCdJvNYGqSQyrftcx3BmhneMmSOMohO0jIClhtOVO9sg5oAXRPAmieHxdJp1jHZxTSiWSOLKqWErTA8dMO7H6cdAAABt74E0a+is454JXitIHtoIxcSKqIY3iPAYbjsdlDHJGTgg5oAq6B8OrDw7r6anpjG0t/scVqbQF3BVFCqMsxAACp0UHK9eWyAdhQAUAFABQAUAf/2Q==" + }, + { + "timestamp": 1076284705555.0001, + "timing": 2700, + "data": "data:image/jpeg;base64,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" + }, + { + "timestamp": 1076285005555.0001, + "timing": 3000, + "data": "data:image/jpeg;base64,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" + } + ] + } + }, + "network-server-latency": { + "id": "network-server-latency", + "title": "Server Backend Latencies", + "description": "Server latencies can impact web performance. If the server latency of an origin is high, it's an indication the server is overloaded or has poor backend performance. [Learn more](https://hpbn.co/primer-on-web-performance/#analyzing-the-resource-waterfall).", + "score": null, + "scoreDisplayMode": "informative", + "displayValue": "0 ms", + "details": { + "headings": [], + "items": [], + "type": "table" + }, + "numericValue": 0 + }, + "max-potential-fid": { + "id": "max-potential-fid", + "title": "Max Potential First Input Delay", + "description": "The maximum potential First Input Delay that your users could experience is the duration of the longest task. [Learn more](https://web.dev/lighthouse-max-potential-fid/).", + "score": 0.62, + "scoreDisplayMode": "numeric", + "displayValue": "220 ms", + "numericValue": 215 + }, + "estimated-input-latency": { + "id": "estimated-input-latency", + "title": "Estimated Input Latency", + "description": "Estimated Input Latency is an estimate of how long your app takes to respond to user input, in milliseconds, during the busiest 5s window of page load. If your latency is higher than 50 ms, users may perceive your app as laggy. [Learn more](https://web.dev/estimated-input-latency/).", + "score": 0.94, + "scoreDisplayMode": "numeric", + "displayValue": "50 ms", + "numericValue": 51.866666666666674 + }, + "maskable-icon": { + "id": "maskable-icon", + "title": "Manifest doesn't have a maskable icon", + "description": "A maskable icon ensures that the image fills the entire shape without being letterboxed when installing the app on a device. [Learn more](https://web.dev/maskable-icon-audit/).", + "score": 0, + "scoreDisplayMode": "binary", + "explanation": "No manifest was fetched" + }, + "structured-data": { + "id": "structured-data", + "title": "Structured data is valid", + "description": "Run the [Structured Data Testing Tool](https://search.google.com/structured-data/testing-tool/) and the [Structured Data Linter](http://linter.structured-data.org/) to validate structured data. [Learn more](https://web.dev/structured-data/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "interactive": { + "id": "interactive", + "title": "Time to Interactive", + "description": "Time to interactive is the amount of time it takes for the page to become fully interactive. [Learn more](https://web.dev/interactive/).", + "score": 0.55, + "scoreDisplayMode": "numeric", + "displayValue": "6.9 s", + "numericValue": 6884 + }, + "redirects": { + "id": "redirects", + "title": "Avoid multiple page redirects", + "description": "Redirects introduce additional delays before the page can be loaded. [Learn more](https://web.dev/redirects/).", + "score": 1, + "scoreDisplayMode": "numeric", + "details": { + "overallSavingsMs": 0, + "headings": [], + "type": "opportunity", + "items": [] + }, + "numericValue": 0 + }, + "timing-budget": { + "id": "timing-budget", + "title": "Timing budget", + "description": "Set a timing budget to help you keep an eye on the performance of your site. Performant sites load fast and respond to user input events quickly. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/budgets).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "password-inputs-can-be-pasted-into": { + "id": "password-inputs-can-be-pasted-into", + "title": "Allows users to paste into password fields", + "description": "Preventing password pasting undermines good security policy. [Learn more](https://web.dev/password-inputs-can-be-pasted-into/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [], + "items": [] + } + }, + "unminified-css": { + "id": "unminified-css", + "title": "Minify CSS", + "description": "Minifying CSS files can reduce network payload sizes. [Learn more](https://web.dev/unminified-css/).", + "score": 1, + "scoreDisplayMode": "numeric", + "details": { + "overallSavingsMs": 0, + "items": [], + "type": "opportunity", + "overallSavingsBytes": 0, + "headings": [] + }, + "numericValue": 0 + }, + "custom-controls-labels": { + "id": "custom-controls-labels", + "title": "Custom controls have associated labels", + "description": "Custom interactive controls have associated labels, provided by aria-label or aria-labelledby. [Learn more](https://web.dev/custom-controls-labels/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "link-text": { + "id": "link-text", + "title": "Links have descriptive text", + "description": "Descriptive link text helps search engines understand your content. [Learn more](https://web.dev/link-text/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "headings": [], + "items": [], + "type": "table", + "summary": {} + } + }, + "doctype": { + "id": "doctype", + "title": "Page has the HTML doctype", + "description": "Specifying a doctype prevents the browser from switching to quirks-mode. [Learn more](https://web.dev/doctype/).", + "score": 1, + "scoreDisplayMode": "binary" + }, + "video-caption": { + "id": "video-caption", + "title": "`<video>` elements contain a `<track>` element with `[kind=\"captions\"]`", + "description": "When a video provides a caption it is easier for deaf and hearing impaired users to access its information. [Learn more](https://web.dev/video-caption/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "load-fast-enough-for-pwa": { + "id": "load-fast-enough-for-pwa", + "title": "Page load is fast enough on mobile networks", + "description": "A fast page load over a cellular network ensures a good mobile user experience. [Learn more](https://web.dev/load-fast-enough-for-pwa/).", + "score": 1, + "scoreDisplayMode": "binary", + "numericValue": 6884 + }, + "offscreen-images": { + "id": "offscreen-images", + "title": "Defer offscreen images", + "description": "Consider lazy-loading offscreen and hidden images after all critical resources have finished loading to lower time to interactive. [Learn more](https://web.dev/offscreen-images/).", + "score": 1, + "scoreDisplayMode": "numeric", + "displayValue": "Potential savings of 3 KiB", + "details": { + "type": "opportunity", + "overallSavingsBytes": 3138, + "overallSavingsMs": 0, + "headings": [ + { + "valueType": "thumbnail", + "key": "url" + }, + { + "label": "URL", + "key": "url", + "valueType": "url" + }, + { + "valueType": "bytes", + "key": "totalBytes", + "label": "Resource Size" + }, + { + "valueType": "bytes", + "label": "Potential Savings", + "key": "wastedBytes" + } + ], + "items": [ + { + "totalBytes": 3138, + "requestStartTime": 1076282.319401, + "wastedBytes": 3138, + "url": "https://blencorp.com/assets/img/clients/arlingtoncu.png", + "wastedPercent": 100 + } + ] + }, + "warnings": [], + "numericValue": 0 + }, + "aria-valid-attr-value": { + "id": "aria-valid-attr-value", + "title": "`[aria-*]` attributes have valid values", + "description": "Assistive technologies, like screen readers, can't interpret ARIA attributes with invalid values. [Learn more](https://web.dev/aria-valid-attr-value/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "html-has-lang": { + "id": "html-has-lang", + "title": "`<html>` element does not have a `[lang]` attribute", + "description": "If a page doesn't specify a lang attribute, a screen reader assumes that the page is in the default language that the user chose when setting up the screen reader. If the page isn't actually in the default language, then the screen reader might not announce the page's text correctly. [Learn more](https://web.dev/html-has-lang/).", + "score": 0, + "scoreDisplayMode": "binary", + "details": { + "debugData": { + "impact": "serious", + "type": "debugdata", + "tags": [ + "cat.language", + "wcag2a", + "wcag311" + ] + }, + "items": [ + { + "node": { + "explanation": "Fix any of the following:\n The <html> element does not have a lang attribute", + "nodeLabel": "html", + "type": "node", + "selector": "html", + "snippet": "<html style=\"\" class=\" js flexbox flexboxlegacy canvas canvastext webgl touch geolocation postmessage websqldatabase indexeddb hashchange history draganddrop websockets rgba hsla multiplebgs backgroundsize borderimage borderradius boxshadow textshadow opacity cssanimations csscolumns cssgradients cssreflections csstransforms csstransforms3d csstransitions fontface generatedcontent video audio localstorage sessionstorage webworkers applicationcache svg inlinesvg smil svgclippaths\">", + "path": "1,HTML" + } + } + ], + "type": "table", + "headings": [ + { + "key": "node", + "text": "Failing Elements", + "itemType": "node" + } + ] + } + }, + "font-size": { + "id": "font-size", + "title": "Document uses legible font sizes", + "description": "Font sizes less than 12px are too small to be legible and require mobile visitors to “pinch to zoom” in order to read. Strive to have >60% of page text ≥12px. [Learn more](https://web.dev/font-size/).", + "score": 1, + "scoreDisplayMode": "binary", + "displayValue": "100% legible text", + "details": { + "type": "table", + "items": [ + { + "coverage": "100.00%", + "source": { + "type": "code", + "value": "Legible text" + }, + "fontSize": "≥ 12px" + } + ], + "headings": [ + { + "itemType": "source-location", + "key": "source", + "text": "Source" + }, + { + "text": "Selector", + "itemType": "code", + "key": "selector" + }, + { + "itemType": "text", + "text": "% of Page Text", + "key": "coverage" + }, + { + "key": "fontSize", + "text": "Font Size", + "itemType": "text" + } + ] + } + }, + "metrics": { + "id": "metrics", + "title": "Metrics", + "description": "Collects all available metrics.", + "score": null, + "scoreDisplayMode": "informative", + "details": { + "type": "debugdata", + "items": [ + { + "observedLastVisualChangeTs": 1076282513555, + "observedCumulativeLayoutShift": 0, + "firstContentfulPaint": 2400, + "observedLargestContentfulPaintTs": 1076282475720, + "cumulativeLayoutShift": 0, + "observedFirstPaint": 365, + "speedIndex": 2880, + "firstCPUIdle": 6359, + "observedLoadTs": 1076283164761, + "observedTraceEndTs": 1076284232751, + "observedLoad": 1159, + "observedDomContentLoaded": 599, + "observedTraceEnd": 2227, + "estimatedInputLatency": 52, + "observedFirstMeaningfulPaintTs": 1076282475720, + "observedFirstContentfulPaint": 365, + "observedFirstPaintTs": 1076282370372, + "observedNavigationStart": 0, + "observedLastVisualChange": 508, + "largestContentfulPaint": 3715, + "firstMeaningfulPaint": 2550, + "observedLargestContentfulPaint": 470, + "observedFirstContentfulPaintTs": 1076282370372, + "observedFirstVisualChangeTs": 1076282379555, + "totalBlockingTime": 453, + "observedDomContentLoadedTs": 1076282604681, + "interactive": 6884, + "maxPotentialFID": 215, + "observedFirstMeaningfulPaint": 470, + "observedSpeedIndexTs": 1076282464813, + "observedFirstVisualChange": 374, + "observedNavigationStartTs": 1076282005555, + "observedSpeedIndex": 459 + }, + { + "lcpInvalidated": false + } + ] + }, + "numericValue": 6884 + }, + "themed-omnibox": { + "id": "themed-omnibox", + "title": "Does not set a theme color for the address bar.", + "description": "The browser address bar can be themed to match your site. [Learn more](https://web.dev/themed-omnibox/).", + "score": 0, + "scoreDisplayMode": "binary", + "explanation": "Failures: No manifest was fetched,\nNo `<meta name=\"theme-color\">` tag found.", + "details": { + "type": "debugdata", + "items": [ + { + "parseFailureReason": "No manifest was fetched", + "themeColor": null, + "isParseFailure": true, + "failures": [ + "No manifest was fetched", + "No `<meta name=\"theme-color\">` tag found" + ] + } + ] + } + }, + "aria-toggle-field-name": { + "id": "aria-toggle-field-name", + "title": "ARIA toggle fields have accessible names", + "description": "When a toggle field doesn't have an accessible name, screen readers announce it with a generic name, making it unusable for users who rely on screen readers. [Learn more](https://web.dev/aria-toggle-field-name/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "uses-optimized-images": { + "id": "uses-optimized-images", + "title": "Efficiently encode images", + "description": "Optimized images load faster and consume less cellular data. [Learn more](https://web.dev/uses-optimized-images/).", + "score": 1, + "scoreDisplayMode": "numeric", + "details": { + "type": "opportunity", + "overallSavingsBytes": 0, + "headings": [], + "overallSavingsMs": 0, + "items": [] + }, + "warnings": [], + "numericValue": 0 + }, + "tabindex": { + "id": "tabindex", + "title": "No element has a `[tabindex]` value greater than 0", + "description": "A value greater than 0 implies an explicit navigation ordering. Although technically valid, this often creates frustrating experiences for users who rely on assistive technologies. [Learn more](https://web.dev/tabindex/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "tap-targets": { + "id": "tap-targets", + "title": "Tap targets are sized appropriately", + "description": "Interactive elements like buttons and links should be large enough (48x48px), and have enough space around them, to be easy enough to tap without overlapping onto other elements. [Learn more](https://web.dev/tap-targets/).", + "score": 1, + "scoreDisplayMode": "binary", + "displayValue": "100% appropriately sized tap targets", + "details": { + "items": [], + "headings": [], + "type": "table" + } + }, + "layout-table": { + "id": "layout-table", + "title": "Presentational `<table>` elements avoid using `<th>`, `<caption>` or the `[summary]` attribute.", + "description": "A table being used for layout purposes should not include data elements, such as the th or caption elements or the summary attribute, because this can create a confusing experience for screen reader users. [Learn more](https://web.dev/layout-table/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "external-anchors-use-rel-noopener": { + "id": "external-anchors-use-rel-noopener", + "title": "Links to cross-origin destinations are safe", + "description": "Add `rel=\"noopener\"` or `rel=\"noreferrer\"` to any external links to improve performance and prevent security vulnerabilities. [Learn more](https://web.dev/external-anchors-use-rel-noopener/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "items": [], + "headings": [], + "type": "table" + }, + "warnings": [] + }, + "meta-description": { + "id": "meta-description", + "title": "Document does not have a meta description", + "description": "Meta descriptions may be included in search results to concisely summarize page content. [Learn more](https://web.dev/meta-description/).", + "score": 0, + "scoreDisplayMode": "binary", + "explanation": "Description text is empty." + }, + "logical-tab-order": { + "id": "logical-tab-order", + "title": "The page has a logical tab order", + "description": "Tabbing through the page follows the visual layout. Users cannot focus elements that are offscreen. [Learn more](https://web.dev/logical-tab-order/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "definition-list": { + "id": "definition-list", + "title": "`<dl>`'s contain only properly-ordered `<dt>` and `<dd>` groups, `<script>`, `<template>` or `<div>` elements.", + "description": "When definition lists are not properly marked up, screen readers may produce confusing or inaccurate output. [Learn more](https://web.dev/definition-list/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "offline-start-url": { + "id": "offline-start-url", + "title": "`start_url` does not respond with a 200 when offline", + "description": "A service worker enables your web app to be reliable in unpredictable network conditions. [Learn more](https://web.dev/offline-start-url/).", + "score": 0, + "scoreDisplayMode": "binary", + "explanation": "No usable web app manifest found on page.", + "warnings": [] + }, + "offscreen-content-hidden": { + "id": "offscreen-content-hidden", + "title": "Offscreen content is hidden from assistive technology", + "description": "Offscreen content is hidden with display: none or aria-hidden=true. [Learn more](https://web.dev/offscreen-content-hidden/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "meta-refresh": { + "id": "meta-refresh", + "title": "The document does not use `<meta http-equiv=\"refresh\">`", + "description": "Users do not expect a page to refresh automatically, and doing so will move focus back to the top of the page. This may create a frustrating or confusing experience. [Learn more](https://web.dev/meta-refresh/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "th-has-data-cells": { + "id": "th-has-data-cells", + "title": "`<th>` elements and elements with `[role=\"columnheader\"/\"rowheader\"]` have data cells they describe.", + "description": "Screen readers have features to make navigating tables easier. Ensuring table headers always refer to some set of cells may improve the experience for screen reader users. [Learn more](https://web.dev/th-has-data-cells/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "works-offline": { + "id": "works-offline", + "title": "Current page does not respond with a 200 when offline", + "description": "If you're building a Progressive Web App, consider using a service worker so that your app can work offline. [Learn more](https://web.dev/works-offline/).", + "score": 0, + "scoreDisplayMode": "binary", + "warnings": [] + }, + "button-name": { + "id": "button-name", + "title": "Buttons have an accessible name", + "description": "When a button doesn't have an accessible name, screen readers announce it as \"button\", making it unusable for users who rely on screen readers. [Learn more](https://web.dev/button-name/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "headings": [], + "items": [], + "type": "table" + } + }, + "js-libraries": { + "id": "js-libraries", + "title": "Detected JavaScript libraries", + "description": "All front-end JavaScript libraries detected on the page. [Learn more](https://web.dev/js-libraries/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "items": [ + { + "version": "3.3.1", + "npm": "bootstrap", + "name": "Bootstrap" + }, + { + "npm": "jquery", + "version": "1.11.0", + "name": "jQuery" + }, + { + "npm": "modernizr", + "name": "Modernizr", + "version": "2.8.3" + }, + { + "npm": "isotope-layout", + "name": "Isotope" + }, + { + "version": "3.0.0: pure", + "npm": "core-js", + "name": "core-js" + } + ], + "type": "table", + "debugData": { + "stacks": [ + { + "version": "3.3.1", + "id": "bootstrap" + }, + { + "version": "1.11.0", + "id": "jquery" + }, + { + "id": "jquery-fast" + }, + { + "version": "2.8.3", + "id": "modernizr" + }, + { + "id": "isotope" + }, + { + "version": "3.0.0: pure", + "id": "corejs" + } + ], + "type": "debugdata" + }, + "summary": {}, + "headings": [ + { + "itemType": "text", + "key": "name", + "text": "Name" + }, + { + "key": "version", + "itemType": "text", + "text": "Version" + } + ] + } + }, + "long-tasks": { + "id": "long-tasks", + "title": "Avoid long main-thread tasks", + "description": "Lists the longest tasks on the main thread, useful for identifying worst contributors to input delay. [Learn more](https://web.dev/long-tasks-devtools/)", + "score": null, + "scoreDisplayMode": "informative", + "displayValue": "9 long tasks found", + "details": { + "headings": [ + { + "itemType": "url", + "key": "url", + "text": "URL" + }, + { + "text": "Start Time", + "key": "startTime", + "itemType": "ms", + "granularity": 1 + }, + { + "key": "duration", + "granularity": 1, + "text": "Duration", + "itemType": "ms" + } + ], + "items": [ + { + "url": "https://s7.addthis.com/js/300/addthis_widget.js", + "startTime": 4860, + "duration": 215 + }, + { + "duration": 179, + "startTime": 7230, + "url": "https://s7.addthis.com/static/layers.33f5b85045a5f2308467.js" + }, + { + "duration": 161, + "startTime": 6240, + "url": "https://connect.facebook.net/signals/config/179141459671554?v=2.9.22&r=stable" + }, + { + "duration": 156, + "startTime": 1710, + "url": "https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js" + }, + { + "url": "https://www.google-analytics.com/analytics.js", + "startTime": 2310, + "duration": 141 + }, + { + "duration": 97, + "startTime": 2910, + "url": "https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" + }, + { + "duration": 83, + "url": "https://blencorp.com/", + "startTime": 802 + }, + { + "startTime": 3007, + "url": "https://connect.facebook.net/en_US/fbevents.js", + "duration": 79 + }, + { + "duration": 62, + "url": "https://s7.addthis.com/static/sh.f48a1a04fe8dbf021b4cda1d.html#rand=0.3035931382429664&iit=1594335254822&tmr=load%3D1594335254753%26core%3D1594335254798%26main%3D1594335254815%26ifr%3D1594335254828&cb=0&cdn=0&md=0&kw=&ab=-&dh=blencorp.com&dr=&du=https%3A%2F%2Fblencorp.com%2F&href=https%3A%2F%2Fblencorp.com%2F&dt=Home&dbg=0&cap=tc%3D0%26ab%3D0&inst=1&jsl=1&prod=undefined&lng=en&ogt=description%2Ctype%3Dwebsite%2Ctitle%2Csite_name&pc=men&pub=ra-5bce424807b2e74c&ssl=1&sid=5f07a0162f6e5a80&srf=0.01&ver=300&xck=0&xtr=0&og=site_name%3DBLEN%2520Corp%26title%3DHome%26type%3Dwebsite%26description%3DCreative%2520folks%2520that%2520love%2520Drupal.&csi=undefined&rev=v8.28.7-wp&ct=1&xld=1&xd=1", + "startTime": 5820 + } + ], + "type": "table" + } + }, + "frame-title": { + "id": "frame-title", + "title": "`<frame>` or `<iframe>` elements have a title", + "description": "Screen reader users rely on frame titles to describe the contents of frames. [Learn more](https://web.dev/frame-title/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "bootup-time": { + "id": "bootup-time", + "title": "Reduce JavaScript execution time", + "description": "Consider reducing the time spent parsing, compiling, and executing JS. You may find delivering smaller JS payloads helps with this. [Learn more](https://web.dev/bootup-time/).", + "score": 0.85, + "scoreDisplayMode": "numeric", + "displayValue": "1.6 s", + "details": { + "headings": [ + { + "text": "URL", + "key": "url", + "itemType": "url" + }, + { + "itemType": "ms", + "granularity": 1, + "key": "total", + "text": "Total CPU Time" + }, + { + "granularity": 1, + "text": "Script Evaluation", + "itemType": "ms", + "key": "scripting" + }, + { + "key": "scriptParseCompile", + "text": "Script Parse", + "itemType": "ms", + "granularity": 1 + } + ], + "summary": { + "wastedMs": 1561.9360000000013 + }, + "items": [ + { + "url": "https://s7.addthis.com/js/300/addthis_widget.js", + "scripting": 440.49600000000106, + "total": 512.480000000001, + "scriptParseCompile": 30.684000000000005 + }, + { + "scriptParseCompile": 6.943999999999999, + "url": "https://blencorp.com/", + "scripting": 20.687999999999985, + "total": 449.21199999999993 + }, + { + "scripting": 204.91600000000008, + "scriptParseCompile": 3.9280000000000004, + "total": 285.1000000000001, + "url": "https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js" + }, + { + "url": "Unattributable", + "scriptParseCompile": 0.928, + "total": 211.29600000000053, + "scripting": 5.507999999999999 + }, + { + "scriptParseCompile": 19.192, + "total": 197.48000000000002, + "url": "https://s7.addthis.com/static/layers.33f5b85045a5f2308467.js", + "scripting": 165.14000000000001 + }, + { + "url": "https://connect.facebook.net/signals/config/179141459671554?v=2.9.22&r=stable", + "scripting": 128.94799999999998, + "total": 185.47599999999997, + "scriptParseCompile": 38.828 + }, + { + "total": 141.41200000000003, + "scriptParseCompile": 7.284, + "url": "https://www.google-analytics.com/analytics.js", + "scripting": 130.78000000000003 + }, + { + "scripting": 109.424, + "scriptParseCompile": 7.7, + "url": "https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js", + "total": 137.74 + }, + { + "url": "https://s7.addthis.com/static/sh.f48a1a04fe8dbf021b4cda1d.html#rand=0.3035931382429664&iit=1594335254822&tmr=load%3D1594335254753%26core%3D1594335254798%26main%3D1594335254815%26ifr%3D1594335254828&cb=0&cdn=0&md=0&kw=&ab=-&dh=blencorp.com&dr=&du=https%3A%2F%2Fblencorp.com%2F&href=https%3A%2F%2Fblencorp.com%2F&dt=Home&dbg=0&cap=tc%3D0%26ab%3D0&inst=1&jsl=1&prod=undefined&lng=en&ogt=description%2Ctype%3Dwebsite%2Ctitle%2Csite_name&pc=men&pub=ra-5bce424807b2e74c&ssl=1&sid=5f07a0162f6e5a80&srf=0.01&ver=300&xck=0&xtr=0&og=site_name%3DBLEN%2520Corp%26title%3DHome%26type%3Dwebsite%26description%3DCreative%2520folks%2520that%2520love%2520Drupal.&csi=undefined&rev=v8.28.7-wp&ct=1&xld=1&xd=1", + "scripting": 94.13200000000003, + "scriptParseCompile": 19.38, + "total": 125.15600000000003 + }, + { + "url": "https://connect.facebook.net/en_US/fbevents.js", + "scriptParseCompile": 13.347999999999999, + "total": 78.916, + "scripting": 60.536 + }, + { + "scriptParseCompile": 1.5799999999999998, + "total": 59.504000000000005, + "url": "https://blencorp.com/assets/js/carousel.js", + "scripting": 51.572 + } + ], + "type": "table" + }, + "numericValue": 1561.9360000000013 + }, + "http-status-code": { + "id": "http-status-code", + "title": "Page has successful HTTP status code", + "description": "Pages with unsuccessful HTTP status codes may not be indexed properly. [Learn more](https://web.dev/http-status-code/).", + "score": 1, + "scoreDisplayMode": "binary" + }, + "uses-text-compression": { + "id": "uses-text-compression", + "title": "Enable text compression", + "description": "Text-based resources should be served with compression (gzip, deflate or brotli) to minimize total network bytes. [Learn more](https://web.dev/uses-text-compression/).", + "score": 1, + "scoreDisplayMode": "numeric", + "details": { + "type": "opportunity", + "items": [], + "overallSavingsMs": 0, + "overallSavingsBytes": 0, + "headings": [] + }, + "numericValue": 0 + }, + "aria-hidden-focus": { + "id": "aria-hidden-focus", + "title": "`[aria-hidden=\"true\"]` elements do not contain focusable descendents", + "description": "Focusable descendents within an `[aria-hidden=\"true\"]` element prevent those interactive elements from being available to users of assistive technologies like screen readers. [Learn more](https://web.dev/aria-hidden-focus/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "without-javascript": { + "id": "without-javascript", + "title": "Contains some content when JavaScript is not available", + "description": "Your app should display some content when JavaScript is disabled, even if it's just a warning to the user that JavaScript is required to use the app. [Learn more](https://web.dev/without-javascript/).", + "score": 1, + "scoreDisplayMode": "binary" + }, + "unused-css-rules": { + "id": "unused-css-rules", + "title": "Remove unused CSS", + "description": "Remove dead rules from stylesheets and defer the loading of CSS not used for above-the-fold content to reduce unnecessary bytes consumed by network activity. [Learn more](https://web.dev/unused-css-rules/).", + "score": 0.88, + "scoreDisplayMode": "numeric", + "displayValue": "Potential savings of 17 KiB", + "details": { + "type": "opportunity", + "overallSavingsBytes": 17731, + "items": [ + { + "wastedBytes": 17731, + "wastedPercent": 92.46682760929707, + "totalBytes": 19176, + "url": "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" + } + ], + "overallSavingsMs": 150, + "headings": [ + { + "valueType": "url", + "key": "url", + "label": "URL" + }, + { + "key": "totalBytes", + "label": "Transfer Size", + "valueType": "bytes" + }, + { + "key": "wastedBytes", + "label": "Potential Savings", + "valueType": "bytes" + } + ] + }, + "numericValue": 150 + }, + "duplicate-id-active": { + "id": "duplicate-id-active", + "title": "`[id]` attributes on active, focusable elements are unique", + "description": "All focusable elements must have a unique `id` to ensure that they're visible to assistive technologies. [Learn more](https://web.dev/duplicate-id-active/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "meta-viewport": { + "id": "meta-viewport", + "title": "`[user-scalable=\"no\"]` is not used in the `<meta name=\"viewport\">` element and the `[maximum-scale]` attribute is not less than 5.", + "description": "Disabling zooming is problematic for users with low vision who rely on screen magnification to properly see the contents of a web page. [Learn more](https://web.dev/meta-viewport/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [], + "items": [] + } + }, + "unminified-javascript": { + "id": "unminified-javascript", + "title": "Minify JavaScript", + "description": "Minifying JavaScript files can reduce payload sizes and script parse time. [Learn more](https://web.dev/unminified-javascript/).", + "score": 1, + "scoreDisplayMode": "numeric", + "details": { + "overallSavingsBytes": 0, + "headings": [], + "items": [], + "type": "opportunity", + "overallSavingsMs": 0 + }, + "warnings": [], + "numericValue": 0 + }, + "largest-contentful-paint-element": { + "id": "largest-contentful-paint-element", + "title": "Largest Contentful Paint element", + "description": "This is the largest contentful element painted within the viewport. [Learn More](https://web.dev/lighthouse-largest-contentful-paint/)", + "score": null, + "scoreDisplayMode": "informative", + "displayValue": "1 element found", + "details": { + "headings": [ + { + "text": "Element", + "key": "node", + "itemType": "node" + } + ], + "items": [ + { + "node": { + "type": "node", + "snippet": "<div class=\"fill\" style=\"background-image:url('/assets/img/banners/banner-abc7.png');\">", + "path": "1,HTML,1,BODY,2,HEADER,3,DIV,0,DIV,0,DIV", + "selector": "header#banner > div.carousel-inner > div.item > div.fill", + "nodeLabel": "div" + } + } + ], + "type": "table" + } + }, + "total-blocking-time": { + "id": "total-blocking-time", + "title": "Total Blocking Time", + "description": "Sum of all time periods between FCP and Time to Interactive, when task length exceeded 50ms, expressed in milliseconds. [Learn more](https://web.dev/lighthouse-total-blocking-time/).", + "score": 0.69, + "scoreDisplayMode": "numeric", + "displayValue": "450 ms", + "numericValue": 453 + }, + "dom-size": { + "id": "dom-size", + "title": "Avoids an excessive DOM size", + "description": "A large DOM will increase memory usage, cause longer [style calculations](https://developers.google.com/web/fundamentals/performance/rendering/reduce-the-scope-and-complexity-of-style-calculations), and produce costly [layout reflows](https://developers.google.com/speed/articles/reflow). [Learn more](https://web.dev/dom-size/).", + "score": 1, + "scoreDisplayMode": "numeric", + "displayValue": "206 elements", + "details": { + "items": [ + { + "statistic": "Total DOM Elements", + "value": "206" + }, + { + "statistic": "Maximum DOM Depth", + "element": { + "type": "code", + "value": "<i class=\"fa fa-search\">" + }, + "value": "11" + }, + { + "element": { + "value": "<body class=\"front\">", + "type": "code" + }, + "statistic": "Maximum Child Elements", + "value": "19" + } + ], + "type": "table", + "headings": [ + { + "key": "statistic", + "itemType": "text", + "text": "Statistic" + }, + { + "key": "element", + "text": "Element", + "itemType": "code" + }, + { + "key": "value", + "text": "Value", + "itemType": "numeric" + } + ] + }, + "numericValue": 206 + }, + "plugins": { + "id": "plugins", + "title": "Document avoids plugins", + "description": "Search engines can't index plugin content, and many devices restrict plugins or don't support them. [Learn more](https://web.dev/plugins/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "headings": [], + "type": "table", + "items": [] + } + }, + "critical-request-chains": { + "id": "critical-request-chains", + "title": "Avoid chaining critical requests", + "description": "The Critical Request Chains below show you what resources are loaded with a high priority. Consider reducing the length of chains, reducing the download size of resources, or deferring the download of unnecessary resources to improve page load. [Learn more](https://web.dev/critical-request-chains/).", + "score": null, + "scoreDisplayMode": "informative", + "displayValue": "19 chains found", + "details": { + "longestChain": { + "duration": 425.39099999703467, + "transferSize": 116749, + "length": 2 + }, + "type": "criticalrequestchain", + "chains": { + "3902B466233DF615B0322AE992B2A233": { + "children": { + "23.61": { + "request": { + "endTime": 1076282.403442, + "responseReceivedTime": 1076282.40344, + "startTime": 1076282.326984, + "transferSize": 14678, + "url": "https://blencorp.com/assets/fonts/OpenSans-Semibold-webfont.woff" + } + }, + "23.4": { + "request": { + "url": "https://blencorp.com/assets/css/syntax.css", + "endTime": 1076282.240219, + "responseReceivedTime": 1076282.240216, + "transferSize": 1547, + "startTime": 1076282.121067 + } + }, + "23.21": { + "request": { + "url": "https://blencorp.com/assets/js/carousel.js", + "transferSize": 1547, + "responseReceivedTime": 1076282.382594, + "endTime": 1076282.382597, + "startTime": 1076282.317645 + } + }, + "23.34": { + "request": { + "endTime": 1076282.35887, + "startTime": 1076282.327293, + "url": "https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/fonts/fontawesome-webfont.woff?v=4.2.0", + "transferSize": 65915, + "responseReceivedTime": 1076282.3588679999 + } + }, + "23.16": { + "request": { + "responseReceivedTime": 1076282.2495900001, + "url": "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js", + "transferSize": 9912, + "endTime": 1076282.249595, + "startTime": 1076282.230895 + } + }, + "23.5": { + "request": { + "url": "https://blencorp.com/css/style.css", + "transferSize": 3215, + "responseReceivedTime": 1076282.202015, + "startTime": 1076282.121876, + "endTime": 1076282.202018 + } + }, + "23.22": { + "request": { + "responseReceivedTime": 1076282.382007, + "endTime": 1076282.382018, + "transferSize": 1126, + "url": "https://blencorp.com/assets/js/custom.js", + "startTime": 1076282.317854 + } + }, + "23.6": { + "request": { + "url": "https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js", + "endTime": 1076282.148471, + "transferSize": 5078, + "startTime": 1076282.122083, + "responseReceivedTime": 1076282.148469 + }, + "children": { + "23.59": { + "request": { + "startTime": 1076282.263052, + "transferSize": 14637, + "url": "https://blencorp.com/assets/fonts/OpenSans-Regular-webfont.woff", + "endTime": 1076282.295745, + "responseReceivedTime": 1076282.295743 + } + } + } + }, + "23.19": { + "request": { + "url": "https://blencorp.com/assets/js/jquery.prettyPhoto.js", + "responseReceivedTime": 1076282.339823, + "startTime": 1076282.316797, + "endTime": 1076282.339826, + "transferSize": 6729 + } + }, + "23.17": { + "request": { + "responseReceivedTime": 1076282.307694, + "url": "https://blencorp.com/assets/js/jquery.hoverdir.js", + "endTime": 1076282.307697, + "transferSize": 2619, + "startTime": 1076282.242469 + } + }, + "23.20": { + "request": { + "startTime": 1076282.317155, + "responseReceivedTime": 1076282.3998480001, + "transferSize": 5794, + "endTime": 1076282.399852, + "url": "https://blencorp.com/assets/js/jquery.isotope.min.js" + } + }, + "23.2": { + "request": { + "url": "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css", + "responseReceivedTime": 1076282.1477040001, + "transferSize": 19176, + "startTime": 1076282.119287, + "endTime": 1076282.147707 + } + }, + "23.3": { + "request": { + "endTime": 1076282.138223, + "transferSize": 5505, + "url": "https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css", + "responseReceivedTime": 1076282.13822, + "startTime": 1076282.120634 + } + }, + "23.23": { + "request": { + "endTime": 1076282.432831, + "responseReceivedTime": 1076282.4328289998, + "startTime": 1076282.318052, + "transferSize": 116749, + "url": "https://s7.addthis.com/js/300/addthis_widget.js" + } + }, + "23.29": { + "request": { + "endTime": 1076282.222802, + "responseReceivedTime": 1076282.222799, + "transferSize": 1921, + "startTime": 1076282.204049, + "url": "https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,700|Lato:400,900|Rokkitt" + } + }, + "23.31": { + "request": { + "startTime": 1076282.204915, + "url": "https://blencorp.com/assets/css/hoverex-all.css", + "transferSize": 5125, + "endTime": 1076282.224053, + "responseReceivedTime": 1076282.2240499998 + } + }, + "23.30": { + "request": { + "endTime": 1076282.229246, + "responseReceivedTime": 1076282.229242, + "transferSize": 3487, + "url": "https://blencorp.com/assets/css/prettyPhoto.css", + "startTime": 1076282.204623 + } + }, + "23.18": { + "request": { + "transferSize": 2114, + "endTime": 1076282.346933, + "responseReceivedTime": 1076282.346931, + "startTime": 1076282.316509, + "url": "https://blencorp.com/assets/js/jquery.hoverex.min.js" + } + }, + "23.15": { + "request": { + "startTime": 1076282.203568, + "endTime": 1076282.209129, + "responseReceivedTime": 1076282.209125, + "transferSize": 34295, + "url": "https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" + } + } + }, + "request": { + "endTime": 1076282.100105, + "startTime": 1076282.00744, + "transferSize": 4588, + "url": "https://blencorp.com/", + "responseReceivedTime": 1076282.1001010002 + } + } + } + } + }, + "deprecations": { + "id": "deprecations", + "title": "Avoids deprecated APIs", + "description": "Deprecated APIs will eventually be removed from the browser. [Learn more](https://web.dev/deprecations/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [], + "items": [] + } + }, + "input-image-alt": { + "id": "input-image-alt", + "title": "`<input type=\"image\">` elements have `[alt]` text", + "description": "When an image is being used as an `<input>` button, providing alternative text can help screen reader users understand the purpose of the button. [Learn more](https://web.dev/input-image-alt/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "html-lang-valid": { + "id": "html-lang-valid", + "title": "`<html>` element has a valid value for its `[lang]` attribute", + "description": "Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) helps screen readers announce text properly. [Learn more](https://web.dev/html-lang-valid/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "no-document-write": { + "id": "no-document-write", + "title": "Avoids `document.write()`", + "description": "For users on slow connections, external scripts dynamically injected via `document.write()` can delay page load by tens of seconds. [Learn more](https://web.dev/no-document-write/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "items": [], + "headings": [], + "type": "table" + } + }, + "accesskeys": { + "id": "accesskeys", + "title": "`[accesskey]` values are unique", + "description": "Access keys let users quickly focus a part of the page. For proper navigation, each access key must be unique. [Learn more](https://web.dev/accesskeys/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "uses-responsive-images": { + "id": "uses-responsive-images", + "title": "Properly size images", + "description": "Serve images that are appropriately-sized to save cellular data and improve load time. [Learn more](https://web.dev/uses-responsive-images/).", + "score": 1, + "scoreDisplayMode": "numeric", + "details": { + "type": "opportunity", + "headings": [], + "items": [], + "overallSavingsMs": 0, + "overallSavingsBytes": 0 + }, + "warnings": [], + "numericValue": 0 + }, + "use-landmarks": { + "id": "use-landmarks", + "title": "HTML5 landmark elements are used to improve navigation", + "description": "Landmark elements (<main>, <nav>, etc.) are used to improve the keyboard navigation of the page for assistive technology. [Learn more](https://web.dev/use-landmarks/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "aria-required-children": { + "id": "aria-required-children", + "title": "Elements with an ARIA `[role]` that require children to contain a specific `[role]` have all required children.", + "description": "Some ARIA parent roles must contain specific child roles to perform their intended accessibility functions. [Learn more](https://web.dev/aria-required-children/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "items": [], + "headings": [] + } + }, + "user-timings": { + "id": "user-timings", + "title": "User Timing marks and measures", + "description": "Consider instrumenting your app with the User Timing API to measure your app's real-world performance during key user experiences. [Learn more](https://web.dev/user-timings/).", + "score": null, + "scoreDisplayMode": "informative", + "displayValue": "1 user timing", + "details": { + "headings": [ + { + "key": "name", + "text": "Name", + "itemType": "text" + }, + { + "itemType": "text", + "text": "Type", + "key": "timingType" + }, + { + "granularity": 0.01, + "key": "startTime", + "text": "Start Time", + "itemType": "ms" + }, + { + "granularity": 0.01, + "key": "duration", + "text": "Duration", + "itemType": "ms" + } + ], + "type": "table", + "items": [ + { + "timingType": "Mark", + "name": "addthis.render_toolbox", + "startTime": 749.745 + } + ] + } + }, + "hreflang": { + "id": "hreflang", + "title": "Document has a valid `hreflang`", + "description": "hreflang links tell search engines what version of a page they should list in search results for a given language or region. [Learn more](https://web.dev/hreflang/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "headings": [], + "type": "table", + "items": [] + } + }, + "total-byte-weight": { + "id": "total-byte-weight", + "title": "Avoids enormous network payloads", + "description": "Large network payloads cost users real money and are highly correlated with long load times. [Learn more](https://web.dev/total-byte-weight/).", + "score": 1, + "scoreDisplayMode": "numeric", + "displayValue": "Total size was 719 KiB", + "details": { + "type": "table", + "headings": [ + { + "key": "url", + "itemType": "url", + "text": "URL" + }, + { + "key": "totalBytes", + "itemType": "bytes", + "text": "Transfer Size" + } + ], + "items": [ + { + "url": "https://connect.facebook.net/signals/config/179141459671554?v=2.9.22&r=stable", + "totalBytes": 135797 + }, + { + "totalBytes": 116749, + "url": "https://s7.addthis.com/js/300/addthis_widget.js" + }, + { + "totalBytes": 77975, + "url": "https://s7.addthis.com/static/layers.33f5b85045a5f2308467.js" + }, + { + "totalBytes": 65915, + "url": "https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/fonts/fontawesome-webfont.woff?v=4.2.0" + }, + { + "totalBytes": 35449, + "url": "https://connect.facebook.net/en_US/fbevents.js" + }, + { + "url": "https://blencorp.com/assets/img/banners/banner-abc7.png", + "totalBytes": 34739 + }, + { + "url": "https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js", + "totalBytes": 34295 + }, + { + "totalBytes": 26448, + "url": "https://blencorp.com/assets/img/project/portfolio-eleat.png" + }, + { + "url": "https://s7.addthis.com/static/sh.f48a1a04fe8dbf021b4cda1d.html", + "totalBytes": 25873 + }, + { + "url": "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css", + "totalBytes": 19176 + } + ] + }, + "numericValue": 736186 + }, + "aria-required-parent": { + "id": "aria-required-parent", + "title": "`[role]`s are contained by their required parent element", + "description": "Some ARIA child roles must be contained by specific parent roles to properly perform their intended accessibility functions. [Learn more](https://web.dev/aria-required-parent/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "headings": [], + "items": [], + "type": "table" + } + }, + "final-screenshot": { + "id": "final-screenshot", + "title": "Final Screenshot", + "description": "The last screenshot captured of the pageload.", + "score": null, + "scoreDisplayMode": "informative", + "details": { + "data": "data:image/jpeg;base64,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", + "type": "screenshot", + "timing": 508, + "timestamp": 1076282513644 + } + }, + "service-worker": { + "id": "service-worker", + "title": "Does not register a service worker that controls page and `start_url`", + "description": "The service worker is the technology that enables your app to use many Progressive Web App features, such as offline, add to homescreen, and push notifications. [Learn more](https://web.dev/service-worker/).", + "score": 0, + "scoreDisplayMode": "binary" + }, + "mainthread-work-breakdown": { + "id": "mainthread-work-breakdown", + "title": "Minimize main-thread work", + "description": "Consider reducing the time spent parsing, compiling and executing JS. You may find delivering smaller JS payloads helps with this. [Learn more](https://web.dev/mainthread-work-breakdown/)", + "score": 0.79, + "scoreDisplayMode": "numeric", + "displayValue": "2.6 s", + "details": { + "type": "table", + "headings": [ + { + "key": "groupLabel", + "text": "Category", + "itemType": "text" + }, + { + "granularity": 1, + "itemType": "ms", + "text": "Time Spent", + "key": "duration" + } + ], + "items": [ + { + "duration": 1505.3519999999937, + "group": "scriptEvaluation", + "groupLabel": "Script Evaluation" + }, + { + "duration": 392.51600000000053, + "group": "other", + "groupLabel": "Other" + }, + { + "group": "styleLayout", + "duration": 366.716, + "groupLabel": "Style & Layout" + }, + { + "groupLabel": "Script Parsing & Compilation", + "group": "scriptParseCompile", + "duration": 185.44 + }, + { + "duration": 117.11200000000001, + "groupLabel": "Parse HTML & CSS", + "group": "parseHTML" + }, + { + "group": "paintCompositeRender", + "groupLabel": "Rendering", + "duration": 50.12800000000004 + } + ] + }, + "numericValue": 2617.263999999994 + }, + "focusable-controls": { + "id": "focusable-controls", + "title": "Interactive controls are keyboard focusable", + "description": "Custom interactive controls are keyboard focusable and display a focus indicator. [Learn more](https://web.dev/focusable-controls/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "cumulative-layout-shift": { + "id": "cumulative-layout-shift", + "title": "Cumulative Layout Shift", + "description": "Cumulative Layout Shift measures the movement of visible elements within the viewport. [Learn more](https://web.dev/cls/).", + "score": 1, + "scoreDisplayMode": "numeric", + "displayValue": "0", + "details": { + "items": [ + { + "finalLayoutShiftTraceEventFound": true + } + ], + "type": "debugdata" + }, + "numericValue": 0 + }, + "listitem": { + "id": "listitem", + "title": "List items (`<li>`) are contained within `<ul>` or `<ol>` parent elements", + "description": "Screen readers require list items (`<li>`) to be contained within a parent `<ul>` or `<ol>` to be announced properly. [Learn more](https://web.dev/listitem/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "items": [], + "headings": [], + "type": "table" + } + }, + "viewport": { + "id": "viewport", + "title": "Has a `<meta name=\"viewport\">` tag with `width` or `initial-scale`", + "description": "Add a `<meta name=\"viewport\">` tag to optimize your app for mobile screens. [Learn more](https://web.dev/viewport/).", + "score": 1, + "scoreDisplayMode": "binary", + "warnings": [] + }, + "first-contentful-paint-3g": { + "id": "first-contentful-paint-3g", + "title": "First Contentful Paint (3G)", + "description": "First Contentful Paint 3G marks the time at which the first text or image is painted while on a 3G network. [Learn more](https://developers.google.com/web/tools/lighthouse/audits/first-contentful-paint).", + "score": 0.66, + "scoreDisplayMode": "numeric", + "displayValue": "5040 ms", + "numericValue": 5040 + }, + "aria-required-attr": { + "id": "aria-required-attr", + "title": "`[role]`s have all required `[aria-*]` attributes", + "description": "Some ARIA roles have required attributes that describe the state of the element to screen readers. [Learn more](https://web.dev/aria-required-attr/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "items": [], + "headings": [], + "type": "table" + } + }, + "first-meaningful-paint": { + "id": "first-meaningful-paint", + "title": "First Meaningful Paint", + "description": "First Meaningful Paint measures when the primary content of a page is visible. [Learn more](https://web.dev/first-meaningful-paint/).", + "score": 0.86, + "scoreDisplayMode": "numeric", + "displayValue": "2.6 s", + "numericValue": 2550 + }, + "interactive-element-affordance": { + "id": "interactive-element-affordance", + "title": "Interactive elements indicate their purpose and state", + "description": "Interactive elements, such as links and buttons, should indicate their state and be distinguishable from non-interactive elements. [Learn more](https://web.dev/interactive-element-affordance/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "heading-order": { + "id": "heading-order", + "title": "Heading elements are not in a sequentially-descending order", + "description": "Properly ordered headings that do not skip levels convey the semantic structure of the page, making it easier to navigate and understand when using assistive technologies. [Learn more](https://web.dev/heading-order/).", + "score": 0, + "scoreDisplayMode": "binary", + "details": { + "items": [ + { + "node": { + "type": "node", + "snippet": "<h4>About</h4>", + "selector": ".col-lg-4:nth-child(1) > h4", + "path": "1,HTML,1,BODY,10,DIV,0,DIV,0,DIV,0,DIV,0,H4", + "nodeLabel": "About", + "explanation": "Fix any of the following:\n Heading order invalid" + } + } + ], + "type": "table", + "debugData": { + "tags": [ + "cat.semantics", + "best-practice" + ], + "type": "debugdata", + "impact": "moderate" + }, + "headings": [ + { + "itemType": "node", + "text": "Failing Elements", + "key": "node" + } + ] + } + }, + "aria-roles": { + "id": "aria-roles", + "title": "`[role]` values are valid", + "description": "ARIA roles must have valid values in order to perform their intended accessibility functions. [Learn more](https://web.dev/aria-roles/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "headings": [], + "type": "table", + "items": [] + } + }, + "errors-in-console": { + "id": "errors-in-console", + "title": "Browser errors were logged to the console", + "description": "Errors logged to the console indicate unresolved problems. They can come from network request failures and other browser concerns. [Learn more](https://web.dev/errors-in-console/)", + "score": 0, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [ + { + "itemType": "url", + "key": "url", + "text": "URL" + }, + { + "key": "description", + "itemType": "code", + "text": "Description" + } + ], + "items": [ + { + "source": "Runtime.exception", + "url": "https://blencorp.com/assets/js/custom.js", + "description": "TypeError: $(...).formValidation is not a function\n at HTMLDocument.<anonymous> (https://blencorp.com/assets/js/custom.js:18:23)\n at j (https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js:2:27136)\n at Object.fireWith [as resolveWith] (https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js:2:27949)\n at Function.ready (https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js:2:29783)\n at HTMLDocument.K (https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js:2:30128)" + } + ] + } + }, + "pwa-page-transitions": { + "id": "pwa-page-transitions", + "title": "Page transitions don't feel like they block on the network", + "description": "Transitions should feel snappy as you tap around, even on a slow network. This experience is key to a user's perception of performance. [Learn more](https://web.dev/pwa-page-transitions/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "uses-passive-event-listeners": { + "id": "uses-passive-event-listeners", + "title": "Uses passive listeners to improve scrolling performance", + "description": "Consider marking your touch and wheel event listeners as `passive` to improve your page's scroll performance. [Learn more](https://web.dev/uses-passive-event-listeners/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "items": [], + "headings": [] + } + }, + "network-requests": { + "id": "network-requests", + "title": "Network Requests", + "description": "Lists the network requests that were made during page load.", + "score": null, + "scoreDisplayMode": "informative", + "details": { + "headings": [ + { + "text": "URL", + "key": "url", + "itemType": "url" + }, + { + "key": "startTime", + "itemType": "ms", + "granularity": 1, + "text": "Start Time" + }, + { + "text": "End Time", + "granularity": 1, + "itemType": "ms", + "key": "endTime" + }, + { + "key": "transferSize", + "granularity": 1, + "itemType": "bytes", + "text": "Transfer Size", + "displayUnit": "kb" + }, + { + "itemType": "bytes", + "key": "resourceSize", + "text": "Resource Size", + "granularity": 1, + "displayUnit": "kb" + }, + { + "key": "statusCode", + "itemType": "text", + "text": "Status Code" + }, + { + "itemType": "text", + "key": "mimeType", + "text": "MIME Type" + }, + { + "text": "Resource Type", + "itemType": "text", + "key": "resourceType" + } + ], + "items": [ + { + "resourceType": "Document", + "endTime": 92.66499988734722, + "finished": true, + "mimeType": "text/html", + "url": "https://blencorp.com/", + "startTime": 0, + "transferSize": 4588, + "resourceSize": 15706, + "statusCode": 200 + }, + { + "finished": true, + "url": "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css", + "resourceType": "Stylesheet", + "transferSize": 19176, + "startTime": 111.84699996374547, + "endTime": 140.26699983514845, + "mimeType": "text/css", + "resourceSize": 113498, + "statusCode": 200 + }, + { + "startTime": 113.19399997591972, + "mimeType": "text/css", + "url": "https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css", + "endTime": 130.7830000296235, + "resourceSize": 21984, + "transferSize": 5505, + "resourceType": "Stylesheet", + "finished": true, + "statusCode": 200 + }, + { + "url": "https://blencorp.com/assets/css/syntax.css", + "resourceType": "Stylesheet", + "statusCode": 200, + "endTime": 232.77899995446205, + "finished": true, + "resourceSize": 3820, + "mimeType": "text/css", + "transferSize": 1547, + "startTime": 113.62700001336634 + }, + { + "endTime": 194.57799987867475, + "mimeType": "text/css", + "transferSize": 3215, + "resourceSize": 10647, + "url": "https://blencorp.com/css/style.css", + "resourceType": "Stylesheet", + "statusCode": 200, + "finished": true, + "startTime": 114.4359998870641 + }, + { + "mimeType": "application/javascript", + "transferSize": 5078, + "resourceSize": 11084, + "url": "https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js", + "statusCode": 200, + "startTime": 114.64299983344972, + "resourceType": "Script", + "finished": true, + "endTime": 141.0309998318553 + }, + { + "url": "https://blencorp.com/assets/img/logo.png", + "transferSize": 1987, + "startTime": 311.0199999064207, + "statusCode": 200, + "resourceSize": 1341, + "finished": true, + "resourceType": "Image", + "mimeType": "image/png", + "endTime": 329.3639998883009 + }, + { + "mimeType": "image/png", + "endTime": 390.26000001467764, + "finished": true, + "resourceSize": 25798, + "transferSize": 26448, + "startTime": 311.32799992337823, + "url": "https://blencorp.com/assets/img/project/portfolio-eleat.png", + "statusCode": 200, + "resourceType": "Image" + }, + { + "resourceSize": 16243, + "url": "https://blencorp.com/assets/img/project/portfolio-cdcnpin.png", + "statusCode": 200, + "finished": true, + "endTime": 394.1760000307113, + "transferSize": 16893, + "startTime": 311.5459999535233, + "mimeType": "image/png", + "resourceType": "Image" + }, + { + "startTime": 311.73900002613664, + "statusCode": 200, + "url": "https://blencorp.com/assets/img/project/portfolio-callr.png", + "resourceType": "Image", + "mimeType": "image/png", + "finished": true, + "transferSize": 6928, + "resourceSize": 6279, + "endTime": 373.40599996969104 + }, + { + "startTime": 311.960999853909, + "endTime": 379.64599998667836, + "statusCode": 200, + "resourceType": "Image", + "mimeType": "image/png", + "transferSize": 3786, + "url": "https://blencorp.com/assets/img/clients/arlingtoncu.png", + "resourceSize": 3138, + "finished": true + }, + { + "finished": true, + "statusCode": 200, + "url": "https://blencorp.com/assets/img/clients/bio.png", + "endTime": 370.5659999977797, + "mimeType": "image/png", + "startTime": 312.13099998421967, + "resourceSize": 1642, + "resourceType": "Image", + "transferSize": 2288 + }, + { + "finished": true, + "startTime": 312.3159999959171, + "resourceSize": 2981, + "statusCode": 200, + "url": "https://blencorp.com/assets/img/clients/ed.png", + "mimeType": "image/png", + "transferSize": 3628, + "endTime": 372.94499995186925, + "resourceType": "Image" + }, + { + "endTime": 376.99000001884997, + "startTime": 312.7460000105202, + "url": "https://blencorp.com/assets/img/clients/geico.png", + "resourceType": "Image", + "statusCode": 200, + "finished": true, + "transferSize": 1999, + "resourceSize": 1354, + "mimeType": "image/png" + }, + { + "resourceType": "Script", + "endTime": 201.68900000862777, + "transferSize": 34295, + "resourceSize": 96381, + "startTime": 196.1280000396073, + "statusCode": 200, + "url": "https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js", + "mimeType": "text/javascript", + "finished": true + }, + { + "resourceType": "Script", + "url": "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/js/bootstrap.min.js", + "startTime": 223.45499997027218, + "statusCode": 200, + "resourceSize": 35601, + "mimeType": "text/javascript", + "finished": true, + "transferSize": 9912, + "endTime": 242.1549998689443 + }, + { + "resourceSize": 5307, + "startTime": 235.0289998576045, + "url": "https://blencorp.com/assets/js/jquery.hoverdir.js", + "mimeType": "application/javascript", + "endTime": 300.25699990801513, + "transferSize": 2619, + "resourceType": "Script", + "finished": true, + "statusCode": 200 + }, + { + "resourceType": "Script", + "transferSize": 2114, + "resourceSize": 3768, + "statusCode": 200, + "endTime": 339.4929999485612, + "startTime": 309.06899995170534, + "mimeType": "application/javascript", + "url": "https://blencorp.com/assets/js/jquery.hoverex.min.js", + "finished": true + }, + { + "url": "https://blencorp.com/assets/js/jquery.prettyPhoto.js", + "startTime": 309.356999816373, + "statusCode": 200, + "mimeType": "application/javascript", + "finished": true, + "resourceSize": 22060, + "transferSize": 6729, + "resourceType": "Script", + "endTime": 332.38599984906614 + }, + { + "finished": true, + "url": "https://blencorp.com/assets/js/jquery.isotope.min.js", + "statusCode": 200, + "startTime": 309.71499998122454, + "resourceSize": 16033, + "mimeType": "application/javascript", + "endTime": 392.4119998700917, + "resourceType": "Script", + "transferSize": 5794 + }, + { + "resourceType": "Script", + "transferSize": 1547, + "statusCode": 200, + "mimeType": "application/javascript", + "resourceSize": 2586, + "finished": true, + "endTime": 375.15700003132224, + "url": "https://blencorp.com/assets/js/carousel.js", + "startTime": 310.204999987036 + }, + { + "resourceSize": 764, + "statusCode": 200, + "resourceType": "Script", + "endTime": 374.57799981348217, + "url": "https://blencorp.com/assets/js/custom.js", + "startTime": 310.4139999486506, + "transferSize": 1126, + "mimeType": "application/javascript", + "finished": true + }, + { + "startTime": 310.6119998265058, + "statusCode": 200, + "url": "https://s7.addthis.com/js/300/addthis_widget.js", + "transferSize": 116749, + "resourceSize": 361292, + "endTime": 425.39099999703467, + "mimeType": "application/javascript", + "finished": true, + "resourceType": "Script" + }, + { + "endTime": 215.36199981346726, + "startTime": 196.6089999768883, + "resourceType": "Stylesheet", + "url": "https://fonts.googleapis.com/css?family=Source+Sans+Pro:400,700|Lato:400,900|Rokkitt", + "resourceSize": 7948, + "transferSize": 1921, + "mimeType": "text/css", + "statusCode": 200, + "finished": true + }, + { + "resourceType": "Stylesheet", + "finished": true, + "url": "https://blencorp.com/assets/css/prettyPhoto.css", + "startTime": 197.18299992382526, + "resourceSize": 19788, + "mimeType": "text/css", + "transferSize": 3487, + "statusCode": 200, + "endTime": 221.80599998682737 + }, + { + "endTime": 216.61300002597272, + "statusCode": 200, + "mimeType": "text/css", + "finished": true, + "resourceSize": 50809, + "resourceType": "Stylesheet", + "url": "https://blencorp.com/assets/css/hoverex-all.css", + "startTime": 197.4749998189509, + "transferSize": 5125 + }, + { + "url": "https://blencorp.com/assets/fonts/OpenSans-Regular-webfont.woff", + "finished": true, + "statusCode": 200, + "endTime": 288.30499993637204, + "mimeType": "font/woff", + "transferSize": 14637, + "resourceType": "Font", + "startTime": 255.61199989169836, + "resourceSize": 13988 + }, + { + "statusCode": 200, + "transferSize": 35449, + "url": "https://connect.facebook.net/en_US/fbevents.js", + "resourceType": "Script", + "mimeType": "application/x-javascript", + "resourceSize": 137171, + "startTime": 313.8989999424666, + "finished": true, + "endTime": 333.25799996964633 + }, + { + "url": "https://blencorp.com/assets/img/banners/banner-abc7.png", + "finished": true, + "resourceType": "Image", + "mimeType": "image/png", + "endTime": 388.25699989683926, + "startTime": 315.5269999988377, + "statusCode": 200, + "resourceSize": 34092, + "transferSize": 34739 + }, + { + "mimeType": "font/woff", + "endTime": 396.00199996493757, + "startTime": 319.5439998526126, + "url": "https://blencorp.com/assets/fonts/OpenSans-Semibold-webfont.woff", + "resourceSize": 14052, + "statusCode": 200, + "resourceType": "Font", + "finished": true, + "transferSize": 14678 + }, + { + "mimeType": "font/woff", + "transferSize": 65915, + "finished": true, + "statusCode": 200, + "url": "https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/fonts/fontawesome-webfont.woff?v=4.2.0", + "resourceSize": 65452, + "startTime": 319.85299987718463, + "resourceType": "Font", + "endTime": 351.4300000388175 + }, + { + "resourceType": "Script", + "statusCode": 200, + "startTime": 466.67899983003736, + "endTime": 500.8590000215918, + "transferSize": 135797, + "resourceSize": 534585, + "finished": true, + "mimeType": "application/x-javascript", + "url": "https://connect.facebook.net/signals/config/179141459671554?v=2.9.22&r=stable" + }, + { + "transferSize": 1420, + "statusCode": 200, + "mimeType": "application/x-javascript", + "endTime": 765.8309999387711, + "resourceSize": 1705, + "startTime": 552.2949998266995, + "url": "https://z.moatads.com/addthismoatframe568911941483/moatframe.js", + "resourceType": "Script", + "finished": true + }, + { + "statusCode": 200, + "startTime": 555.8259999379516, + "resourceType": "Script", + "endTime": 560.194999910891, + "transferSize": 19085, + "resourceSize": 45958, + "url": "https://www.google-analytics.com/analytics.js", + "finished": true, + "mimeType": "text/javascript" + }, + { + "statusCode": 200, + "resourceType": "Script", + "endTime": 916.1669998429716, + "mimeType": "application/javascript", + "transferSize": 1013, + "finished": true, + "url": "https://v1.addthisedge.com/live/boost/ra-5bce424807b2e74c/_ate.track.config_resp", + "startTime": 574.2760000284761, + "resourceSize": 2411 + }, + { + "transferSize": 2394, + "mimeType": "application/javascript", + "resourceSize": 136, + "finished": true, + "url": "https://m.addthis.com/live/red_lojson/300lo.json?si=5f07a0162f6e5a80&bkl=0&bl=1&pdt=115&sid=5f07a0162f6e5a80&pub=ra-5bce424807b2e74c&rev=v8.28.7-wp&ln=en&pc=men&cb=0&ab=-&dp=blencorp.com&fp=&fr=&of=0&pd=0&irt=0&vcl=0&md=0&ct=1&tct=0&abt=0&cdn=0&pi=1&rb=0&gen=100&chr=UTF-8&colc=1594335254833&jsl=1&uvs=5f07a016971a9b35000&skipb=1&callback=addthis.cbs.jsonp__28789409205185490", + "statusCode": 200, + "endTime": 717.4539999105036, + "startTime": 589.0469998121262, + "resourceType": "Script" + }, + { + "url": "https://s7.addthis.com/static/sh.f48a1a04fe8dbf021b4cda1d.html", + "finished": true, + "resourceType": "Document", + "statusCode": -1, + "transferSize": 0, + "startTime": 590.8699999563396, + "resourceSize": 0, + "endTime": 591.798999812454 + }, + { + "endTime": 624.381999950856, + "resourceSize": 69983, + "startTime": 597.6990000344813, + "finished": true, + "statusCode": 200, + "url": "https://s7.addthis.com/static/sh.f48a1a04fe8dbf021b4cda1d.html", + "transferSize": 25873, + "mimeType": "text/html", + "resourceType": "Document" + }, + { + "statusCode": 302, + "mimeType": "text/html", + "transferSize": 770, + "url": "https://www.google-analytics.com/r/collect?v=1&_v=j83&a=12959717&t=pageview&_s=1&dl=https%3A%2F%2Fblencorp.com%2F&ul=en-us&de=UTF-8&dt=BLEN%20Corp%20-%20Home&sd=24-bit&sr=360x640&vp=360x640&je=0&_u=IEBAAEAB~&jid=133109871&gjid=1469887649&cid=1109695716.1594335255&tid=UA-10810857-1&_gid=815729171.1594335255&_r=1&z=574826010", + "endTime": 655.799999833107, + "startTime": 645.3459998592734, + "resourceSize": 0, + "finished": true + }, + { + "mimeType": "text/html", + "resourceSize": 0, + "transferSize": 797, + "finished": true, + "url": "https://stats.g.doubleclick.net/r/collect?v=1&aip=1&t=dc&_r=3&tid=UA-10810857-1&cid=1109695716.1594335255&jid=133109871&_gid=815729171.1594335255&gjid=1469887649&_v=j83&z=574826010", + "startTime": 656.195999821648, + "endTime": 698.5239998903126, + "statusCode": 302 + }, + { + "startTime": 697.4400000181049, + "statusCode": 200, + "resourceSize": 44, + "finished": true, + "url": "https://www.facebook.com/tr/?id=179141459671554&ev=PageView&dl=https%3A%2F%2Fblencorp.com%2F&rl=&if=false&ts=1594335254943&sw=360&sh=640&v=2.9.22&r=stable&ec=0&o=30&fbp=fb.1.1594335254941.1781151764&it=1594335254713&coo=false&rqm=GET", + "endTime": 712.8520000260323, + "resourceType": "Image", + "transferSize": 613, + "mimeType": "image/gif" + }, + { + "startTime": 698.706999886781, + "mimeType": "image/gif", + "resourceSize": 42, + "endTime": 707.0090000052005, + "url": "https://www.google.com/ads/ga-audiences?v=1&aip=1&t=sr&_r=4&tid=UA-10810857-1&cid=1109695716.1594335255&jid=133109871&_v=j83&z=574826010", + "resourceType": "Image", + "finished": true, + "statusCode": 200, + "transferSize": 689 + }, + { + "finished": true, + "resourceSize": 23901, + "mimeType": "application/javascript", + "startTime": 745.7510000094771, + "resourceType": "Script", + "statusCode": 200, + "url": "https://s7.addthis.com/static/menu.c9fe060fcef7c720d644.js", + "endTime": 766.8869998306036, + "transferSize": 9395 + }, + { + "endTime": 1095.6869998481125, + "startTime": 920.6969998776913, + "resourceSize": 269215, + "resourceType": "Script", + "finished": true, + "url": "https://s7.addthis.com/static/layers.33f5b85045a5f2308467.js", + "transferSize": 77975, + "mimeType": "application/javascript", + "statusCode": 200 + }, + { + "resourceSize": 44, + "mimeType": "image/gif", + "startTime": 1203.0070000328124, + "endTime": 1219.0329998265952, + "transferSize": 463, + "finished": true, + "resourceType": "Image", + "url": "https://www.facebook.com/tr/?id=179141459671554&ev=Microdata&dl=https%3A%2F%2Fblencorp.com%2F&rl=&if=false&ts=1594335255449&cd[DataLayer]=%5B%5D&cd[Meta]=%7B%22title%22%3A%22BLEN%20Corp%20-%20Home%22%2C%22meta%3Adescription%22%3A%22%22%7D&cd[OpenGraph]=%7B%22og%3Asite_name%22%3A%22BLEN%20Corp%22%2C%22og%3Atitle%22%3A%22Home%22%2C%22og%3Atype%22%3A%22website%22%2C%22og%3Adescription%22%3A%22Creative%20folks%20that%20love%20Drupal.%22%7D&cd[Schema.org]=%5B%5D&cd[JSON-LD]=%5B%5D&sw=360&sh=640&v=2.9.22&r=stable&ec=1&o=30&fbp=fb.1.1594335254941.1781151764&it=1594335254713&coo=false&es=automatic&tm=3&rqm=GET", + "statusCode": 200 + } + ], + "type": "table" + } + }, + "link-name": { + "id": "link-name", + "title": "Links do not have a discernible name", + "description": "Link text (and alternate text for images, when used as links) that is discernible, unique, and focusable improves the navigation experience for screen reader users. [Learn more](https://web.dev/link-name/).", + "score": 0, + "scoreDisplayMode": "binary", + "details": { + "items": [ + { + "node": { + "type": "node", + "snippet": "<a class=\"left carousel-control\" href=\"#banner\" data-slide=\"prev\">\n <span class=\"icon-prev\"></span>\n </a>", + "path": "1,HTML,1,BODY,2,HEADER,5,A", + "selector": ".left", + "explanation": "Fix all of the following:\n Element is in tab order and does not have accessible text\n\nFix any of the following:\n Element does not have text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element's default semantics were not overridden with role=\"presentation\"\n Element's default semantics were not overridden with role=\"none\"", + "nodeLabel": "a" + } + }, + { + "node": { + "snippet": "<a class=\"right carousel-control\" href=\"#banner\" data-slide=\"next\">\n <span class=\"icon-next\"></span>\n </a>", + "nodeLabel": "a", + "path": "1,HTML,1,BODY,2,HEADER,6,A", + "explanation": "Fix all of the following:\n Element is in tab order and does not have accessible text\n\nFix any of the following:\n Element does not have text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element's default semantics were not overridden with role=\"presentation\"\n Element's default semantics were not overridden with role=\"none\"", + "selector": ".right", + "type": "node" + } + }, + { + "node": { + "type": "node", + "snippet": "<a href=\"http://www.facebook.com/blencorp\" class=\"btn-social btn-outline\"><i class=\"fa fa-facebook\"></i></a>", + "selector": ".btn-social.btn-outline:nth-child(1)", + "nodeLabel": "a", + "path": "1,HTML,1,BODY,10,DIV,0,DIV,0,DIV,1,DIV,2,P,0,A", + "explanation": "Fix all of the following:\n Element is in tab order and does not have accessible text\n\nFix any of the following:\n Element does not have text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element's default semantics were not overridden with role=\"presentation\"\n Element's default semantics were not overridden with role=\"none\"" + } + }, + { + "node": { + "snippet": "<a href=\"http://www.twitter.com/blencorp\" class=\"btn-social btn-outline\"><i class=\"fa fa-twitter\"></i></a>", + "type": "node", + "nodeLabel": "a", + "selector": ".btn-social.btn-outline:nth-child(2)", + "explanation": "Fix all of the following:\n Element is in tab order and does not have accessible text\n\nFix any of the following:\n Element does not have text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element's default semantics were not overridden with role=\"presentation\"\n Element's default semantics were not overridden with role=\"none\"", + "path": "1,HTML,1,BODY,10,DIV,0,DIV,0,DIV,1,DIV,2,P,1,A" + } + }, + { + "node": { + "type": "node", + "selector": "a[href$=\"blencorp\"]:nth-child(3)", + "explanation": "Fix all of the following:\n Element is in tab order and does not have accessible text\n\nFix any of the following:\n Element does not have text that is visible to screen readers\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element's default semantics were not overridden with role=\"presentation\"\n Element's default semantics were not overridden with role=\"none\"", + "snippet": "<a href=\"http://instagram.com/blencorp\" class=\"btn-social btn-outline\"><i class=\"fa fa-instagram\"></i></a>", + "path": "1,HTML,1,BODY,10,DIV,0,DIV,0,DIV,1,DIV,2,P,2,A", + "nodeLabel": "a" + } + } + ], + "type": "table", + "debugData": { + "tags": [ + "cat.name-role-value", + "wcag2a", + "wcag412", + "wcag244", + "section508", + "section508.22.a" + ], + "impact": "serious", + "type": "debugdata" + }, + "headings": [ + { + "text": "Failing Elements", + "key": "node", + "itemType": "node" + } + ] + } + }, + "form-field-multiple-labels": { + "id": "form-field-multiple-labels", + "title": "No form fields have multiple labels", + "description": "Form fields with multiple labels can be confusingly announced by assistive technologies like screen readers which use either the first, the last, or all of the labels. [Learn more](https://web.dev/form-field-multiple-labels/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "video-description": { + "id": "video-description", + "title": "`<video>` elements contain a `<track>` element with `[kind=\"description\"]`", + "description": "Audio descriptions provide relevant information for videos that dialogue cannot, such as facial expressions and scenes. [Learn more](https://web.dev/video-description/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "font-display": { + "id": "font-display", + "title": "Ensure text remains visible during webfont load", + "description": "Leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. [Learn more](https://web.dev/font-display/).", + "score": 0, + "scoreDisplayMode": "binary", + "details": { + "headings": [ + { + "text": "URL", + "key": "url", + "itemType": "url" + }, + { + "itemType": "ms", + "key": "wastedMs", + "text": "Potential Savings" + } + ], + "items": [ + { + "url": "https://blencorp.com/assets/fonts/OpenSans-Regular-webfont.woff", + "wastedMs": 32.69300004467368 + }, + { + "url": "https://blencorp.com/assets/fonts/OpenSans-Semibold-webfont.woff", + "wastedMs": 76.45800011232495 + }, + { + "wastedMs": 31.577000161632895, + "url": "https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/fonts/fontawesome-webfont.woff?v=4.2.0" + } + ], + "type": "table" + }, + "warnings": [] + }, + "uses-rel-preconnect": { + "id": "uses-rel-preconnect", + "title": "Preconnect to required origins", + "description": "Consider adding `preconnect` or `dns-prefetch` resource hints to establish early connections to important third-party origins. [Learn more](https://web.dev/uses-rel-preconnect/).", + "score": 1, + "scoreDisplayMode": "numeric", + "details": { + "overallSavingsMs": 0, + "headings": [], + "items": [], + "type": "opportunity" + }, + "warnings": [], + "numericValue": 0 + }, + "network-rtt": { + "id": "network-rtt", + "title": "Network Round Trip Times", + "description": "Network round trip times (RTT) have a large impact on performance. If the RTT to an origin is high, it's an indication that servers closer to the user could improve performance. [Learn more](https://hpbn.co/primer-on-latency-and-bandwidth/).", + "score": null, + "scoreDisplayMode": "informative", + "displayValue": "0 ms", + "details": { + "headings": [], + "type": "table", + "items": [] + }, + "numericValue": 0 + }, + "installable-manifest": { + "id": "installable-manifest", + "title": "Web app manifest does not meet the installability requirements", + "description": "Browsers can proactively prompt users to add your app to their homescreen, which can lead to higher engagement. [Learn more](https://web.dev/installable-manifest/).", + "score": 0, + "scoreDisplayMode": "binary", + "explanation": "Failures: No manifest was fetched.", + "details": { + "type": "debugdata", + "items": [ + { + "parseFailureReason": "No manifest was fetched", + "isParseFailure": true, + "failures": [ + "No manifest was fetched" + ] + } + ] + } + }, + "color-contrast": { + "id": "color-contrast", + "title": "Background and foreground colors do not have a sufficient contrast ratio.", + "description": "Low-contrast text is difficult or impossible for many users to read. [Learn more](https://web.dev/color-contrast/).", + "score": 0, + "scoreDisplayMode": "binary", + "details": { + "headings": [ + { + "text": "Failing Elements", + "key": "node", + "itemType": "node" + } + ], + "type": "table", + "debugData": { + "tags": [ + "cat.color", + "wcag2aa", + "wcag143" + ], + "type": "debugdata", + "impact": "serious" + }, + "items": [ + { + "node": { + "type": "node", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "nodeLabel": "Planning", + "selector": ".col-md-4:nth-child(1) > .list-unstyled > li:nth-child(1)", + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,0,DIV,3,UL,0,LI", + "snippet": "<li>Planning</li>" + } + }, + { + "node": { + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,0,DIV,3,UL,1,LI", + "nodeLabel": "Research", + "snippet": "<li>Research</li>", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "type": "node", + "selector": ".col-md-4:nth-child(1) > .list-unstyled > li:nth-child(2)" + } + }, + { + "node": { + "nodeLabel": "\u0003A/B Testing", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,0,DIV,3,UL,2,LI", + "snippet": "<li>\u0003A/B Testing</li>", + "selector": ".col-md-4:nth-child(1) > .list-unstyled > li:nth-child(3)", + "type": "node" + } + }, + { + "node": { + "nodeLabel": "\u0003Web Strategy", + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,0,DIV,3,UL,3,LI", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "selector": ".col-md-4:nth-child(1) > .list-unstyled > li:nth-child(4)", + "snippet": "<li>\u0003Web Strategy</li>", + "type": "node" + } + }, + { + "node": { + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,0,DIV,3,UL,4,LI", + "snippet": "<li>\u0003System Architecture\u0003</li>", + "selector": ".col-md-4:nth-child(1) > .list-unstyled > li:nth-child(5)", + "nodeLabel": "\u0003System Architecture\u0003", + "type": "node", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1" + } + }, + { + "node": { + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,1,DIV,3,UL,0,LI", + "type": "node", + "nodeLabel": "Information Architecture", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "selector": ".col-md-4:nth-child(2) > .list-unstyled > li:nth-child(1)", + "snippet": "<li>Information Architecture</li>" + } + }, + { + "node": { + "snippet": "<li>Wireframes</li>", + "type": "node", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "selector": ".col-md-4:nth-child(2) > .list-unstyled > li:nth-child(2)", + "nodeLabel": "Wireframes", + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,1,DIV,3,UL,1,LI" + } + }, + { + "node": { + "type": "node", + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,1,DIV,3,UL,2,LI", + "selector": ".col-md-4:nth-child(2) > .list-unstyled > li:nth-child(3)", + "snippet": "<li>\u0003Prototypes</li>", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "nodeLabel": "\u0003Prototypes" + } + }, + { + "node": { + "nodeLabel": "\u0003UI/UX Design\u0003", + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,1,DIV,3,UL,3,LI", + "snippet": "<li>\u0003UI/UX Design\u0003</li>", + "type": "node", + "selector": ".col-md-4:nth-child(2) > .list-unstyled > li:nth-child(4)", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1" + } + }, + { + "node": { + "selector": ".col-md-4:nth-child(2) > .list-unstyled > li:nth-child(5)", + "snippet": "<li>Usability Testing\u0003</li>", + "nodeLabel": "Usability Testing\u0003", + "type": "node", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,1,DIV,3,UL,4,LI" + } + }, + { + "node": { + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "nodeLabel": "Visual Design\u0003", + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,1,DIV,3,UL,5,LI", + "type": "node", + "snippet": "<li>Visual Design\u0003</li>", + "selector": "li:nth-child(6)" + } + }, + { + "node": { + "snippet": "<li>Branding\u0003</li>", + "type": "node", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "nodeLabel": "Branding\u0003", + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,1,DIV,3,UL,6,LI", + "selector": "li:nth-child(7)" + } + }, + { + "node": { + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "selector": ".col-md-4:nth-child(3) > .list-unstyled > li:nth-child(1)", + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,2,DIV,3,UL,0,LI", + "type": "node", + "snippet": "<li>\u0003Mobile (iOS & Android)</li>", + "nodeLabel": "\u0003Mobile (iOS & Android)" + } + }, + { + "node": { + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,2,DIV,3,UL,1,LI", + "nodeLabel": "Drupal", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "selector": ".col-md-4:nth-child(3) > .list-unstyled > li:nth-child(2)", + "snippet": "<li>Drupal</li>", + "type": "node" + } + }, + { + "node": { + "type": "node", + "snippet": "<li>WordPress</li>", + "selector": ".col-md-4:nth-child(3) > .list-unstyled > li:nth-child(3)", + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,2,DIV,3,UL,2,LI", + "nodeLabel": "WordPress", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1" + } + }, + { + "node": { + "type": "node", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "snippet": "<li>Database</li>", + "selector": ".col-md-4:nth-child(3) > .list-unstyled > li:nth-child(4)", + "nodeLabel": "Database", + "path": "1,HTML,1,BODY,3,DIV,0,DIV,0,DIV,2,DIV,3,UL,3,LI" + } + }, + { + "node": { + "path": "1,HTML,1,BODY,5,DIV,0,DIV,1,DIV,0,DIV,0,DIV,1,H4", + "nodeLabel": "Eleat", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 13.5pt (18px), font weight: normal). Expected contrast ratio of 4.5:1", + "type": "node", + "snippet": "<h4 style=\"line-height: 22px !important; font-weight: 600; font-size: 18px; color\">Eleat</h4>", + "selector": ".col-centered.col-md-4:nth-child(1) > div > h4" + } + }, + { + "node": { + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 13.5pt (18px), font weight: normal). Expected contrast ratio of 4.5:1", + "snippet": "<h4 style=\"line-height: 22px !important; font-weight: 600; font-size: 18px; color\">CDC NPIN</h4>", + "selector": ".col-centered.col-md-4:nth-child(2) > div > h4", + "nodeLabel": "CDC NPIN", + "type": "node", + "path": "1,HTML,1,BODY,5,DIV,0,DIV,1,DIV,1,DIV,0,DIV,1,H4" + } + }, + { + "node": { + "type": "node", + "selector": ".col-centered.col-md-4:nth-child(3) > div > h4", + "nodeLabel": "Callr", + "path": "1,HTML,1,BODY,5,DIV,0,DIV,1,DIV,2,DIV,0,DIV,1,H4", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.47 (foreground color: #777777, background color: #ffffff, font size: 13.5pt (18px), font weight: normal). Expected contrast ratio of 4.5:1", + "snippet": "<h4 style=\"line-height: 22px !important; font-weight: 600; font-size: 18px; color\">Callr</h4>" + } + }, + { + "node": { + "nodeLabel": "Our Certifications\nDistrict of Columbia Certified Business Enterprise (DC CBE)\n…", + "path": "1,HTML,1,BODY,6,DIV,0,DIV,0,DIV", + "snippet": "<div class=\"row centered\">", + "type": "node", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 4.18 (foreground color: #777777, background color: #f7f7f7, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "selector": "#certwrap > .container > .centered.row" + } + }, + { + "node": { + "type": "node", + "snippet": "<a href=\"http://www.blencorp.com/projects\">projects</a>", + "path": "1,HTML,1,BODY,10,DIV,0,DIV,0,DIV,0,DIV,2,P,1,A", + "explanation": "Fix any of the following:\n Element has insufficient color contrast of 3.65 (foreground color: #428bca, background color: #2d3032, font size: 10.5pt (14px), font weight: normal). Expected contrast ratio of 4.5:1", + "nodeLabel": "projects", + "selector": ".col-lg-4:nth-child(1) > p > a" + } + } + ] + } + }, + "duplicate-id-aria": { + "id": "duplicate-id-aria", + "title": "ARIA IDs are unique", + "description": "The value of an ARIA ID must be unique to prevent other instances from being overlooked by assistive technologies. [Learn more](https://web.dev/duplicate-id-aria/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "dlitem": { + "id": "dlitem", + "title": "Definition list items are wrapped in `<dl>` elements", + "description": "Definition list items (`<dt>` and `<dd>`) must be wrapped in a parent `<dl>` element to ensure that screen readers can properly announce them. [Learn more](https://web.dev/dlitem/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "splash-screen": { + "id": "splash-screen", + "title": "Is not configured for a custom splash screen", + "description": "A themed splash screen ensures a high-quality experience when users launch your app from their homescreens. [Learn more](https://web.dev/splash-screen/).", + "score": 0, + "scoreDisplayMode": "binary", + "explanation": "Failures: No manifest was fetched.", + "details": { + "items": [ + { + "isParseFailure": true, + "failures": [ + "No manifest was fetched" + ], + "parseFailureReason": "No manifest was fetched" + } + ], + "type": "debugdata" + } + }, + "image-aspect-ratio": { + "id": "image-aspect-ratio", + "title": "Displays images with correct aspect ratio", + "description": "Image display dimensions should match natural aspect ratio. [Learn more](https://web.dev/image-aspect-ratio/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "items": [], + "headings": [], + "type": "table" + }, + "warnings": [] + }, + "list": { + "id": "list", + "title": "Lists contain only `<li>` elements and script supporting elements (`<script>` and `<template>`).", + "description": "Screen readers have a specific way of announcing lists. Ensuring proper list structure aids screen reader output. [Learn more](https://web.dev/list/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "items": [], + "type": "table", + "headings": [] + } + }, + "appcache-manifest": { + "id": "appcache-manifest", + "title": "Avoids Application Cache", + "description": "Application Cache is deprecated. [Learn more](https://web.dev/appcache-manifest/).", + "score": 1, + "scoreDisplayMode": "binary" + }, + "notification-on-start": { + "id": "notification-on-start", + "title": "Avoids requesting the notification permission on page load", + "description": "Users are mistrustful of or confused by sites that request to send notifications without context. Consider tying the request to user gestures instead. [Learn more](https://web.dev/notification-on-start/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "headings": [], + "type": "table", + "items": [] + } + }, + "no-vulnerable-libraries": { + "id": "no-vulnerable-libraries", + "title": "Includes front-end JavaScript libraries with known security vulnerabilities", + "description": "Some third-party scripts may contain known security vulnerabilities that are easily identified and exploited by attackers. [Learn more](https://web.dev/no-vulnerable-libraries/).", + "score": 0, + "scoreDisplayMode": "binary", + "displayValue": "9 vulnerabilities detected", + "details": { + "type": "table", + "items": [ + { + "highestSeverity": "Medium", + "vulnCount": 5, + "detectedLib": { + "url": "https://snyk.io/vuln/npm:bootstrap?lh=3.3.1&utm_source=lighthouse&utm_medium=ref&utm_campaign=audit", + "type": "link", + "text": "Bootstrap@3.3.1" + } + }, + { + "detectedLib": { + "text": "jQuery@1.11.0", + "type": "link", + "url": "https://snyk.io/vuln/npm:jquery?lh=1.11.0&utm_source=lighthouse&utm_medium=ref&utm_campaign=audit" + }, + "vulnCount": 4, + "highestSeverity": "Medium" + } + ], + "headings": [ + { + "key": "detectedLib", + "text": "Library Version", + "itemType": "link" + }, + { + "text": "Vulnerability Count", + "itemType": "text", + "key": "vulnCount" + }, + { + "itemType": "text", + "text": "Highest Severity", + "key": "highestSeverity" + } + ], + "summary": {} + } + }, + "custom-controls-roles": { + "id": "custom-controls-roles", + "title": "Custom controls have ARIA roles", + "description": "Custom interactive controls have appropriate ARIA roles. [Learn more](https://web.dev/custom-control-roles/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "render-blocking-resources": { + "id": "render-blocking-resources", + "title": "Eliminate render-blocking resources", + "description": "Resources are blocking the first paint of your page. Consider delivering critical JS/CSS inline and deferring all non-critical JS/styles. [Learn more](https://web.dev/render-blocking-resources/).", + "score": 0.73, + "scoreDisplayMode": "numeric", + "displayValue": "Potential savings of 330 ms", + "details": { + "type": "opportunity", + "items": [ + { + "url": "https://maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css", + "totalBytes": 19176, + "wastedMs": 1230 + }, + { + "url": "https://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css", + "wastedMs": 930, + "totalBytes": 5505 + }, + { + "wastedMs": 180, + "url": "https://blencorp.com/assets/css/syntax.css", + "totalBytes": 1547 + }, + { + "wastedMs": 630, + "totalBytes": 3215, + "url": "https://blencorp.com/css/style.css" + }, + { + "wastedMs": 930, + "totalBytes": 5078, + "url": "https://cdnjs.cloudflare.com/ajax/libs/modernizr/2.8.3/modernizr.min.js" + } + ], + "headings": [ + { + "key": "url", + "label": "URL", + "valueType": "url" + }, + { + "label": "Transfer Size", + "key": "totalBytes", + "valueType": "bytes" + }, + { + "label": "Potential Savings", + "key": "wastedMs", + "valueType": "timespanMs" + } + ], + "overallSavingsMs": 330 + }, + "numericValue": 330 + }, + "is-crawlable": { + "id": "is-crawlable", + "title": "Page isn’t blocked from indexing", + "description": "Search engines are unable to include your pages in search results if they don't have permission to crawl them. [Learn more](https://web.dev/is-crawable/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "headings": [], + "items": [] + } + }, + "label": { + "id": "label", + "title": "Form elements have associated labels", + "description": "Labels ensure that form controls are announced properly by assistive technologies, like screen readers. [Learn more](https://web.dev/label/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "aria-allowed-attr": { + "id": "aria-allowed-attr", + "title": "`[aria-*]` attributes match their roles", + "description": "Each ARIA `role` supports a specific subset of `aria-*` attributes. Mismatching these invalidates the `aria-*` attributes. [Learn more](https://web.dev/aria-allowed-attr/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "redirects-http": { + "id": "redirects-http", + "title": "Redirects HTTP traffic to HTTPS", + "description": "If you've already set up HTTPS, make sure that you redirect all HTTP traffic to HTTPS in order to enable secure web features for all your users. [Learn more](https://web.dev/redirects-http/).", + "score": 1, + "scoreDisplayMode": "binary" + }, + "unused-javascript": { + "id": "unused-javascript", + "title": "Remove unused JavaScript", + "description": "Remove unused JavaScript to reduce bytes consumed by network activity. [Learn more](https://web.dev/remove-unused-code/).", + "score": 0.34, + "scoreDisplayMode": "numeric", + "displayValue": "Potential savings of 245 KiB", + "details": { + "type": "opportunity", + "items": [ + { + "url": "https://connect.facebook.net/signals/config/179141459671554?v=2.9.22&r=stable", + "wastedBytes": 116747, + "wastedPercent": 85.9717350842242, + "totalBytes": 135797 + }, + { + "wastedPercent": 51.0117882814684, + "totalBytes": 116749, + "wastedBytes": 59556, + "url": "https://s7.addthis.com/js/300/addthis_widget.js" + }, + { + "wastedBytes": 41397, + "totalBytes": 77975, + "wastedPercent": 53.09069837413776, + "url": "https://s7.addthis.com/static/layers.33f5b85045a5f2308467.js" + }, + { + "totalBytes": 69768, + "wastedBytes": 32812, + "wastedPercent": 47.0301570920766, + "url": "https://s7.addthis.com/static/sh.f48a1a04fe8dbf021b4cda1d.html" + } + ], + "overallSavingsBytes": 250512, + "overallSavingsMs": 2100, + "headings": [ + { + "subItemsHeading": { + "valueType": "code", + "key": "source" + }, + "valueType": "url", + "key": "url", + "label": "URL" + }, + { + "key": "totalBytes", + "valueType": "bytes", + "label": "Transfer Size", + "subItemsHeading": { + "key": "sourceBytes" + } + }, + { + "subItemsHeading": { + "key": "sourceWastedBytes" + }, + "key": "wastedBytes", + "label": "Potential Savings", + "valueType": "bytes" + } + ] + }, + "numericValue": 2100 + }, + "focus-traps": { + "id": "focus-traps", + "title": "User focus is not accidentally trapped in a region", + "description": "A user can tab into and out of any control or region without accidentally trapping their focus. [Learn more](https://web.dev/focus-traps/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "server-response-time": { + "id": "server-response-time", + "title": "Initial server response time was short", + "description": "Keep the server response time for the main document short because all other requests depend on it. [Learn more](https://web.dev/time-to-first-byte/).", + "score": 1, + "scoreDisplayMode": "binary", + "displayValue": "Root document took 90 ms", + "details": { + "overallSavingsMs": -506.339, + "items": [], + "headings": [], + "type": "opportunity" + }, + "numericValue": 93.661 + }, + "valid-lang": { + "id": "valid-lang", + "title": "`[lang]` attributes have a valid value", + "description": "Specifying a valid [BCP 47 language](https://www.w3.org/International/questions/qa-choosing-language-tags#question) on elements helps ensure that text is pronounced correctly by a screen reader. [Learn more](https://web.dev/valid-lang/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "third-party-summary": { + "id": "third-party-summary", + "title": "Reduce the impact of third-party code", + "description": "Third-party code can significantly impact load performance. Limit the number of redundant third-party providers and try to load third-party code after your page has primarily finished loading. [Learn more](https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/loading-third-party-javascript/).", + "score": 0, + "scoreDisplayMode": "binary", + "displayValue": "Third-party code blocked the main thread for 670 ms", + "details": { + "items": [ + { + "transferSize": 233399, + "mainThreadTime": 938.647999999998, + "entity": { + "type": "link", + "url": "http://www.addthis.com/", + "text": "AddThis" + }, + "blockingTime": 356.79600000000005 + }, + { + "mainThreadTime": 285.1000000000002, + "entity": { + "url": "https://cdnjs.com/", + "text": "Cloudflare CDN", + "type": "link" + }, + "transferSize": 5078, + "blockingTime": 149.252 + }, + { + "transferSize": 19855, + "mainThreadTime": 141.41200000000006, + "entity": { + "type": "link", + "url": "https://www.google.com/analytics/analytics/", + "text": "Google Analytics" + }, + "blockingTime": 76.916 + }, + { + "blockingTime": 63.03999999999999, + "mainThreadTime": 264.3920000000001, + "entity": { + "type": "link", + "text": "Facebook", + "url": "https://www.facebook.com" + }, + "transferSize": 172322 + }, + { + "blockingTime": 28.14, + "mainThreadTime": 137.73999999999998, + "entity": { + "text": "Google CDN", + "url": "https://developers.google.com/speed/libraries/", + "type": "link" + }, + "transferSize": 34295 + }, + { + "mainThreadTime": 61.284, + "entity": { + "text": "Bootstrap CDN", + "type": "link", + "url": "https://www.bootstrapcdn.com/" + }, + "blockingTime": 0, + "transferSize": 100508 + }, + { + "transferSize": 1921, + "blockingTime": 0, + "mainThreadTime": 5.451999999999999, + "entity": { + "url": "https://fonts.google.com/", + "text": "Google Fonts", + "type": "link" + } + }, + { + "transferSize": 1420, + "blockingTime": 0, + "entity": { + "text": "Moat", + "url": "https://moat.com/", + "type": "link" + }, + "mainThreadTime": 4.736 + }, + { + "blockingTime": 0, + "transferSize": 797, + "entity": { + "text": "Google/Doubleclick Ads", + "url": "https://www.doubleclickbygoogle.com/", + "type": "link" + }, + "mainThreadTime": 0 + }, + { + "blockingTime": 0, + "transferSize": 689, + "entity": { + "url": "https://developers.google.com/apis-explorer/#p/", + "type": "link", + "text": "Other Google APIs/SDKs" + }, + "mainThreadTime": 0 + } + ], + "summary": { + "wastedBytes": 570284, + "wastedMs": 674.144 + }, + "type": "table", + "headings": [ + { + "key": "entity", + "itemType": "link", + "text": "Third-Party" + }, + { + "key": "transferSize", + "itemType": "bytes", + "granularity": 1, + "text": "Transfer Size" + }, + { + "text": "Main-Thread Blocking Time", + "key": "blockingTime", + "itemType": "ms", + "granularity": 1 + } + ] + } + }, + "canonical": { + "id": "canonical", + "title": "Document has a valid `rel=canonical`", + "description": "Canonical links suggest which URL to show in search results. [Learn more](https://web.dev/canonical/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "td-headers-attr": { + "id": "td-headers-attr", + "title": "Cells in a `<table>` element that use the `[headers]` attribute refer to table cells within the same table.", + "description": "Screen readers have features to make navigating tables easier. Ensuring `<td>` cells using the `[headers]` attribute only refer to other cells in the same table may improve the experience for screen reader users. [Learn more](https://web.dev/td-headers-attr/).", + "score": null, + "scoreDisplayMode": "notApplicable" + }, + "geolocation-on-start": { + "id": "geolocation-on-start", + "title": "Avoids requesting the geolocation permission on page load", + "description": "Users are mistrustful of or confused by sites that request their location without context. Consider tying the request to a user action instead. [Learn more](https://web.dev/geolocation-on-start/).", + "score": 1, + "scoreDisplayMode": "binary", + "details": { + "type": "table", + "items": [], + "headings": [] + } + }, + "image-alt": { + "id": "image-alt", + "title": "Image elements do not have `[alt]` attributes", + "description": "Informative elements should aim for short, descriptive alternate text. Decorative elements can be ignored with an empty alt attribute. [Learn more](https://web.dev/image-alt/).", + "score": 0, + "scoreDisplayMode": "binary", + "details": { + "debugData": { + "impact": "critical", + "type": "debugdata", + "tags": [ + "cat.text-alternatives", + "wcag2a", + "wcag111", + "section508", + "section508.22.a" + ] + }, + "type": "table", + "items": [ + { + "node": { + "nodeLabel": "img", + "type": "node", + "path": "1,HTML,1,BODY,8,DIV,0,DIV,0,DIV,1,DIV,0,IMG", + "selector": ".col-lg-3.col-md-3.col-sm-3:nth-child(2) > .small-img-responsive", + "explanation": "Fix any of the following:\n Element does not have an alt attribute\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute or the title attribute is empty\n Element's default semantics were not overridden with role=\"presentation\"\n Element's default semantics were not overridden with role=\"none\"", + "snippet": "<img src=\"/assets/img/clients/arlingtoncu.png\" class=\"small-img-responsive\">" + } + }, + { + "node": { + "selector": "img[src$=\"bio\\.png\"]", + "explanation": "Fix any of the following:\n Element does not have an alt attribute\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute or the title attribute is empty\n Element's default semantics were not overridden with role=\"presentation\"\n Element's default semantics were not overridden with role=\"none\"", + "nodeLabel": "img", + "path": "1,HTML,1,BODY,8,DIV,0,DIV,0,DIV,2,DIV,0,IMG", + "type": "node", + "snippet": "<img src=\"/assets/img/clients/bio.png\" class=\"small-img-responsive\">" + } + }, + { + "node": { + "path": "1,HTML,1,BODY,8,DIV,0,DIV,0,DIV,3,DIV,0,IMG", + "nodeLabel": "img", + "explanation": "Fix any of the following:\n Element does not have an alt attribute\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute or the title attribute is empty\n Element's default semantics were not overridden with role=\"presentation\"\n Element's default semantics were not overridden with role=\"none\"", + "selector": "img[src$=\"ed\\.png\"]", + "type": "node", + "snippet": "<img src=\"/assets/img/clients/ed.png\" class=\"small-img-responsive\">" + } + }, + { + "node": { + "snippet": "<img src=\"/assets/img/clients/geico.png\" class=\"small-img-responsive\">", + "type": "node", + "path": "1,HTML,1,BODY,8,DIV,0,DIV,0,DIV,4,DIV,0,IMG", + "selector": "img[src$=\"geico\\.png\"]", + "nodeLabel": "img", + "explanation": "Fix any of the following:\n Element does not have an alt attribute\n aria-label attribute does not exist or is empty\n aria-labelledby attribute does not exist, references elements that do not exist or references elements that are empty\n Element has no title attribute or the title attribute is empty\n Element's default semantics were not overridden with role=\"presentation\"\n Element's default semantics were not overridden with role=\"none\"" + } + } + ], + "headings": [ + { + "key": "node", + "text": "Failing Elements", + "itemType": "node" + } + ] + } + }, + "managed-focus": { + "id": "managed-focus", + "title": "The user's focus is directed to new content added to the page", + "description": "If new content, such as a dialog, is added to the page, the user's focus is directed to it. [Learn more](https://web.dev/managed-focus/).", + "score": null, + "scoreDisplayMode": "manual" + }, + "uses-rel-preload": { + "id": "uses-rel-preload", + "title": "Preload key requests", + "description": "Consider using `<link rel=preload>` to prioritize fetching resources that are currently requested later in page load. [Learn more](https://web.dev/uses-rel-preload/).", + "score": 0.5, + "scoreDisplayMode": "numeric", + "displayValue": "Potential savings of 780 ms", + "details": { + "items": [ + { + "url": "https://blencorp.com/assets/fonts/OpenSans-Regular-webfont.woff", + "wastedMs": 780 + } + ], + "headings": [ + { + "valueType": "url", + "label": "URL", + "key": "url" + }, + { + "label": "Potential Savings", + "valueType": "timespanMs", + "key": "wastedMs" + } + ], + "overallSavingsMs": 780, + "type": "opportunity" + }, + "numericValue": 780 + } + }, + "categories": { + "performance": { + "id": "performance", + "title": "Performance", + "score": 0.73, + "auditRefs": [ + { + "id": "first-contentful-paint", + "weight": 15, + "group": "metrics" + }, + { + "id": "speed-index", + "weight": 15, + "group": "metrics" + }, + { + "id": "largest-contentful-paint", + "weight": 25, + "group": "metrics" + }, + { + "id": "interactive", + "weight": 15, + "group": "metrics" + }, + { + "id": "total-blocking-time", + "weight": 25, + "group": "metrics" + }, + { + "id": "cumulative-layout-shift", + "weight": 5, + "group": "metrics" + }, + { + "id": "first-cpu-idle", + "weight": 0 + }, + { + "id": "max-potential-fid", + "weight": 0 + }, + { + "id": "first-meaningful-paint", + "weight": 0 + }, + { + "id": "estimated-input-latency", + "weight": 0 + }, + { + "id": "render-blocking-resources", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "uses-responsive-images", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "offscreen-images", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "unminified-css", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "unminified-javascript", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "unused-css-rules", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "unused-javascript", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "uses-optimized-images", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "uses-webp-images", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "uses-text-compression", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "uses-rel-preconnect", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "server-response-time", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "redirects", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "uses-rel-preload", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "efficient-animated-content", + "weight": 0, + "group": "load-opportunities" + }, + { + "id": "total-byte-weight", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "uses-long-cache-ttl", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "dom-size", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "critical-request-chains", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "user-timings", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "bootup-time", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "mainthread-work-breakdown", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "font-display", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "performance-budget", + "weight": 0, + "group": "budgets" + }, + { + "id": "timing-budget", + "weight": 0, + "group": "budgets" + }, + { + "id": "resource-summary", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "third-party-summary", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "largest-contentful-paint-element", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "layout-shift-elements", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "uses-passive-event-listeners", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "no-document-write", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "long-tasks", + "weight": 0, + "group": "diagnostics" + }, + { + "id": "network-requests", + "weight": 0 + }, + { + "id": "network-rtt", + "weight": 0 + }, + { + "id": "network-server-latency", + "weight": 0 + }, + { + "id": "main-thread-tasks", + "weight": 0 + }, + { + "id": "diagnostics", + "weight": 0 + }, + { + "id": "metrics", + "weight": 0 + }, + { + "id": "screenshot-thumbnails", + "weight": 0 + }, + { + "id": "final-screenshot", + "weight": 0 + }, + { + "id": "first-contentful-paint-3g", + "weight": 0 + } + ] + }, + "accessibility": { + "id": "accessibility", + "title": "Accessibility", + "description": "These checks highlight opportunities to [improve the accessibility of your web app](https://developers.google.com/web/fundamentals/accessibility). Only a subset of accessibility issues can be automatically detected so manual testing is also encouraged.", + "score": 0.8, + "manualDescription": "These items address areas which an automated testing tool cannot cover. Learn more in our guide on [conducting an accessibility review](https://developers.google.com/web/fundamentals/accessibility/how-to-review).", + "auditRefs": [ + { + "id": "accesskeys", + "weight": 0, + "group": "a11y-navigation" + }, + { + "id": "aria-allowed-attr", + "weight": 0, + "group": "a11y-aria" + }, + { + "id": "aria-hidden-body", + "weight": 10, + "group": "a11y-aria" + }, + { + "id": "aria-hidden-focus", + "weight": 0, + "group": "a11y-aria" + }, + { + "id": "aria-input-field-name", + "weight": 0, + "group": "a11y-aria" + }, + { + "id": "aria-required-attr", + "weight": 10, + "group": "a11y-aria" + }, + { + "id": "aria-required-children", + "weight": 10, + "group": "a11y-aria" + }, + { + "id": "aria-required-parent", + "weight": 10, + "group": "a11y-aria" + }, + { + "id": "aria-roles", + "weight": 10, + "group": "a11y-aria" + }, + { + "id": "aria-toggle-field-name", + "weight": 0, + "group": "a11y-aria" + }, + { + "id": "aria-valid-attr-value", + "weight": 0, + "group": "a11y-aria" + }, + { + "id": "aria-valid-attr", + "weight": 0, + "group": "a11y-aria" + }, + { + "id": "button-name", + "weight": 10, + "group": "a11y-names-labels" + }, + { + "id": "bypass", + "weight": 3, + "group": "a11y-navigation" + }, + { + "id": "color-contrast", + "weight": 3, + "group": "a11y-color-contrast" + }, + { + "id": "definition-list", + "weight": 0, + "group": "a11y-tables-lists" + }, + { + "id": "dlitem", + "weight": 0, + "group": "a11y-tables-lists" + }, + { + "id": "document-title", + "weight": 3, + "group": "a11y-names-labels" + }, + { + "id": "duplicate-id-active", + "weight": 0, + "group": "a11y-navigation" + }, + { + "id": "duplicate-id-aria", + "weight": 0, + "group": "a11y-aria" + }, + { + "id": "form-field-multiple-labels", + "weight": 0, + "group": "a11y-names-labels" + }, + { + "id": "frame-title", + "weight": 0, + "group": "a11y-names-labels" + }, + { + "id": "heading-order", + "weight": 2, + "group": "a11y-navigation" + }, + { + "id": "html-has-lang", + "weight": 3, + "group": "a11y-language" + }, + { + "id": "html-lang-valid", + "weight": 0, + "group": "a11y-language" + }, + { + "id": "image-alt", + "weight": 10, + "group": "a11y-names-labels" + }, + { + "id": "input-image-alt", + "weight": 0, + "group": "a11y-names-labels" + }, + { + "id": "label", + "weight": 0, + "group": "a11y-names-labels" + }, + { + "id": "layout-table", + "weight": 0, + "group": "a11y-tables-lists" + }, + { + "id": "link-name", + "weight": 3, + "group": "a11y-names-labels" + }, + { + "id": "list", + "weight": 3, + "group": "a11y-tables-lists" + }, + { + "id": "listitem", + "weight": 3, + "group": "a11y-tables-lists" + }, + { + "id": "meta-refresh", + "weight": 0, + "group": "a11y-best-practices" + }, + { + "id": "meta-viewport", + "weight": 10, + "group": "a11y-best-practices" + }, + { + "id": "object-alt", + "weight": 0, + "group": "a11y-names-labels" + }, + { + "id": "tabindex", + "weight": 0, + "group": "a11y-navigation" + }, + { + "id": "td-headers-attr", + "weight": 0, + "group": "a11y-tables-lists" + }, + { + "id": "th-has-data-cells", + "weight": 0, + "group": "a11y-tables-lists" + }, + { + "id": "valid-lang", + "weight": 0, + "group": "a11y-language" + }, + { + "id": "video-caption", + "weight": 0, + "group": "a11y-audio-video" + }, + { + "id": "video-description", + "weight": 0, + "group": "a11y-audio-video" + }, + { + "id": "logical-tab-order", + "weight": 0 + }, + { + "id": "focusable-controls", + "weight": 0 + }, + { + "id": "interactive-element-affordance", + "weight": 0 + }, + { + "id": "managed-focus", + "weight": 0 + }, + { + "id": "focus-traps", + "weight": 0 + }, + { + "id": "custom-controls-labels", + "weight": 0 + }, + { + "id": "custom-controls-roles", + "weight": 0 + }, + { + "id": "visual-order-follows-dom", + "weight": 0 + }, + { + "id": "offscreen-content-hidden", + "weight": 0 + }, + { + "id": "use-landmarks", + "weight": 0 + } + ] + }, + "best-practices": { + "id": "best-practices", + "title": "Best Practices", + "score": 0.77, + "auditRefs": [ + { + "id": "is-on-https", + "weight": 1, + "group": "best-practices-trust-safety" + }, + { + "id": "external-anchors-use-rel-noopener", + "weight": 1, + "group": "best-practices-trust-safety" + }, + { + "id": "geolocation-on-start", + "weight": 1, + "group": "best-practices-trust-safety" + }, + { + "id": "notification-on-start", + "weight": 1, + "group": "best-practices-trust-safety" + }, + { + "id": "no-vulnerable-libraries", + "weight": 1, + "group": "best-practices-trust-safety" + }, + { + "id": "password-inputs-can-be-pasted-into", + "weight": 1, + "group": "best-practices-ux" + }, + { + "id": "image-aspect-ratio", + "weight": 1, + "group": "best-practices-ux" + }, + { + "id": "image-size-responsive", + "weight": 1, + "group": "best-practices-ux" + }, + { + "id": "doctype", + "weight": 1, + "group": "best-practices-browser-compat" + }, + { + "id": "charset", + "weight": 1, + "group": "best-practices-browser-compat" + }, + { + "id": "appcache-manifest", + "weight": 1, + "group": "best-practices-general" + }, + { + "id": "js-libraries", + "weight": 0, + "group": "best-practices-general" + }, + { + "id": "deprecations", + "weight": 1, + "group": "best-practices-general" + }, + { + "id": "errors-in-console", + "weight": 1, + "group": "best-practices-general" + } + ] + }, + "seo": { + "id": "seo", + "title": "SEO", + "description": "These checks ensure that your page is optimized for search engine results ranking. There are additional factors Lighthouse does not check that may affect your search ranking. [Learn more](https://support.google.com/webmasters/answer/35769).", + "score": 0.75, + "manualDescription": "Run these additional validators on your site to check additional SEO best practices.", + "auditRefs": [ + { + "id": "viewport", + "weight": 1, + "group": "seo-mobile" + }, + { + "id": "document-title", + "weight": 1, + "group": "seo-content" + }, + { + "id": "meta-description", + "weight": 1, + "group": "seo-content" + }, + { + "id": "http-status-code", + "weight": 1, + "group": "seo-crawl" + }, + { + "id": "link-text", + "weight": 1, + "group": "seo-content" + }, + { + "id": "crawlable-anchors", + "weight": 1, + "group": "seo-crawl" + }, + { + "id": "is-crawlable", + "weight": 1, + "group": "seo-crawl" + }, + { + "id": "robots-txt", + "weight": 0, + "group": "seo-crawl" + }, + { + "id": "image-alt", + "weight": 1, + "group": "seo-content" + }, + { + "id": "hreflang", + "weight": 1, + "group": "seo-content" + }, + { + "id": "canonical", + "weight": 0, + "group": "seo-content" + }, + { + "id": "font-size", + "weight": 1, + "group": "seo-mobile" + }, + { + "id": "plugins", + "weight": 1, + "group": "seo-content" + }, + { + "id": "tap-targets", + "weight": 1, + "group": "seo-mobile" + }, + { + "id": "structured-data", + "weight": 0 + } + ] + }, + "pwa": { + "id": "pwa", + "title": "Progressive Web App", + "description": "These checks validate the aspects of a Progressive Web App. [Learn more](https://developers.google.com/web/progressive-web-apps/checklist).", + "score": 0.54, + "manualDescription": "These checks are required by the baseline [PWA Checklist](https://developers.google.com/web/progressive-web-apps/checklist) but are not automatically checked by Lighthouse. They do not affect your score but it's important that you verify them manually.", + "auditRefs": [ + { + "id": "load-fast-enough-for-pwa", + "weight": 7, + "group": "pwa-fast-reliable" + }, + { + "id": "works-offline", + "weight": 5, + "group": "pwa-fast-reliable" + }, + { + "id": "offline-start-url", + "weight": 1, + "group": "pwa-fast-reliable" + }, + { + "id": "is-on-https", + "weight": 2, + "group": "pwa-installable" + }, + { + "id": "service-worker", + "weight": 1, + "group": "pwa-installable" + }, + { + "id": "installable-manifest", + "weight": 2, + "group": "pwa-installable" + }, + { + "id": "redirects-http", + "weight": 2, + "group": "pwa-optimized" + }, + { + "id": "splash-screen", + "weight": 1, + "group": "pwa-optimized" + }, + { + "id": "themed-omnibox", + "weight": 1, + "group": "pwa-optimized" + }, + { + "id": "content-width", + "weight": 1, + "group": "pwa-optimized" + }, + { + "id": "viewport", + "weight": 2, + "group": "pwa-optimized" + }, + { + "id": "without-javascript", + "weight": 1, + "group": "pwa-optimized" + }, + { + "id": "apple-touch-icon", + "weight": 1, + "group": "pwa-optimized" + }, + { + "id": "maskable-icon", + "weight": 1, + "group": "pwa-optimized" + }, + { + "id": "pwa-cross-browser", + "weight": 0 + }, + { + "id": "pwa-page-transitions", + "weight": 0 + }, + { + "id": "pwa-each-page-has-url", + "weight": 0 + } + ] + } + }, + "categoryGroups": { + "best-practices-browser-compat": { + "title": "Browser Compatibility" + }, + "metrics": { + "title": "Metrics" + }, + "budgets": { + "title": "Budgets", + "description": "Performance budgets set standards for the performance of your site." + }, + "a11y-navigation": { + "title": "Navigation", + "description": "These are opportunities to improve keyboard navigation in your application." + }, + "a11y-audio-video": { + "title": "Audio and video", + "description": "These are opportunities to provide alternative content for audio and video. This may improve the experience for users with hearing or vision impairments." + }, + "best-practices-trust-safety": { + "title": "Trust and Safety" + }, + "a11y-aria": { + "title": "ARIA", + "description": "These are opportunities to improve the usage of ARIA in your application which may enhance the experience for users of assistive technology, like a screen reader." + }, + "a11y-best-practices": { + "title": "Best practices", + "description": "These items highlight common accessibility best practices." + }, + "pwa-optimized": { + "title": "PWA Optimized" + }, + "a11y-color-contrast": { + "title": "Contrast", + "description": "These are opportunities to improve the legibility of your content." + }, + "seo-crawl": { + "title": "Crawling and Indexing", + "description": "To appear in search results, crawlers need access to your app." + }, + "a11y-tables-lists": { + "title": "Tables and lists", + "description": "These are opportunities to to improve the experience of reading tabular or list data using assistive technology, like a screen reader." + }, + "pwa-installable": { + "title": "Installable" + }, + "a11y-language": { + "title": "Internationalization and localization", + "description": "These are opportunities to improve the interpretation of your content by users in different locales." + }, + "seo-mobile": { + "title": "Mobile Friendly", + "description": "Make sure your pages are mobile friendly so users don’t have to pinch or zoom in order to read the content pages. [Learn more](https://developers.google.com/search/mobile-sites/)." + }, + "diagnostics": { + "title": "Diagnostics", + "description": "More information about the performance of your application. These numbers don't [directly affect](https://web.dev/performance-scoring/) the Performance score." + }, + "seo-content": { + "title": "Content Best Practices", + "description": "Format your HTML in a way that enables crawlers to better understand your app’s content." + }, + "best-practices-ux": { + "title": "User Experience" + }, + "a11y-names-labels": { + "title": "Names and labels", + "description": "These are opportunities to improve the semantics of the controls in your application. This may enhance the experience for users of assistive technology, like a screen reader." + }, + "pwa-fast-reliable": { + "title": "Fast and reliable" + }, + "best-practices-general": { + "title": "General" + }, + "load-opportunities": { + "title": "Opportunities", + "description": "These suggestions can help your page load faster. They don't [directly affect](https://web.dev/performance-scoring/) the Performance score." + } + }, + "timing": { + "total": 8176.46 + }, + "i18n": { + "rendererFormattedStrings": { + "varianceDisclaimer": "Values are estimated and may vary. The [performance score is calculated](https://web.dev/performance-scoring/) directly from these metrics.", + "opportunityResourceColumnLabel": "Opportunity", + "opportunitySavingsColumnLabel": "Estimated Savings", + "errorMissingAuditInfo": "Report error: no audit information", + "errorLabel": "Error!", + "warningHeader": "Warnings: ", + "auditGroupExpandTooltip": "Show audits", + "passedAuditsGroupTitle": "Passed audits", + "notApplicableAuditsGroupTitle": "Not applicable", + "manualAuditsGroupTitle": "Additional items to manually check", + "toplevelWarningsMessage": "There were issues affecting this run of Lighthouse:", + "crcLongestDurationLabel": "Maximum critical path latency:", + "crcInitialNavigation": "Initial Navigation", + "lsPerformanceCategoryDescription": "[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.", + "labDataTitle": "Lab Data" + } + } + } \ No newline at end of file diff --git a/package.json b/package.json index 48440c0..640f588 100644 --- a/package.json +++ b/package.json @@ -7,10 +7,10 @@ "test": "echo \"Error: no test specified\" && exit 1", "start": "webpack-dev-server --mode development", "transpile": "./node_modules/.bin/babel src -d dist --copy-files", - "prepublishOnly": "npm run transpile", + "prepublishOnly": "yarn transpile", "build": "webpack --mode production", - "deploy": "gh-pages -d example/dist", - "publish-demo": "npm run build && npm run deploy" + "deploy": "gh-pages -d example/dist", + "publish-demo": "yarn prepublishOnly && yarn build && yarn deploy" }, "repository": { "type": "git", @@ -28,26 +28,27 @@ }, "homepage": "https://github.com/blencorp/react-lighthouse-viewer#readme", "devDependencies": { - "@babel/cli": "^7.8.4", - "@babel/core": "^7.8.4", - "@babel/preset-env": "^7.8.4", - "@babel/preset-react": "^7.8.3", - "astroturf": "^0.10.2", - "autoprefixer": "^9.7.4", - "babel-loader": "^8.0.6", + "@babel/cli": "^7.10.4", + "@babel/core": "^7.10.4", + "@babel/preset-env": "^7.10.4", + "@babel/preset-react": "^7.10.4", + "astroturf": "^0.10.4", + "autoprefixer": "^9.8.4", + "babel-loader": "^8.1.0", "babel-preset-env": "^1.7.0", - "css-loader": "^3.4.2", + "cjs-to-es6": "^1.1.1", + "css-loader": "^3.6.0", "extract-text-webpack-plugin": "^3.0.2", - "gh-pages": "^2.2.0", - "html-webpack-plugin": "^3.2.0", + "gh-pages": "^3.1.0", + "html-webpack-plugin": "^4.3.0", "mini-css-extract-plugin": "^0.9.0", "postcss-loader": "^3.0.0", - "react": "^16.12.0", - "react-dom": "^16.12.0", - "style-loader": "^1.1.3", - "webpack": "^4.41.5", - "webpack-cli": "^3.3.10", - "webpack-dev-server": "^3.10.3" + "react": "^16.13.1", + "react-dom": "^16.13.1", + "style-loader": "^1.2.1", + "webpack": "^4.43.0", + "webpack-cli": "^3.3.12", + "webpack-dev-server": "^3.11.0" }, "browserslist": { "production": [ diff --git a/src/index.js b/src/index.js index 7464e60..8e3a790 100644 --- a/src/index.js +++ b/src/index.js @@ -16,7 +16,7 @@ export const Template = () => { class ReportViewer extends Component { constructor(props) { super(props); - document.addEventListener('lh-log', e => { + document.addEventListener('lh-log', (e) => { const logger = new Logger(document.querySelector('#lh-log')); switch (e.detail.cmd) { case 'log': diff --git a/src/renderer/category-renderer.js b/src/renderer/category-renderer.js index 6ca69af..30cb662 100644 --- a/src/renderer/category-renderer.js +++ b/src/renderer/category-renderer.js @@ -1,9 +1,6 @@ -// eslint-disable-next-line -import Util from "./util"; - /** * @license - * Copyright 2017 Google Inc. All Rights Reserved. + * Copyright 2017 The Lighthouse Authors. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +14,9 @@ import Util from "./util"; * See the License for the specific language governing permissions and * limitations under the License. */ -("use strict"); +'use strict'; + +import Util from './util.js'; /* globals self, Util */ @@ -51,7 +50,7 @@ class CategoryRenderer { warning: Util.i18n.strings.warningAuditsGroupTitle, manual: Util.i18n.strings.manualAuditsGroupTitle, passed: Util.i18n.strings.passedAuditsGroupTitle, - notApplicable: Util.i18n.strings.notApplicableAuditsGroupTitle + notApplicable: Util.i18n.strings.notApplicableAuditsGroupTitle, }; } @@ -60,7 +59,7 @@ class CategoryRenderer { * @return {Element} */ renderAudit(audit) { - const tmpl = this.dom.cloneTemplate("#tmpl-lh-audit", this.templateContext); + const tmpl = this.dom.cloneTemplate('#tmpl-lh-audit', this.templateContext); return this.populateAuditValues(audit, tmpl); } @@ -68,36 +67,36 @@ class CategoryRenderer { * Populate an DOM tree with audit details. Used by renderAudit and renderOpportunity * @param {LH.ReportResult.AuditRef} audit * @param {DocumentFragment} tmpl - * @return {Element} + * @return {!Element} */ populateAuditValues(audit, tmpl) { const strings = Util.i18n.strings; - const auditEl = this.dom.find(".lh-audit", tmpl); + const auditEl = this.dom.find('.lh-audit', tmpl); auditEl.id = audit.result.id; const scoreDisplayMode = audit.result.scoreDisplayMode; if (audit.result.displayValue) { - this.dom.find(".lh-audit__display-text", auditEl).textContent = + this.dom.find('.lh-audit__display-text', auditEl).textContent = audit.result.displayValue; } - const titleEl = this.dom.find(".lh-audit__title", auditEl); + const titleEl = this.dom.find('.lh-audit__title', auditEl); titleEl.appendChild( this.dom.convertMarkdownCodeSnippets(audit.result.title) ); this.dom - .find(".lh-audit__description", auditEl) + .find('.lh-audit__description', auditEl) .appendChild( this.dom.convertMarkdownLinkSnippets(audit.result.description) ); if (audit.stackPacks) { - audit.stackPacks.forEach(pack => { - const packElm = this.dom.createElement("div"); - packElm.classList.add("lh-audit__stackpack"); + audit.stackPacks.forEach((pack) => { + const packElm = this.dom.createElement('div'); + packElm.classList.add('lh-audit__stackpack'); - const packElmImg = this.dom.createElement("img"); - packElmImg.classList.add("lh-audit__stackpack__img"); + const packElmImg = this.dom.createElement('img'); + packElmImg.classList.add('lh-audit__stackpack__img'); packElmImg.src = pack.iconDataURL; packElmImg.alt = pack.title; packElm.appendChild(packElmImg); @@ -106,45 +105,45 @@ class CategoryRenderer { this.dom.convertMarkdownLinkSnippets(pack.description) ); - this.dom.find(".lh-audit__stackpacks", auditEl).appendChild(packElm); + this.dom.find('.lh-audit__stackpacks', auditEl).appendChild(packElm); }); } const header = /** @type {HTMLDetailsElement} */ (this.dom.find( - "details", + 'details', auditEl )); if (audit.result.details) { const elem = this.detailsRenderer.render(audit.result.details); if (elem) { - elem.classList.add("lh-details"); + elem.classList.add('lh-details'); header.appendChild(elem); } } // Add chevron SVG to the end of the summary this.dom - .find(".lh-chevron-container", auditEl) + .find('.lh-chevron-container', auditEl) .appendChild(this._createChevron()); this._setRatingClass(auditEl, audit.result.score, scoreDisplayMode); - if (audit.result.scoreDisplayMode === "error") { + if (audit.result.scoreDisplayMode === 'error') { auditEl.classList.add(`lh-audit--error`); - const textEl = this.dom.find(".lh-audit__display-text", auditEl); + const textEl = this.dom.find('.lh-audit__display-text', auditEl); textEl.textContent = strings.errorLabel; - textEl.classList.add("tooltip-boundary"); + textEl.classList.add('tooltip-boundary'); const tooltip = this.dom.createChildOf( textEl, - "div", - "tooltip tooltip--error" + 'div', + 'tooltip tooltip--error' ); tooltip.textContent = audit.result.errorMessage || strings.errorMissingAuditInfo; } else if (audit.result.explanation) { const explEl = this.dom.createChildOf( titleEl, - "div", - "lh-audit-explanation" + 'div', + 'lh-audit-explanation' ); explEl.textContent = audit.result.explanation; } @@ -152,17 +151,18 @@ class CategoryRenderer { if (!warnings || warnings.length === 0) return auditEl; // Add list of warnings or singular warning - const warningsEl = this.dom.createChildOf(titleEl, "div", "lh-warnings"); - this.dom.createChildOf(warningsEl, "span").textContent = + const summaryEl = this.dom.find('summary', header); + const warningsEl = this.dom.createChildOf(summaryEl, 'div', 'lh-warnings'); + this.dom.createChildOf(warningsEl, 'span').textContent = strings.warningHeader; if (warnings.length === 1) { warningsEl.appendChild( - this.dom.document().createTextNode(warnings.join("")) + this.dom.document().createTextNode(warnings.join('')) ); } else { - const warningsUl = this.dom.createChildOf(warningsEl, "ul"); + const warningsUl = this.dom.createChildOf(warningsEl, 'ul'); for (const warning of warnings) { - const item = this.dom.createChildOf(warningsUl, "li"); + const item = this.dom.createChildOf(warningsUl, 'li'); item.textContent = warning; } } @@ -174,10 +174,10 @@ class CategoryRenderer { */ _createChevron() { const chevronTmpl = this.dom.cloneTemplate( - "#tmpl-lh-chevron", + '#tmpl-lh-chevron', this.templateContext ); - const chevronEl = this.dom.find(".lh-chevron", chevronTmpl); + const chevronEl = this.dom.find('.lh-chevron', chevronTmpl); return chevronEl; } @@ -185,12 +185,12 @@ class CategoryRenderer { * @param {Element} element DOM node to populate with values. * @param {number|null} score * @param {string} scoreDisplayMode - * @return {Element} + * @return {!Element} */ _setRatingClass(element, score, scoreDisplayMode) { const rating = Util.calculateRating(score, scoreDisplayMode); element.classList.add(`lh-audit--${scoreDisplayMode.toLowerCase()}`); - if (scoreDisplayMode !== "informative") { + if (scoreDisplayMode !== 'informative') { element.classList.add(`lh-audit--${rating}`); } return element; @@ -203,18 +203,18 @@ class CategoryRenderer { */ renderCategoryHeader(category, groupDefinitions) { const tmpl = this.dom.cloneTemplate( - "#tmpl-lh-category-header", + '#tmpl-lh-category-header', this.templateContext ); - const gaugeContainerEl = this.dom.find(".lh-score__gauge", tmpl); + const gaugeContainerEl = this.dom.find('.lh-score__gauge', tmpl); const gaugeEl = this.renderScoreGauge(category, groupDefinitions); gaugeContainerEl.appendChild(gaugeEl); if (category.description) { const descEl = this.dom.convertMarkdownLinkSnippets(category.description); this.dom - .find(".lh-category-header__description", tmpl) + .find('.lh-category-header__description', tmpl) .appendChild(descEl); } @@ -228,23 +228,23 @@ class CategoryRenderer { * @return {Element} */ renderAuditGroup(group) { - const groupEl = this.dom.createElement("div", "lh-audit-group"); + const groupEl = this.dom.createElement('div', 'lh-audit-group'); const auditGroupHeader = this.dom.createElement( - "div", - "lh-audit-group__header" + 'div', + 'lh-audit-group__header' ); this.dom.createChildOf( auditGroupHeader, - "span", - "lh-audit-group__title" + 'span', + 'lh-audit-group__title' ).textContent = group.title; if (group.description) { const descriptionEl = this.dom.convertMarkdownLinkSnippets( group.description ); - descriptionEl.classList.add("lh-audit-group__description"); + descriptionEl.classList.add('lh-audit-group__description'); auditGroupHeader.appendChild(descriptionEl); } groupEl.appendChild(auditGroupHeader); @@ -265,7 +265,7 @@ class CategoryRenderer { const grouped = new Map(); // Add audits without a group first so they will appear first. - const notAGroup = "NotAGroup"; + const notAGroup = 'NotAGroup'; grouped.set(notAGroup, []); for (const auditRef of auditRefs) { @@ -308,9 +308,9 @@ class CategoryRenderer { * @return {Element} */ renderUnexpandableClump(auditRefs, groupDefinitions) { - const clumpElement = this.dom.createElement("div"); + const clumpElement = this.dom.createElement('div'); const elements = this._renderGroupedAudits(auditRefs, groupDefinitions); - elements.forEach(elem => clumpElement.appendChild(elem)); + elements.forEach((elem) => clumpElement.appendChild(elem)); return clumpElement; } @@ -319,37 +319,37 @@ class CategoryRenderer { * in a collapsed state. * @param {Exclude<TopLevelClumpId, 'failed'>} clumpId * @param {{auditRefs: Array<LH.ReportResult.AuditRef>, description?: string}} clumpOpts - * @return {Element} + * @return {!Element} */ renderClump(clumpId, { auditRefs, description }) { const clumpTmpl = this.dom.cloneTemplate( - "#tmpl-lh-clump", + '#tmpl-lh-clump', this.templateContext ); - const clumpElement = this.dom.find(".lh-clump", clumpTmpl); + const clumpElement = this.dom.find('.lh-clump', clumpTmpl); - if (clumpId === "warning") { - clumpElement.setAttribute("open", ""); + if (clumpId === 'warning') { + clumpElement.setAttribute('open', ''); } const summaryInnerEl = this.dom.find( - ".lh-audit-group__summary", + '.lh-audit-group__summary', clumpElement ); const chevronEl = summaryInnerEl.appendChild(this._createChevron()); chevronEl.title = Util.i18n.strings.auditGroupExpandTooltip; - const headerEl = this.dom.find(".lh-audit-group__header", clumpElement); + const headerEl = this.dom.find('.lh-audit-group__header', clumpElement); const title = this._clumpTitles[clumpId]; - this.dom.find(".lh-audit-group__title", headerEl).textContent = title; + this.dom.find('.lh-audit-group__title', headerEl).textContent = title; if (description) { const descriptionEl = this.dom.convertMarkdownLinkSnippets(description); - descriptionEl.classList.add("lh-audit-group__description"); + descriptionEl.classList.add('lh-audit-group__description'); headerEl.appendChild(descriptionEl); } const itemCountEl = this.dom.find( - ".lh-audit-group__itemcount", + '.lh-audit-group__itemcount', clumpElement ); itemCountEl.textContent = `(${auditRefs.length})`; @@ -377,9 +377,9 @@ class CategoryRenderer { */ renderScoreGauge(category, groupDefinitions) { // eslint-disable-line no-unused-vars - const tmpl = this.dom.cloneTemplate("#tmpl-lh-gauge", this.templateContext); + const tmpl = this.dom.cloneTemplate('#tmpl-lh-gauge', this.templateContext); const wrapper = /** @type {HTMLAnchorElement} */ (this.dom.find( - ".lh-gauge__wrapper", + '.lh-gauge__wrapper', tmpl )); wrapper.href = `#${category.id}`; @@ -388,26 +388,26 @@ class CategoryRenderer { ); if (Util.isPluginCategory(category.id)) { - wrapper.classList.add("lh-gauge__wrapper--plugin"); + wrapper.classList.add('lh-gauge__wrapper--plugin'); } // Cast `null` to 0 const numericScore = Number(category.score); - const gauge = this.dom.find(".lh-gauge", tmpl); + const gauge = this.dom.find('.lh-gauge', tmpl); /** @type {?SVGCircleElement} */ - const gaugeArc = gauge.querySelector(".lh-gauge-arc"); + const gaugeArc = gauge.querySelector('.lh-gauge-arc'); if (gaugeArc) this._setGaugeArc(gaugeArc, numericScore); const scoreOutOf100 = Math.round(numericScore * 100); - const percentageEl = this.dom.find(".lh-gauge__percentage", tmpl); + const percentageEl = this.dom.find('.lh-gauge__percentage', tmpl); percentageEl.textContent = scoreOutOf100.toString(); if (category.score === null) { - percentageEl.textContent = "?"; + percentageEl.textContent = '?'; percentageEl.title = Util.i18n.strings.errorLabel; } - this.dom.find(".lh-gauge__label", tmpl).textContent = category.title; + this.dom.find('.lh-gauge__label', tmpl).textContent = category.title; return tmpl; } @@ -418,19 +418,20 @@ class CategoryRenderer { * @param {number} percent */ _setGaugeArc(arcElem, percent) { - const circumferencePx = 2 * Math.PI * Number(arcElem.getAttribute("r")); + const circumferencePx = 2 * Math.PI * Number(arcElem.getAttribute('r')); // The rounded linecap of the stroke extends the arc past its start and end. // First, we tweak the -90deg rotation to start exactly at the top of the circle. - const strokeWidthPx = Number(arcElem.getAttribute("stroke-width")); + const strokeWidthPx = Number(arcElem.getAttribute('stroke-width')); const rotationalAdjustmentPercent = (0.25 * strokeWidthPx) / circumferencePx; - arcElem.style.transform = `rotate(${-90 + - rotationalAdjustmentPercent * 360}deg)`; + arcElem.style.transform = `rotate(${ + -90 + rotationalAdjustmentPercent * 360 + }deg)`; // Then, we terminate the line a little early as well. let arcLengthPx = percent * circumferencePx - strokeWidthPx / 2; // Special cases. No dot for 0, and full ring if 100 - if (percent === 0) arcElem.style.opacity = "0"; + if (percent === 0) arcElem.style.opacity = '0'; if (percent === 1) arcLengthPx = circumferencePx; arcElem.style.strokeDasharray = `${Math.max( @@ -454,18 +455,18 @@ class CategoryRenderer { */ _getClumpIdForAuditRef(auditRef) { const scoreDisplayMode = auditRef.result.scoreDisplayMode; - if (scoreDisplayMode === "manual" || scoreDisplayMode === "notApplicable") { + if (scoreDisplayMode === 'manual' || scoreDisplayMode === 'notApplicable') { return scoreDisplayMode; } if (Util.showAsPassed(auditRef.result)) { if (this._auditHasWarning(auditRef)) { - return "warning"; + return 'warning'; } else { - return "passed"; + return 'passed'; } } else { - return "failed"; + return 'failed'; } } @@ -492,18 +493,18 @@ class CategoryRenderer { * @return {Element} */ render(category, groupDefinitions = {}) { - const element = this.dom.createElement("div", "lh-category"); + const element = this.dom.createElement('div', 'lh-category'); this.createPermalinkSpan(element, category.id); element.appendChild(this.renderCategoryHeader(category, groupDefinitions)); // Top level clumps for audits, in order they will appear in the report. /** @type {Map<TopLevelClumpId, Array<LH.ReportResult.AuditRef>>} */ const clumps = new Map(); - clumps.set("failed", []); - clumps.set("warning", []); - clumps.set("manual", []); - clumps.set("passed", []); - clumps.set("notApplicable", []); + clumps.set('failed', []); + clumps.set('warning', []); + clumps.set('manual', []); + clumps.set('passed', []); + clumps.set('notApplicable', []); // Sort audits into clumps. for (const auditRef of category.auditRefs) { @@ -519,7 +520,7 @@ class CategoryRenderer { for (const [clumpId, auditRefs] of clumps) { if (auditRefs.length === 0) continue; - if (clumpId === "failed") { + if (clumpId === 'failed') { const clumpElem = this.renderUnexpandableClump( auditRefs, groupDefinitions @@ -530,7 +531,7 @@ class CategoryRenderer { } const description = - clumpId === "manual" ? category.manualDescription : undefined; + clumpId === 'manual' ? category.manualDescription : undefined; const clumpElem = this.renderClump(clumpId, { auditRefs, description }); element.appendChild(clumpElem); } @@ -544,15 +545,9 @@ class CategoryRenderer { * @param {string} id */ createPermalinkSpan(element, id) { - const permalinkEl = this.dom.createChildOf(element, "span", "lh-permalink"); + const permalinkEl = this.dom.createChildOf(element, 'span', 'lh-permalink'); permalinkEl.id = id; } } -// if (typeof module !== "undefined" && module.exports) { -// module.exports = CategoryRenderer; -// } else { -// self.CategoryRenderer = CategoryRenderer; -// } - export default CategoryRenderer; diff --git a/src/renderer/crc-details-renderer.js b/src/renderer/crc-details-renderer.js index b1eedb9..60df41a 100644 --- a/src/renderer/crc-details-renderer.js +++ b/src/renderer/crc-details-renderer.js @@ -1,8 +1,6 @@ -import Util from "./util"; - /** * @license - * Copyright 2017 Google Inc. All Rights Reserved. + * Copyright 2017 The Lighthouse Authors. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +14,9 @@ import Util from "./util"; * See the License for the specific language governing permissions and * limitations under the License. */ -("use strict"); +'use strict'; + +import Util from './util.js'; /** * @fileoverview This file contains helpers for constructing and rendering the @@ -26,6 +26,7 @@ import Util from "./util"; /* globals self Util */ /** @typedef {import('./dom.js')} DOM */ +/** @typedef {import('./details-renderer.js')} DetailsRenderer */ class CriticalRequestChainRenderer { /** @@ -77,7 +78,7 @@ class CriticalRequestChainRenderer { : []; // Add on the new entry. - if (typeof parentIsLastChild !== "undefined") { + if (typeof parentIsLastChild !== 'undefined') { newTreeMarkers.push(!parentIsLastChild); } @@ -87,7 +88,7 @@ class CriticalRequestChainRenderer { hasChildren, startTime, transferSize: transferSize + node.request.transferSize, - treeMarkers: newTreeMarkers + treeMarkers: newTreeMarkers, }; } @@ -100,61 +101,61 @@ class CriticalRequestChainRenderer { * @return {Node} */ static createChainNode(dom, tmpl, segment, detailsRenderer) { - const chainsEl = dom.cloneTemplate("#tmpl-lh-crc__chains", tmpl); + const chainsEl = dom.cloneTemplate('#tmpl-lh-crc__chains', tmpl); // Hovering over request shows full URL. dom - .find(".crc-node", chainsEl) - .setAttribute("title", segment.node.request.url); + .find('.crc-node', chainsEl) + .setAttribute('title', segment.node.request.url); - const treeMarkeEl = dom.find(".crc-node__tree-marker", chainsEl); + const treeMarkeEl = dom.find('.crc-node__tree-marker', chainsEl); // Construct lines and add spacers for sub requests. - segment.treeMarkers.forEach(separator => { + segment.treeMarkers.forEach((separator) => { if (separator) { - treeMarkeEl.appendChild(dom.createElement("span", "tree-marker vert")); - treeMarkeEl.appendChild(dom.createElement("span", "tree-marker")); + treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker vert')); + treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker')); } else { - treeMarkeEl.appendChild(dom.createElement("span", "tree-marker")); - treeMarkeEl.appendChild(dom.createElement("span", "tree-marker")); + treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker')); + treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker')); } }); if (segment.isLastChild) { treeMarkeEl.appendChild( - dom.createElement("span", "tree-marker up-right") + dom.createElement('span', 'tree-marker up-right') ); - treeMarkeEl.appendChild(dom.createElement("span", "tree-marker right")); + treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker right')); } else { treeMarkeEl.appendChild( - dom.createElement("span", "tree-marker vert-right") + dom.createElement('span', 'tree-marker vert-right') ); - treeMarkeEl.appendChild(dom.createElement("span", "tree-marker right")); + treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker right')); } if (segment.hasChildren) { treeMarkeEl.appendChild( - dom.createElement("span", "tree-marker horiz-down") + dom.createElement('span', 'tree-marker horiz-down') ); } else { - treeMarkeEl.appendChild(dom.createElement("span", "tree-marker right")); + treeMarkeEl.appendChild(dom.createElement('span', 'tree-marker right')); } // Fill in url, host, and request size information. const url = segment.node.request.url; const linkEl = detailsRenderer.renderTextURL(url); - const treevalEl = dom.find(".crc-node__tree-value", chainsEl); + const treevalEl = dom.find('.crc-node__tree-value', chainsEl); treevalEl.appendChild(linkEl); if (!segment.hasChildren) { const { startTime, endTime, transferSize } = segment.node.request; - const span = dom.createElement("span", "crc-node__chain-duration"); + const span = dom.createElement('span', 'crc-node__chain-duration'); span.textContent = - " - " + + ' - ' + Util.i18n.formatMilliseconds((endTime - startTime) * 1000) + - ", "; - const span2 = dom.createElement("span", "crc-node__chain-duration"); - span2.textContent = Util.i18n.formatBytesToKB(transferSize, 0.01); + ', '; + const span2 = dom.createElement('span', 'crc-node__chain-duration'); + span2.textContent = Util.i18n.formatBytesToKiB(transferSize, 0.01); treevalEl.appendChild(span); treevalEl.appendChild(span2); @@ -206,16 +207,16 @@ class CriticalRequestChainRenderer { * @return {Element} */ static render(dom, templateContext, details, detailsRenderer) { - const tmpl = dom.cloneTemplate("#tmpl-lh-crc", templateContext); - const containerEl = dom.find(".lh-crc", tmpl); + const tmpl = dom.cloneTemplate('#tmpl-lh-crc', templateContext); + const containerEl = dom.find('.lh-crc', tmpl); // Fill in top summary. - dom.find(".crc-initial-nav", tmpl).textContent = + dom.find('.crc-initial-nav', tmpl).textContent = Util.i18n.strings.crcInitialNavigation; - dom.find(".lh-crc__longest_duration_label", tmpl).textContent = + dom.find('.lh-crc__longest_duration_label', tmpl).textContent = Util.i18n.strings.crcLongestDurationLabel; dom.find( - ".lh-crc__longest_duration", + '.lh-crc__longest_duration', tmpl ).textContent = Util.i18n.formatMilliseconds(details.longestChain.duration); @@ -238,20 +239,15 @@ class CriticalRequestChainRenderer { ); } - return dom.find(".lh-crc-container", tmpl); + return dom.find('.lh-crc-container', tmpl); } } // Alias b/c the name is really long. const CRCRenderer = CriticalRequestChainRenderer; -// // Allow Node require()'ing. -// if (typeof module !== "undefined" && module.exports) { -// module.exports = CriticalRequestChainRenderer; -// } else { -// self.CriticalRequestChainRenderer = CriticalRequestChainRenderer; -// } export default CriticalRequestChainRenderer; + /** @typedef {{ node: LH.Audit.SimpleCriticalRequestNode[string], isLastChild: boolean, diff --git a/src/renderer/details-renderer.js b/src/renderer/details-renderer.js index 5486071..78c9096 100644 --- a/src/renderer/details-renderer.js +++ b/src/renderer/details-renderer.js @@ -1,10 +1,6 @@ -// eslint-disable-next-line -import Util from "./util"; -import CriticalRequestChainRenderer from "./crc-details-renderer"; - /** * @license - * Copyright 2017 Google Inc. All Rights Reserved. + * Copyright 2017 The Lighthouse Authors. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,13 +14,16 @@ import CriticalRequestChainRenderer from "./crc-details-renderer"; * See the License for the specific language governing permissions and * limitations under the License. */ -("use strict"); +'use strict'; + +import Util from './util.js'; +import CriticalRequestChainRenderer from './crc-details-renderer.js'; /* globals self CriticalRequestChainRenderer SnippetRenderer Util URL */ /** @typedef {import('./dom.js')} DOM */ -const URL_PREFIXES = ["http://", "https://", "data:"]; +const URL_PREFIXES = ['http://', 'https://', 'data:']; class DetailsRenderer { /** @@ -49,25 +48,25 @@ class DetailsRenderer { */ render(details) { switch (details.type) { - case "filmstrip": + case 'filmstrip': return this._renderFilmstrip(details); - case "list": + case 'list': return this._renderList(details); - case "table": + case 'table': return this._renderTable(details); - case "criticalrequestchain": + case 'criticalrequestchain': return CriticalRequestChainRenderer.render( this._dom, this._templateContext, details, this ); - case "opportunity": + case 'opportunity': return this._renderTable(details); // Internal-only details, not for rendering. - case "screenshot": - case "debugdata": + case 'screenshot': + case 'debugdata': return null; default: { @@ -84,8 +83,14 @@ class DetailsRenderer { */ _renderBytes(details) { // TODO: handle displayUnit once we have something other than 'kb' - const value = Util.i18n.formatBytesToKB(details.value, details.granularity); - return this._renderText(value); + // Note that 'kb' is historical and actually represents KiB. + const value = Util.i18n.formatBytesToKiB( + details.value, + details.granularity + ); + const textEl = this._renderText(value); + textEl.title = Util.i18n.formatBytes(details.value); + return textEl; } /** @@ -97,7 +102,7 @@ class DetailsRenderer { details.value, details.granularity ); - if (details.displayUnit === "duration") { + if (details.displayUnit === 'duration') { value = Util.i18n.formatDuration(details.value); } @@ -116,19 +121,19 @@ class DetailsRenderer { let title; try { const parsed = Util.parseURL(url); - displayedPath = parsed.file === "/" ? parsed.origin : parsed.file; - displayedHost = parsed.file === "/" ? "" : `(${parsed.hostname})`; + displayedPath = parsed.file === '/' ? parsed.origin : parsed.file; + displayedHost = parsed.file === '/' ? '' : `(${parsed.hostname})`; title = url; } catch (e) { displayedPath = url; } - const element = this._dom.createElement("div", "lh-text__url"); + const element = this._dom.createElement('div', 'lh-text__url'); element.appendChild(this._renderLink({ text: displayedPath, url })); if (displayedHost) { const hostElem = this._renderText(displayedHost); - hostElem.classList.add("lh-text__url-host"); + hostElem.classList.add('lh-text__url-host'); element.appendChild(hostElem); } @@ -145,7 +150,7 @@ class DetailsRenderer { * @return {Element} */ _renderLink(details) { - const allowedProtocols = ["https:", "http:"]; + const allowedProtocols = ['https:', 'http:']; let url; try { url = new URL(details.url); @@ -156,9 +161,9 @@ class DetailsRenderer { return this._renderText(details.text); } - const a = this._dom.createElement("a"); - a.rel = "noopener"; - a.target = "_blank"; + const a = this._dom.createElement('a'); + a.rel = 'noopener'; + a.target = '_blank'; a.textContent = details.text; a.href = url.href; @@ -167,21 +172,22 @@ class DetailsRenderer { /** * @param {string} text - * @return {Element} + * @return {HTMLDivElement} */ _renderText(text) { - const element = this._dom.createElement("div", "lh-text"); + const element = this._dom.createElement('div', 'lh-text'); element.textContent = text; return element; } /** - * @param {string} text + * @param {{value: number, granularity?: number}} details * @return {Element} */ - _renderNumeric(text) { - const element = this._dom.createElement("div", "lh-numeric"); - element.textContent = text; + _renderNumeric(details) { + const value = Util.i18n.formatNumber(details.value, details.granularity); + const element = this._dom.createElement('div', 'lh-numeric'); + element.textContent = value; return element; } @@ -191,11 +197,11 @@ class DetailsRenderer { * @return {Element} */ _renderThumbnail(details) { - const element = this._dom.createElement("img", "lh-thumbnail"); + const element = this._dom.createElement('img', 'lh-thumbnail'); const strValue = details; element.src = strValue; element.title = strValue; - element.alt = ""; + element.alt = ''; return element; } @@ -206,12 +212,12 @@ class DetailsRenderer { _renderUnknown(type, value) { // eslint-disable-next-line no-console console.error(`Unknown details type: ${type}`, value); - const element = this._dom.createElement("details", "lh-unknown"); - this._dom.createChildOf(element, "summary").textContent = + const element = this._dom.createElement('details', 'lh-unknown'); + this._dom.createChildOf(element, 'summary').textContent = `We don't know how to render audit details of type \`${type}\`. ` + - "The Lighthouse version that collected this data is likely newer than the Lighthouse " + - "version of the report renderer. Expand for the raw JSON."; - this._dom.createChildOf(element, "pre").textContent = JSON.stringify( + 'The Lighthouse version that collected this data is likely newer than the Lighthouse ' + + 'version of the report renderer. Expand for the raw JSON.'; + this._dom.createChildOf(element, 'pre').textContent = JSON.stringify( value, null, 2 @@ -223,32 +229,32 @@ class DetailsRenderer { * Render a details item value for embedding in a table. Renders the value * based on the heading's valueType, unless the value itself has a `type` * property to override it. - * @param {LH.Audit.Details.Value} value + * @param {LH.Audit.Details.ItemValue} value * @param {LH.Audit.Details.OpportunityColumnHeading} heading * @return {Element|null} */ _renderTableValue(value, heading) { - if (typeof value === "undefined" || value === null) { + if (value === undefined || value === null) { return null; } // First deal with the possible object forms of value. - if (typeof value === "object") { + if (typeof value === 'object') { // The value's type overrides the heading's for this column. switch (value.type) { - case "code": { + case 'code': { return this._renderCode(value.value); } - case "link": { + case 'link': { return this._renderLink(value); } - case "node": { + case 'node': { return this.renderNode(value); } - case "source-location": { + case 'source-location': { return this.renderSourceLocation(value); } - case "url": { + case 'url': { return this.renderTextURL(value.value); } default: { @@ -259,44 +265,47 @@ class DetailsRenderer { // Next, deal with primitives. switch (heading.valueType) { - case "bytes": { + case 'bytes': { const numValue = Number(value); return this._renderBytes({ value: numValue, - granularity: heading.granularity + granularity: heading.granularity, }); } - case "code": { + case 'code': { const strValue = String(value); return this._renderCode(strValue); } - case "ms": { + case 'ms': { const msValue = { value: Number(value), granularity: heading.granularity, - displayUnit: heading.displayUnit + displayUnit: heading.displayUnit, }; return this._renderMilliseconds(msValue); } - case "numeric": { - const strValue = String(value); - return this._renderNumeric(strValue); + case 'numeric': { + const numValue = Number(value); + return this._renderNumeric({ + value: numValue, + granularity: heading.granularity, + }); } - case "text": { + case 'text': { const strValue = String(value); return this._renderText(strValue); } - case "thumbnail": { + case 'thumbnail': { const strValue = String(value); return this._renderThumbnail(strValue); } - case "timespanMs": { + case 'timespanMs': { const numValue = Number(value); return this._renderMilliseconds({ value: numValue }); } - case "url": { + case 'url': { const strValue = String(value); - if (URL_PREFIXES.some(prefix => strValue.startsWith(prefix))) { + if (URL_PREFIXES.some((prefix) => strValue.startsWith(prefix))) { return this.renderTextURL(strValue); } else { // Fall back to <pre> rendering if not actually a URL. @@ -317,11 +326,11 @@ class DetailsRenderer { * @return {Array<LH.Audit.Details.OpportunityColumnHeading>} */ _getCanonicalizedHeadingsFromTable(tableLike) { - if (tableLike.type === "opportunity") { + if (tableLike.type === 'opportunity') { return tableLike.headings; } - return tableLike.headings.map(heading => + return tableLike.headings.map((heading) => this._getCanonicalizedHeading(heading) ); } @@ -334,36 +343,122 @@ class DetailsRenderer { * @return {LH.Audit.Details.OpportunityColumnHeading} */ _getCanonicalizedHeading(heading) { - let subRows; - if (heading.subRows) { - // @ts-ignore: It's ok that there is no text. - subRows = this._getCanonicalizedHeading(heading.subRows); + let subItemsHeading; + if (heading.subItemsHeading) { + subItemsHeading = this._getCanonicalizedsubItemsHeading( + heading.subItemsHeading, + heading + ); } return { key: heading.key, valueType: heading.itemType, - subRows, + subItemsHeading, label: heading.text, displayUnit: heading.displayUnit, - granularity: heading.granularity + granularity: heading.granularity, + }; + } + + /** + * @param {Exclude<LH.Audit.Details.TableColumnHeading['subItemsHeading'], undefined>} subItemsHeading + * @param {LH.Audit.Details.TableColumnHeading} parentHeading + * @return {LH.Audit.Details.OpportunityColumnHeading['subItemsHeading']} + */ + _getCanonicalizedsubItemsHeading(subItemsHeading, parentHeading) { + // Low-friction way to prevent commiting a falsy key (which is never allowed for + // a subItemsHeading) from passing in CI. + if (!subItemsHeading.key) { + // eslint-disable-next-line no-console + console.warn('key should not be null'); + } + + return { + key: subItemsHeading.key || '', + valueType: subItemsHeading.itemType || parentHeading.itemType, + granularity: subItemsHeading.granularity || parentHeading.granularity, + displayUnit: subItemsHeading.displayUnit || parentHeading.displayUnit, }; } /** - * @param {LH.Audit.Details.Value[]} values + * Returns a new heading where the values are defined first by `heading.subItemsHeading`, + * and secondly by `heading`. If there is no subItemsHeading, returns null, which will + * be rendered as an empty column. * @param {LH.Audit.Details.OpportunityColumnHeading} heading - * @return {Element} + * @return {LH.Audit.Details.OpportunityColumnHeading | null} + */ + _getDerivedsubItemsHeading(heading) { + if (!heading.subItemsHeading) return null; + return { + key: heading.subItemsHeading.key || '', + valueType: heading.subItemsHeading.valueType || heading.valueType, + granularity: heading.subItemsHeading.granularity || heading.granularity, + displayUnit: heading.subItemsHeading.displayUnit || heading.displayUnit, + label: '', + }; + } + + /** + * @param {LH.Audit.Details.OpportunityItem | LH.Audit.Details.TableItem} item + * @param {(LH.Audit.Details.OpportunityColumnHeading | null)[]} headings + */ + _renderTableRow(item, headings) { + const rowElem = this._dom.createElement('tr'); + + for (const heading of headings) { + // Empty cell if no heading or heading key for this column. + if (!heading || !heading.key) { + this._dom.createChildOf(rowElem, 'td', 'lh-table-column--empty'); + continue; + } + + const value = item[heading.key]; + let valueElement; + if (value !== undefined && value !== null) { + valueElement = this._renderTableValue(value, heading); + } + + if (valueElement) { + const classes = `lh-table-column--${heading.valueType}`; + this._dom + .createChildOf(rowElem, 'td', classes) + .appendChild(valueElement); + } else { + // Empty cell is rendered for a column if: + // - the pair is null + // - the heading key is null + // - the value is undefined/null + this._dom.createChildOf(rowElem, 'td', 'lh-table-column--empty'); + } + } + + return rowElem; + } + + /** + * Renders one or more rows from a details table item. A single table item can + * expand into multiple rows, if there is a subItemsHeading. + * @param {LH.Audit.Details.OpportunityItem | LH.Audit.Details.TableItem} item + * @param {LH.Audit.Details.OpportunityColumnHeading[]} headings */ - _renderSubRows(values, heading) { - const subRowsElement = this._dom.createElement("div", "lh-sub-rows"); - for (const childValue of values) { - const subRowElement = this._renderTableValue(childValue, heading); - if (!subRowElement) continue; - subRowElement.classList.add("lh-sub-row"); - subRowsElement.appendChild(subRowElement); + _renderTableRowsFromItem(item, headings) { + const fragment = this._dom.createFragment(); + fragment.append(this._renderTableRow(item, headings)); + + if (!item.subItems) return fragment; + + const subItemsHeadings = headings.map(this._getDerivedsubItemsHeading); + if (!subItemsHeadings.some(Boolean)) return fragment; + + for (const subItem of item.subItems.items) { + const rowEl = this._renderTableRow(subItem, subItemsHeadings); + rowEl.classList.add('lh-sub-item-row'); + fragment.append(rowEl); } - return subRowsElement; + + return fragment; } /** @@ -371,59 +466,34 @@ class DetailsRenderer { * @return {Element} */ _renderTable(details) { - if (!details.items.length) return this._dom.createElement("span"); + if (!details.items.length) return this._dom.createElement('span'); - const tableElem = this._dom.createElement("table", "lh-table"); - const theadElem = this._dom.createChildOf(tableElem, "thead"); - const theadTrElem = this._dom.createChildOf(theadElem, "tr"); + const tableElem = this._dom.createElement('table', 'lh-table'); + const theadElem = this._dom.createChildOf(tableElem, 'thead'); + const theadTrElem = this._dom.createChildOf(theadElem, 'tr'); const headings = this._getCanonicalizedHeadingsFromTable(details); for (const heading of headings) { - const valueType = heading.valueType || "text"; + const valueType = heading.valueType || 'text'; const classes = `lh-table-column--${valueType}`; - const labelEl = this._dom.createElement("div", "lh-text"); + const labelEl = this._dom.createElement('div', 'lh-text'); labelEl.textContent = heading.label; - this._dom.createChildOf(theadTrElem, "th", classes).appendChild(labelEl); + this._dom.createChildOf(theadTrElem, 'th', classes).appendChild(labelEl); } - const tbodyElem = this._dom.createChildOf(tableElem, "tbody"); - for (const row of details.items) { - const rowElem = this._dom.createChildOf(tbodyElem, "tr"); - for (const heading of headings) { - const valueFragment = this._dom.createFragment(); - - const value = row[heading.key]; - const valueElement = - value !== undefined && - !Array.isArray(value) && - this._renderTableValue(value, heading); - if (valueElement) valueFragment.appendChild(valueElement); - - if (heading.subRows) { - const subRowsHeading = { - key: heading.subRows.key, - valueType: heading.subRows.valueType || heading.valueType, - granularity: heading.subRows.granularity || heading.granularity, - displayUnit: heading.subRows.displayUnit || heading.displayUnit, - label: "" - }; - const values = row[subRowsHeading.key]; - if (!Array.isArray(values)) continue; - const subRowsElement = this._renderSubRows(values, subRowsHeading); - valueFragment.appendChild(subRowsElement); - } - - if (valueFragment.childElementCount) { - const classes = `lh-table-column--${heading.valueType}`; - this._dom - .createChildOf(rowElem, "td", classes) - .appendChild(valueFragment); - } else { - this._dom.createChildOf(rowElem, "td", "lh-table-column--empty"); - } + const tbodyElem = this._dom.createChildOf(tableElem, 'tbody'); + let even = true; + for (const item of details.items) { + const rowsFragment = this._renderTableRowsFromItem(item, headings); + for (const rowEl of this._dom.findAll('tr', rowsFragment)) { + // For zebra styling. + rowEl.classList.add(even ? 'lh-row--even' : 'lh-row--odd'); } + even = !even; + tbodyElem.append(rowsFragment); } + return tableElem; } @@ -432,9 +502,9 @@ class DetailsRenderer { * @return {Element} */ _renderList(details) { - const listContainer = this._dom.createElement("div", "lh-list"); + const listContainer = this._dom.createElement('div', 'lh-list'); - details.items.forEach(item => { + details.items.forEach((item) => { const snippetEl = SnippetRenderer.render( this._dom, this._templateContext, @@ -450,27 +520,26 @@ class DetailsRenderer { /** * @param {LH.Audit.Details.NodeValue} item * @return {Element} - * @protected */ renderNode(item) { - const element = this._dom.createElement("span", "lh-node"); + const element = this._dom.createElement('span', 'lh-node'); if (item.nodeLabel) { - const nodeLabelEl = this._dom.createElement("div"); + const nodeLabelEl = this._dom.createElement('div'); nodeLabelEl.textContent = item.nodeLabel; element.appendChild(nodeLabelEl); } if (item.snippet) { - const snippetEl = this._dom.createElement("div"); - snippetEl.classList.add("lh-node__snippet"); + const snippetEl = this._dom.createElement('div'); + snippetEl.classList.add('lh-node__snippet'); snippetEl.textContent = item.snippet; element.appendChild(snippetEl); } if (item.selector) { element.title = item.selector; } - if (item.path) element.setAttribute("data-path", item.path); - if (item.selector) element.setAttribute("data-selector", item.selector); - if (item.snippet) element.setAttribute("data-snippet", item.snippet); + if (item.path) element.setAttribute('data-path', item.path); + if (item.selector) element.setAttribute('data-selector', item.selector); + if (item.snippet) element.setAttribute('data-snippet', item.snippet); return element; } @@ -490,20 +559,20 @@ class DetailsRenderer { const column = item.column; let element; - if (item.urlProvider === "network") { + if (item.urlProvider === 'network') { element = this.renderTextURL(item.url); - this._dom.find("a", element).textContent += `:${line}:${column}`; + this._dom.find('a', element).textContent += `:${line}:${column}`; } else { element = this._renderText( `${item.url}:${line}:${column} (from sourceURL)` ); } - element.classList.add("lh-source-location"); - element.setAttribute("data-source-url", item.url); + element.classList.add('lh-source-location'); + element.setAttribute('data-source-url', item.url); // DevTools expects zero-indexed lines. - element.setAttribute("data-source-line", String(item.line)); - element.setAttribute("data-source-column", String(item.column)); + element.setAttribute('data-source-line', String(item.line)); + element.setAttribute('data-source-column', String(item.column)); return element; } @@ -512,17 +581,17 @@ class DetailsRenderer { * @return {Element} */ _renderFilmstrip(details) { - const filmstripEl = this._dom.createElement("div", "lh-filmstrip"); + const filmstripEl = this._dom.createElement('div', 'lh-filmstrip'); for (const thumbnail of details.items) { const frameEl = this._dom.createChildOf( filmstripEl, - "div", - "lh-filmstrip__frame" + 'div', + 'lh-filmstrip__frame' ); - this._dom.createChildOf(frameEl, "img", "lh-filmstrip__thumbnail", { + this._dom.createChildOf(frameEl, 'img', 'lh-filmstrip__thumbnail', { src: thumbnail.data, - alt: `Screenshot` + alt: `Screenshot`, }); } return filmstripEl; @@ -533,16 +602,10 @@ class DetailsRenderer { * @return {Element} */ _renderCode(text) { - const pre = this._dom.createElement("pre", "lh-code"); + const pre = this._dom.createElement('pre', 'lh-code'); pre.textContent = text; return pre; } } -// if (typeof module !== 'undefined' && module.exports) { -// module.exports = DetailsRenderer; -// } else { -// self.DetailsRenderer = DetailsRenderer; -// } - export default DetailsRenderer; diff --git a/src/renderer/dom.js b/src/renderer/dom.js index 49cd8c0..1630d3f 100644 --- a/src/renderer/dom.js +++ b/src/renderer/dom.js @@ -1,8 +1,6 @@ -import Util from "./util"; - /** * @license - * Copyright 2017 Google Inc. All Rights Reserved. + * Copyright 2017 The Lighthouse Authors. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +14,9 @@ import Util from "./util"; * See the License for the specific language governing permissions and * limitations under the License. */ -("use strict"); +'use strict'; + +import Util from './util'; /* globals URL self Util */ @@ -30,7 +30,7 @@ class DOM { /** @type {Document} */ this._document = document; /** @type {string} */ - this._lighthouseChannel = "unknown"; + this._lighthouseChannel = 'unknown'; } /** @@ -47,9 +47,9 @@ class DOM { if (className) { element.className = className; } - Object.keys(attrs).forEach(key => { + Object.keys(attrs).forEach((key) => { const value = attrs[key]; - if (typeof value !== "undefined") { + if (typeof value !== 'undefined') { element.setAttribute(key, value); } }); @@ -57,7 +57,7 @@ class DOM { } /** - * @return {DocumentFragment} + * @return {!DocumentFragment} */ createFragment() { return this._document.createDocumentFragment(); @@ -82,7 +82,7 @@ class DOM { /** * @param {string} selector * @param {ParentNode} context - * @return {DocumentFragment} A clone of the template content. + * @return {!DocumentFragment} A clone of the template content. * @throws {Error} */ cloneTemplate(selector, context) { @@ -97,10 +97,10 @@ class DOM { // Prevent duplicate styles in the DOM. After a template has been stamped // for the first time, remove the clone's styles so they're not re-added. - if (template.hasAttribute("data-stamped")) { - this.findAll("style", clone).forEach(style => style.remove()); + if (template.hasAttribute('data-stamped')) { + this.findAll('style', clone).forEach((style) => style.remove()); } - template.setAttribute("data-stamped", "true"); + template.setAttribute('data-stamped', 'true'); return clone; } @@ -109,8 +109,8 @@ class DOM { * Resets the "stamped" state of the templates. */ resetTemplates() { - this.findAll("template[data-stamped]", this._document).forEach(t => { - t.removeAttribute("data-stamped"); + this.findAll('template[data-stamped]', this._document).forEach((t) => { + t.removeAttribute('data-stamped'); }); } @@ -119,7 +119,7 @@ class DOM { * @return {Element} */ convertMarkdownLinkSnippets(text) { - const element = this.createElement("span"); + const element = this.createElement('span'); for (const segment of Util.splitMarkdownLink(text)) { if (!segment.isLink) { @@ -131,15 +131,15 @@ class DOM { // Otherwise, append any links found. const url = new URL(segment.linkHref); - const DOCS_ORIGINS = ["https://developers.google.com", "https://web.dev"]; + const DOCS_ORIGINS = ['https://developers.google.com', 'https://web.dev']; if (DOCS_ORIGINS.includes(url.origin)) { - url.searchParams.set("utm_source", "lighthouse"); - url.searchParams.set("utm_medium", this._lighthouseChannel); + url.searchParams.set('utm_source', 'lighthouse'); + url.searchParams.set('utm_medium', this._lighthouseChannel); } - const a = this.createElement("a"); - a.rel = "noopener"; - a.target = "_blank"; + const a = this.createElement('a'); + a.rel = 'noopener'; + a.target = '_blank'; a.textContent = segment.text; a.href = url.href; element.appendChild(a); @@ -153,11 +153,11 @@ class DOM { * @return {Element} */ convertMarkdownCodeSnippets(markdownText) { - const element = this.createElement("span"); + const element = this.createElement('span'); for (const segment of Util.splitMarkdownCodeSpans(markdownText)) { if (segment.isCode) { - const pre = this.createElement("code"); + const pre = this.createElement('code'); pre.textContent = segment.text; element.appendChild(pre); } else { @@ -188,7 +188,7 @@ class DOM { * @return {boolean} */ isDevTools() { - return !!this._document.querySelector(".lh-devtools"); + return !!this._document.querySelector('.lh-devtools'); } /** @@ -196,7 +196,7 @@ class DOM { * nothing matches query. * @param {string} query * @param {ParentNode} context - * @return {HTMLElement} + * @return {!HTMLElement} */ find(query, context) { /** @type {?HTMLElement} */ @@ -211,17 +211,11 @@ class DOM { * Helper for context.querySelectorAll. Returns an Array instead of a NodeList. * @param {string} query * @param {ParentNode} context - * @return {Array<HTMLElement>} + * @return {!Array<HTMLElement>} */ findAll(query, context) { return Array.from(context.querySelectorAll(query)); } } -// if (typeof module !== "undefined" && module.exports) { -// module.exports = DOM; -// } else { -// self.DOM = DOM; -// } - export default DOM; diff --git a/src/renderer/i18n.js b/src/renderer/i18n.js index 21b0d2e..df74a0e 100644 --- a/src/renderer/i18n.js +++ b/src/renderer/i18n.js @@ -1,14 +1,14 @@ /** - * @license Copyright 2020 Google Inc. All Rights Reserved. + * @license Copyright 2020 The Lighthouse Authors. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -"use strict"; +'use strict'; /* globals self, URL */ // Not named `NBSP` because that creates a duplicate identifier (util.js). -const NBSP2 = "\xa0"; +const NBSP2 = '\xa0'; class I18n { /** @@ -17,7 +17,7 @@ class I18n { */ constructor(locale, strings) { // When testing, use a locale with more exciting numeric formatting. - if (locale === "en-XA") locale = "de"; + if (locale === 'en-XA') locale = 'de'; this._numberDateLocale = locale; this._numberFormatter = new Intl.NumberFormat(locale); @@ -44,11 +44,23 @@ class I18n { * @param {number=} granularity Controls how coarse the displayed value is, defaults to 0.1 * @return {string} */ - formatBytesToKB(size, granularity = 0.1) { + formatBytesToKiB(size, granularity = 0.1) { const kbs = this._numberFormatter.format( Math.round(size / 1024 / granularity) * granularity ); - return `${kbs}${NBSP2}KB`; + return `${kbs}${NBSP2}KiB`; + } + + /** + * @param {number} size + * @param {number=} granularity Controls how coarse the displayed value is, defaults to 0.1 + * @return {string} + */ + formatBytes(size, granularity = 1) { + const kbs = this._numberFormatter.format( + Math.round(size / granularity) * granularity + ); + return `${kbs}${NBSP2}bytes`; } /** @@ -79,20 +91,20 @@ class I18n { formatDateTime(date) { /** @type {Intl.DateTimeFormatOptions} */ const options = { - month: "short", - day: "numeric", - year: "numeric", - hour: "numeric", - minute: "numeric", - timeZoneName: "short" + month: 'short', + day: 'numeric', + year: 'numeric', + hour: 'numeric', + minute: 'numeric', + timeZoneName: 'short', }; let formatter = new Intl.DateTimeFormat(this._numberDateLocale, options); // Force UTC if runtime timezone could not be detected. // See https://github.com/GoogleChrome/lighthouse/issues/1056 const tz = formatter.resolvedOptions().timeZone; - if (!tz || tz.toLowerCase() === "etc/unknown") { - options.timeZone = "UTC"; + if (!tz || tz.toLowerCase() === 'etc/unknown') { + options.timeZone = 'UTC'; formatter = new Intl.DateTimeFormat(this._numberDateLocale, options); } return formatter.format(new Date(date)); @@ -105,7 +117,7 @@ class I18n { formatDuration(timeInMilliseconds) { let timeInSeconds = timeInMilliseconds / 1000; if (Math.round(timeInSeconds) === 0) { - return "None"; + return 'None'; } /** @type {Array<string>} */ @@ -114,10 +126,10 @@ class I18n { d: 60 * 60 * 24, h: 60 * 60, m: 60, - s: 1 + s: 1, }); - Object.keys(unitLabels).forEach(label => { + Object.keys(unitLabels).forEach((label) => { const unit = unitLabels[label]; const numberOfUnits = Math.floor(timeInSeconds / unit); if (numberOfUnits > 0) { @@ -126,14 +138,8 @@ class I18n { } }); - return parts.join(" "); + return parts.join(' '); } } -// if (typeof module !== 'undefined' && module.exports) { -// module.exports = I18n; -// } else { -// self.I18n = I18n; -// } - export default I18n; diff --git a/src/renderer/logger.js b/src/renderer/logger.js index 128e4a2..820f62a 100644 --- a/src/renderer/logger.js +++ b/src/renderer/logger.js @@ -1,6 +1,6 @@ /** * @license - * Copyright 2017 Google Inc. All Rights Reserved. + * Copyright 2017 The Lighthouse Authors. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -"use strict"; +'use strict'; /** * Logs messages via a UI butter. @@ -39,10 +39,10 @@ class Logger { this._id && clearTimeout(this._id); this.el.textContent = msg; - this.el.classList.add("show"); + this.el.classList.add('show'); if (autoHide) { - this._id = setTimeout(_ => { - this.el.classList.remove("show"); + this._id = setTimeout((_) => { + this.el.classList.remove('show'); }, 7000); } } @@ -51,7 +51,7 @@ class Logger { * @param {string} msg */ warn(msg) { - this.log("Warning: " + msg); + this.log('Warning: ' + msg); } /** @@ -62,7 +62,7 @@ class Logger { // Rethrow to make sure it's auditable as an error, but in a setTimeout so page // recovers gracefully and user can try loading a report again. - setTimeout(_ => { + setTimeout((_) => { throw new Error(msg); }, 0); } @@ -72,12 +72,8 @@ class Logger { */ hide() { this._id && clearTimeout(this._id); - this.el.classList.remove("show"); + this.el.classList.remove('show'); } } -// if (typeof module !== 'undefined' && module.exports) { -// module.exports = Logger; -// } - export default Logger; diff --git a/src/renderer/performance-category-renderer.js b/src/renderer/performance-category-renderer.js index 01c0a93..1338ce3 100644 --- a/src/renderer/performance-category-renderer.js +++ b/src/renderer/performance-category-renderer.js @@ -1,12 +1,6 @@ -// eslint-disable-next-line - -import DOM from "./dom"; -import CategoryRenderer from "./category-renderer"; -import Util from "./util"; - /** * @license - * Copyright 2018 Google Inc. All Rights Reserved. + * Copyright 2018 The Lighthouse Authors. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,7 +14,10 @@ import Util from "./util"; * See the License for the specific language governing permissions and * limitations under the License. */ -("use strict"); +'use strict'; + +import CategoryRenderer from './category-renderer.js'; +import Util from './util.js'; /* globals self, Util, CategoryRenderer */ @@ -29,14 +26,14 @@ import Util from "./util"; class PerformanceCategoryRenderer extends CategoryRenderer { /** * @param {LH.ReportResult.AuditRef} audit - * @return {Element} + * @return {!Element} */ _renderMetric(audit) { const tmpl = this.dom.cloneTemplate( - "#tmpl-lh-metric", + '#tmpl-lh-metric', this.templateContext ); - const element = this.dom.find(".lh-metric", tmpl); + const element = this.dom.find('.lh-metric', tmpl); element.id = audit.result.id; const rating = Util.calculateRating( audit.result.score, @@ -44,23 +41,23 @@ class PerformanceCategoryRenderer extends CategoryRenderer { ); element.classList.add(`lh-metric--${rating}`); - const titleEl = this.dom.find(".lh-metric__title", tmpl); + const titleEl = this.dom.find('.lh-metric__title', tmpl); titleEl.textContent = audit.result.title; - const valueEl = this.dom.find(".lh-metric__value", tmpl); - valueEl.textContent = audit.result.displayValue || ""; + const valueEl = this.dom.find('.lh-metric__value', tmpl); + valueEl.textContent = audit.result.displayValue || ''; - const descriptionEl = this.dom.find(".lh-metric__description", tmpl); + const descriptionEl = this.dom.find('.lh-metric__description', tmpl); descriptionEl.appendChild( this.dom.convertMarkdownLinkSnippets(audit.result.description) ); - if (audit.result.scoreDisplayMode === "error") { - descriptionEl.textContent = ""; - valueEl.textContent = "Error!"; - const tooltip = this.dom.createChildOf(descriptionEl, "span"); + if (audit.result.scoreDisplayMode === 'error') { + descriptionEl.textContent = ''; + valueEl.textContent = 'Error!'; + const tooltip = this.dom.createChildOf(descriptionEl, 'span'); tooltip.textContent = - audit.result.errorMessage || "Report error: no metric information"; + audit.result.errorMessage || 'Report error: no metric information'; } return element; @@ -69,29 +66,29 @@ class PerformanceCategoryRenderer extends CategoryRenderer { /** * @param {LH.ReportResult.AuditRef} audit * @param {number} scale - * @return {Element} + * @return {!Element} */ _renderOpportunity(audit, scale) { const oppTmpl = this.dom.cloneTemplate( - "#tmpl-lh-opportunity", + '#tmpl-lh-opportunity', this.templateContext ); const element = this.populateAuditValues(audit, oppTmpl); element.id = audit.result.id; - if (!audit.result.details || audit.result.scoreDisplayMode === "error") { + if (!audit.result.details || audit.result.scoreDisplayMode === 'error') { return element; } const details = audit.result.details; - if (details.type !== "opportunity") { + if (details.type !== 'opportunity') { return element; } // Overwrite the displayValue with opportunity's wastedMs - const displayEl = this.dom.find(".lh-audit__display-text", element); + const displayEl = this.dom.find('.lh-audit__display-text', element); const sparklineWidthPct = `${(details.overallSavingsMs / scale) * 100}%`; this.dom.find( - ".lh-sparkline__bar", + '.lh-sparkline__bar', element ).style.width = sparklineWidthPct; displayEl.textContent = Util.i18n.formatSeconds( @@ -103,7 +100,7 @@ class PerformanceCategoryRenderer extends CategoryRenderer { if (audit.result.displayValue) { const displayValue = audit.result.displayValue; this.dom.find( - ".lh-load-opportunity__sparkline", + '.lh-load-opportunity__sparkline', element ).title = displayValue; displayEl.title = displayValue; @@ -120,10 +117,10 @@ class PerformanceCategoryRenderer extends CategoryRenderer { * @return {number} */ _getWastedMs(audit) { - if (audit.result.details && audit.result.details.type === "opportunity") { + if (audit.result.details && audit.result.details.type === 'opportunity') { const details = audit.result.details; - if (typeof details.overallSavingsMs !== "number") { - throw new Error("non-opportunity details passed to _getWastedMs"); + if (typeof details.overallSavingsMs !== 'number') { + throw new Error('non-opportunity details passed to _getWastedMs'); } return details.overallSavingsMs; } else { @@ -131,6 +128,70 @@ class PerformanceCategoryRenderer extends CategoryRenderer { } } + /** + * Get a link to the interactive scoring calculator with the metric values. + * @param {LH.ReportResult.AuditRef[]} auditRefs + * @return {string} + */ + _getScoringCalculatorHref(auditRefs) { + const v5andv6metrics = auditRefs.filter( + (audit) => audit.group === 'metrics' + ); + const fci = auditRefs.find((audit) => audit.id === 'first-cpu-idle'); + const fmp = auditRefs.find( + (audit) => audit.id === 'first-meaningful-paint' + ); + if (fci) v5andv6metrics.push(fci); + if (fmp) v5andv6metrics.push(fmp); + + /** @type {Record<string, string>} */ + const acronymMapping = { + 'cumulative-layout-shift': 'CLS', + 'first-contentful-paint': 'FCP', + 'first-cpu-idle': 'FCI', + 'first-meaningful-paint': 'FMP', + interactive: 'TTI', + 'largest-contentful-paint': 'LCP', + 'speed-index': 'SI', + 'total-blocking-time': 'TBT', + }; + + /** + * Clamp figure to 2 decimal places + * @param {number} val + * @return {number} + */ + const clampTo2Decimals = (val) => Math.round(val * 100) / 100; + + const metricPairs = v5andv6metrics.map((audit) => { + let value; + if (typeof audit.result.numericValue === 'number') { + value = + audit.id === 'cumulative-layout-shift' + ? clampTo2Decimals(audit.result.numericValue) + : Math.round(audit.result.numericValue); + value = value.toString(); + } else { + value = 'null'; + } + return [acronymMapping[audit.id] || audit.id, value]; + }); + const paramPairs = [...metricPairs]; + + if (Util.reportJson) { + paramPairs.push([ + 'device', + Util.reportJson.configSettings.emulatedFormFactor, + ]); + paramPairs.push(['version', Util.reportJson.lighthouseVersion]); + } + + const params = new URLSearchParams(paramPairs); + const url = new URL('https://googlechrome.github.io/lighthouse/scorecalc/'); + url.hash = params.toString(); + return url.href; + } + /** * @param {LH.ReportResult.Category} category * @param {Object<string, LH.Result.ReportGroup>} groups @@ -140,9 +201,9 @@ class PerformanceCategoryRenderer extends CategoryRenderer { */ render(category, groups, environment) { const strings = Util.i18n.strings; - const element = this.dom.createElement("div", "lh-category"); - if (environment === "PSI") { - const gaugeEl = this.dom.createElement("div", "lh-score__gauge"); + const element = this.dom.createElement('div', 'lh-category'); + if (environment === 'PSI') { + const gaugeEl = this.dom.createElement('div', 'lh-score__gauge'); gaugeEl.appendChild(this.renderScoreGauge(category, groups)); element.appendChild(gaugeEl); } else { @@ -155,65 +216,56 @@ class PerformanceCategoryRenderer extends CategoryRenderer { // Metric descriptions toggle. const toggleTmpl = this.dom.cloneTemplate( - "#tmpl-lh-metrics-toggle", + '#tmpl-lh-metrics-toggle', this.templateContext ); - const _toggleEl = this.dom.find(".lh-metrics-toggle", toggleTmpl); + const _toggleEl = this.dom.find('.lh-metrics-toggle', toggleTmpl); metricAuditsEl.append(..._toggleEl.childNodes); const metricAudits = category.auditRefs.filter( - audit => audit.group === "metrics" + (audit) => audit.group === 'metrics' ); - const keyMetrics = metricAudits.filter(a => a.weight >= 3); - const otherMetrics = metricAudits.filter(a => a.weight < 3); - const metricsBoxesEl = this.dom.createChildOf( metricAuditsEl, - "div", - "lh-columns" - ); - const metricsColumn1El = this.dom.createChildOf( - metricsBoxesEl, - "div", - "lh-column" - ); - const metricsColumn2El = this.dom.createChildOf( - metricsBoxesEl, - "div", - "lh-column" + 'div', + 'lh-metrics-container' ); - keyMetrics.forEach(item => { - metricsColumn1El.appendChild(this._renderMetric(item)); - }); - otherMetrics.forEach(item => { - metricsColumn2El.appendChild(this._renderMetric(item)); + metricAudits.forEach((item) => { + metricsBoxesEl.appendChild(this._renderMetric(item)); }); - // 'Values are estimated and may vary' is used as the category description for PSI - if (environment !== "PSI") { - const estValuesEl = this.dom.createChildOf( - metricAuditsEl, - "div", - "lh-metrics__disclaimer" - ); - const disclaimerEl = this.dom.convertMarkdownLinkSnippets( - strings.varianceDisclaimer - ); - estValuesEl.appendChild(disclaimerEl); - } + const estValuesEl = this.dom.createChildOf( + metricAuditsEl, + 'div', + 'lh-metrics__disclaimer' + ); + const disclaimerEl = this.dom.convertMarkdownLinkSnippets( + strings.varianceDisclaimer + ); + estValuesEl.appendChild(disclaimerEl); - metricAuditsEl.classList.add("lh-audit-group--metrics"); + // Add link to score calculator. + const calculatorLink = this.dom.createChildOf( + estValuesEl, + 'a', + 'lh-calclink' + ); + calculatorLink.target = '_blank'; + calculatorLink.textContent = strings.calculatorLink; + calculatorLink.href = this._getScoringCalculatorHref(category.auditRefs); + + metricAuditsEl.classList.add('lh-audit-group--metrics'); element.appendChild(metricAuditsEl); // Filmstrip const timelineEl = this.dom.createChildOf( element, - "div", - "lh-filmstrip-container" + 'div', + 'lh-filmstrip-container' ); const thumbnailAudit = category.auditRefs.find( - audit => audit.id === "screenshot-thumbnails" + (audit) => audit.id === 'screenshot-thumbnails' ); const thumbnailResult = thumbnailAudit && thumbnailAudit.result; if (thumbnailResult && thumbnailResult.details) { @@ -223,26 +275,31 @@ class PerformanceCategoryRenderer extends CategoryRenderer { } // Budgets - const budgetAudit = category.auditRefs.find( - audit => audit.id === "performance-budget" - ); - if (budgetAudit && budgetAudit.result.details) { - const table = this.detailsRenderer.render(budgetAudit.result.details); - if (table) { - table.id = budgetAudit.id; - table.classList.add("lh-audit"); - const budgetsGroupEl = this.renderAuditGroup(groups.budgets); - budgetsGroupEl.appendChild(table); - budgetsGroupEl.classList.add("lh-audit-group--budgets"); - element.appendChild(budgetsGroupEl); + /** @type {Array<Element>} */ + const budgetTableEls = []; + ['performance-budget', 'timing-budget'].forEach((id) => { + const audit = category.auditRefs.find((audit) => audit.id === id); + if (audit && audit.result.details) { + const table = this.detailsRenderer.render(audit.result.details); + if (table) { + table.id = id; + table.classList.add('lh-audit'); + budgetTableEls.push(table); + } } + }); + if (budgetTableEls.length > 0) { + const budgetsGroupEl = this.renderAuditGroup(groups.budgets); + budgetTableEls.forEach((table) => budgetsGroupEl.appendChild(table)); + budgetsGroupEl.classList.add('lh-audit-group--budgets'); + element.appendChild(budgetsGroupEl); } // Opportunities const opportunityAudits = category.auditRefs .filter( - audit => - audit.group === "load-opportunities" && + (audit) => + audit.group === 'load-opportunities' && !Util.showAsPassed(audit.result) ) .sort( @@ -253,63 +310,63 @@ class PerformanceCategoryRenderer extends CategoryRenderer { if (opportunityAudits.length) { // Scale the sparklines relative to savings, minimum 2s to not overstate small savings const minimumScale = 2000; - const wastedMsValues = opportunityAudits.map(audit => + const wastedMsValues = opportunityAudits.map((audit) => this._getWastedMs(audit) ); const maxWaste = Math.max(...wastedMsValues); const scale = Math.max(Math.ceil(maxWaste / 1000) * 1000, minimumScale); - const groupEl = this.renderAuditGroup(groups["load-opportunities"]); + const groupEl = this.renderAuditGroup(groups['load-opportunities']); const tmpl = this.dom.cloneTemplate( - "#tmpl-lh-opportunity-header", + '#tmpl-lh-opportunity-header', this.templateContext ); - this.dom.find(".lh-load-opportunity__col--one", tmpl).textContent = + this.dom.find('.lh-load-opportunity__col--one', tmpl).textContent = strings.opportunityResourceColumnLabel; - this.dom.find(".lh-load-opportunity__col--two", tmpl).textContent = + this.dom.find('.lh-load-opportunity__col--two', tmpl).textContent = strings.opportunitySavingsColumnLabel; - const headerEl = this.dom.find(".lh-load-opportunity__header", tmpl); + const headerEl = this.dom.find('.lh-load-opportunity__header', tmpl); groupEl.appendChild(headerEl); - opportunityAudits.forEach(item => + opportunityAudits.forEach((item) => groupEl.appendChild(this._renderOpportunity(item, scale)) ); - groupEl.classList.add("lh-audit-group--load-opportunities"); + groupEl.classList.add('lh-audit-group--load-opportunities'); element.appendChild(groupEl); } // Diagnostics const diagnosticAudits = category.auditRefs .filter( - audit => - audit.group === "diagnostics" && !Util.showAsPassed(audit.result) + (audit) => + audit.group === 'diagnostics' && !Util.showAsPassed(audit.result) ) .sort((a, b) => { const scoreA = - a.result.scoreDisplayMode === "informative" + a.result.scoreDisplayMode === 'informative' ? 100 : Number(a.result.score); const scoreB = - b.result.scoreDisplayMode === "informative" + b.result.scoreDisplayMode === 'informative' ? 100 : Number(b.result.score); return scoreA - scoreB; }); if (diagnosticAudits.length) { - const groupEl = this.renderAuditGroup(groups["diagnostics"]); - diagnosticAudits.forEach(item => + const groupEl = this.renderAuditGroup(groups['diagnostics']); + diagnosticAudits.forEach((item) => groupEl.appendChild(this.renderAudit(item)) ); - groupEl.classList.add("lh-audit-group--diagnostics"); + groupEl.classList.add('lh-audit-group--diagnostics'); element.appendChild(groupEl); } // Passed audits const passedAudits = category.auditRefs.filter( - audit => - (audit.group === "load-opportunities" || - audit.group === "diagnostics") && + (audit) => + (audit.group === 'load-opportunities' || + audit.group === 'diagnostics') && Util.showAsPassed(audit.result) ); @@ -317,17 +374,12 @@ class PerformanceCategoryRenderer extends CategoryRenderer { const clumpOpts = { auditRefs: passedAudits, - groupDefinitions: groups + groupDefinitions: groups, }; - const passedElem = this.renderClump("passed", clumpOpts); + const passedElem = this.renderClump('passed', clumpOpts); element.appendChild(passedElem); return element; } } -// if (typeof module !== "undefined" && module.exports) { -// module.exports = PerformanceCategoryRenderer; -// } else { -// self.PerformanceCategoryRenderer = PerformanceCategoryRenderer; -// } export default PerformanceCategoryRenderer; diff --git a/src/renderer/psi.js b/src/renderer/psi.js index 4007ceb..bcd9832 100644 --- a/src/renderer/psi.js +++ b/src/renderer/psi.js @@ -1,6 +1,6 @@ /** * @license - * Copyright 2018 Google Inc. All Rights Reserved. + * Copyright 2018 The Lighthouse Authors. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -"use strict"; +'use strict'; -/* globals self DOM PerformanceCategoryRenderer Util DetailsRenderer */ +/* globals self DOM PerformanceCategoryRenderer Util I18n DetailsRenderer */ /** * Returns all the elements that PSI needs to render the report @@ -34,7 +34,7 @@ */ function prepareLabData(LHResult, document) { const lhResult = - typeof LHResult === "string" + typeof LHResult === 'string' ? /** @type {LH.Result} */ (JSON.parse(LHResult)) : LHResult; @@ -44,6 +44,13 @@ function prepareLabData(LHResult, document) { dom.resetTemplates(); const reportLHR = Util.prepareReportResult(lhResult); + const i18n = new I18n(reportLHR.configSettings.locale, { + // Set missing renderer strings to default (english) values. + ...Util.UIStrings, + ...reportLHR.i18n.rendererFormattedStrings, + }); + Util.i18n = i18n; + const perfCategory = reportLHR.categories.performance; if (!perfCategory) throw new Error(`No performance category. Can't make lab data section`); @@ -62,23 +69,23 @@ function prepareLabData(LHResult, document) { const perfCategoryEl = perfRenderer.render( perfCategory, reportLHR.categoryGroups, - "PSI" + 'PSI' ); - const scoreGaugeEl = dom.find(".lh-score__gauge", perfCategoryEl); + const scoreGaugeEl = dom.find('.lh-score__gauge', perfCategoryEl); scoreGaugeEl.remove(); - const scoreGaugeWrapperEl = dom.find(".lh-gauge__wrapper", scoreGaugeEl); - scoreGaugeWrapperEl.classList.add("lh-gauge__wrapper--huge"); + const scoreGaugeWrapperEl = dom.find('.lh-gauge__wrapper', scoreGaugeEl); + scoreGaugeWrapperEl.classList.add('lh-gauge__wrapper--huge'); // Remove navigation link on gauge - scoreGaugeWrapperEl.removeAttribute("href"); + scoreGaugeWrapperEl.removeAttribute('href'); const finalScreenshotDataUri = _getFinalScreenshot(perfCategory); const clonedScoreTemplate = dom.cloneTemplate( - "#tmpl-lh-scorescale", + '#tmpl-lh-scorescale', dom.document() ); - const scoreScaleEl = dom.find(".lh-scorescale", clonedScoreTemplate); + const scoreScaleEl = dom.find('.lh-scorescale', clonedScoreTemplate); return { scoreGaugeEl, perfCategoryEl, finalScreenshotDataUri, scoreScaleEl }; } @@ -89,22 +96,16 @@ function prepareLabData(LHResult, document) { */ function _getFinalScreenshot(perfCategory) { const auditRef = perfCategory.auditRefs.find( - audit => audit.id === "final-screenshot" + (audit) => audit.id === 'final-screenshot' ); if ( !auditRef || !auditRef.result || - auditRef.result.scoreDisplayMode === "error" + auditRef.result.scoreDisplayMode === 'error' ) return null; return /** @type {LH.Audit.Details.Screenshot} */ (auditRef.result.details) .data; } -// if (typeof module !== 'undefined' && module.exports) { -// module.exports = prepareLabData; -// } else { -// self.prepareLabData = prepareLabData; -// } - export default prepareLabData; diff --git a/src/renderer/pwa-category-renderer.js b/src/renderer/pwa-category-renderer.js index bef1611..a288a9a 100644 --- a/src/renderer/pwa-category-renderer.js +++ b/src/renderer/pwa-category-renderer.js @@ -1,9 +1,6 @@ -import CategoryRenderer from "./category-renderer"; -import Util from "./util"; - /** * @license - * Copyright 2018 Google Inc. All Rights Reserved. + * Copyright 2018 The Lighthouse Authors. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +14,10 @@ import Util from "./util"; * See the License for the specific language governing permissions and * limitations under the License. */ -("use strict"); +'use strict'; + +import CategoryRenderer from './category-renderer'; +import Util from './util'; /* globals self, Util, CategoryRenderer */ @@ -26,7 +26,7 @@ import Util from "./util"; */ const getUniqueSuffix = (() => { let svgSuffix = 0; - return function() { + return function () { return svgSuffix++; }; })(); @@ -38,7 +38,7 @@ class PwaCategoryRenderer extends CategoryRenderer { * @return {Element} */ render(category, groupDefinitions = {}) { - const categoryElem = this.dom.createElement("div", "lh-category"); + const categoryElem = this.dom.createElement('div', 'lh-category'); this.createPermalinkSpan(categoryElem, category.id); categoryElem.appendChild( this.renderCategoryHeader(category, groupDefinitions) @@ -49,18 +49,18 @@ class PwaCategoryRenderer extends CategoryRenderer { // Regular audits aren't split up into pass/fail/notApplicable clumps, they're // all put in a top-level clump that isn't expandable/collapsible. const regularAuditRefs = auditRefs.filter( - ref => ref.result.scoreDisplayMode !== "manual" + (ref) => ref.result.scoreDisplayMode !== 'manual' ); const auditsElem = this._renderAudits(regularAuditRefs, groupDefinitions); categoryElem.appendChild(auditsElem); // Manual audits are still in a manual clump. const manualAuditRefs = auditRefs.filter( - ref => ref.result.scoreDisplayMode === "manual" + (ref) => ref.result.scoreDisplayMode === 'manual' ); - const manualElem = this.renderClump("manual", { + const manualElem = this.renderClump('manual', { auditRefs: manualAuditRefs, - description: category.manualDescription + description: category.manualDescription, }); categoryElem.appendChild(manualElem); @@ -79,33 +79,33 @@ class PwaCategoryRenderer extends CategoryRenderer { } const tmpl = this.dom.cloneTemplate( - "#tmpl-lh-gauge--pwa", + '#tmpl-lh-gauge--pwa', this.templateContext ); const wrapper = /** @type {HTMLAnchorElement} */ (this.dom.find( - ".lh-gauge--pwa__wrapper", + '.lh-gauge--pwa__wrapper', tmpl )); wrapper.href = `#${category.id}`; // Correct IDs in case multiple instances end up in the page. - const svgRoot = tmpl.querySelector("svg"); + const svgRoot = tmpl.querySelector('svg'); if (!svgRoot) - throw new Error("no SVG element found in PWA score gauge template"); + throw new Error('no SVG element found in PWA score gauge template'); PwaCategoryRenderer._makeSvgReferencesUnique(svgRoot); const allGroups = this._getGroupIds(category.auditRefs); const passingGroupIds = this._getPassingGroupIds(category.auditRefs); if (passingGroupIds.size === allGroups.size) { - wrapper.classList.add("lh-badged--all"); + wrapper.classList.add('lh-badged--all'); } else { for (const passingGroupId of passingGroupIds) { wrapper.classList.add(`lh-badged--${passingGroupId}`); } } - this.dom.find(".lh-gauge__label", tmpl).textContent = category.title; + this.dom.find('.lh-gauge__label', tmpl).textContent = category.title; wrapper.title = this._getGaugeTooltip(category.auditRefs, groupDefinitions); return tmpl; } @@ -113,12 +113,12 @@ class PwaCategoryRenderer extends CategoryRenderer { /** * Returns the group IDs found in auditRefs. * @param {Array<LH.ReportResult.AuditRef>} auditRefs - * @return {Set<string>} + * @return {!Set<string>} */ _getGroupIds(auditRefs) { const groupIds = auditRefs - .map(ref => ref.group) - .filter(/** @return {g is string} */ g => !!g); + .map((ref) => ref.group) + .filter(/** @return {g is string} */ (g) => !!g); return new Set(groupIds); } @@ -151,9 +151,9 @@ class PwaCategoryRenderer extends CategoryRenderer { const tips = []; for (const groupId of groupIds) { - const groupAuditRefs = auditRefs.filter(ref => ref.group === groupId); + const groupAuditRefs = auditRefs.filter((ref) => ref.group === groupId); const auditCount = groupAuditRefs.length; - const passedCount = groupAuditRefs.filter(ref => + const passedCount = groupAuditRefs.filter((ref) => Util.showAsPassed(ref.result) ).length; @@ -161,7 +161,7 @@ class PwaCategoryRenderer extends CategoryRenderer { tips.push(`${title}: ${passedCount}/${auditCount}`); } - return tips.join(", "); + return tips.join(', '); } /** @@ -184,7 +184,7 @@ class PwaCategoryRenderer extends CategoryRenderer { `.lh-audit-group--${groupId}`, auditsElem ); - groupElem.classList.add("lh-badged"); + groupElem.classList.add('lh-badged'); } return auditsElem; @@ -198,11 +198,11 @@ class PwaCategoryRenderer extends CategoryRenderer { * @param {SVGElement} svgRoot */ static _makeSvgReferencesUnique(svgRoot) { - const defsEl = svgRoot.querySelector("defs"); + const defsEl = svgRoot.querySelector('defs'); if (!defsEl) return; const idSuffix = getUniqueSuffix(); - const elementsToUpdate = defsEl.querySelectorAll("[id]"); + const elementsToUpdate = defsEl.querySelectorAll('[id]'); for (const el of elementsToUpdate) { const oldId = el.id; const newId = `${oldId}-${idSuffix}`; @@ -211,22 +211,16 @@ class PwaCategoryRenderer extends CategoryRenderer { // Update all <use>s. const useEls = svgRoot.querySelectorAll(`use[href="#${oldId}"]`); for (const useEl of useEls) { - useEl.setAttribute("href", `#${newId}`); + useEl.setAttribute('href', `#${newId}`); } // Update all fill="url(#...)"s. const fillEls = svgRoot.querySelectorAll(`[fill="url(#${oldId})"]`); for (const fillEl of fillEls) { - fillEl.setAttribute("fill", `url(#${newId})`); + fillEl.setAttribute('fill', `url(#${newId})`); } } } } -// if (typeof module !== "undefined" && module.exports) { -// module.exports = PwaCategoryRenderer; -// } else { -// self.PwaCategoryRenderer = PwaCategoryRenderer; -// } - export default PwaCategoryRenderer; diff --git a/src/renderer/report-renderer.js b/src/renderer/report-renderer.js index 53027af..26e81f0 100644 --- a/src/renderer/report-renderer.js +++ b/src/renderer/report-renderer.js @@ -1,16 +1,6 @@ -/* eslint-disable no-restricted-globals */ -/* eslint-disable no-restricted-globals */ -import DOM from "./dom"; -import Util from "./util"; -import DetailsRenderer from "./details-renderer"; -import CategoryRenderer from "./category-renderer"; -import PerformanceCategoryRenderer from "./performance-category-renderer"; -import PwaCategoryRenderer from "./pwa-category-renderer"; -import I18n from "./i18n"; - /** * @license - * Copyright 2017 Google Inc. All Rights Reserved. + * Copyright 2017 The Lighthouse Authors. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,7 +14,14 @@ import I18n from "./i18n"; * See the License for the specific language governing permissions and * limitations under the License. */ -("use strict"); +'use strict'; + +import Util from './util'; +import I18n from './i18n'; +import DetailsRenderer from './details-renderer'; +import CategoryRenderer from './category-renderer'; +import PerformanceCategoryRenderer from './performance-category-renderer'; +import PwaCategoryRenderer from './pwa-category-renderer'; /** * @fileoverview The entry point for rendering the Lighthouse report based on the JSON output. @@ -33,6 +30,7 @@ import I18n from "./i18n"; * Dummy text for ensuring report robustness: </script> pre$`post %%LIGHTHOUSE_JSON%% */ +/** @typedef {import('./category-renderer')} CategoryRenderer */ /** @typedef {import('./dom.js')} DOM */ /* globals self, Util, DetailsRenderer, CategoryRenderer, I18n, PerformanceCategoryRenderer, PwaCategoryRenderer */ @@ -51,14 +49,14 @@ class ReportRenderer { /** * @param {LH.Result} result * @param {Element} container Parent element to render the report into. - * @return {Element} + * @return {!Element} */ renderReport(result, container) { - this._dom.setLighthouseChannel(result.configSettings.channel || "unknown"); + this._dom.setLighthouseChannel(result.configSettings.channel || 'unknown'); const report = Util.prepareReportResult(result); - container.textContent = ""; // Remove previous report. + container.textContent = ''; // Remove previous report. container.appendChild(this._renderReport(report)); return container; @@ -79,11 +77,11 @@ class ReportRenderer { */ _renderReportTopbar(report) { const el = this._dom.cloneTemplate( - "#tmpl-lh-topbar", + '#tmpl-lh-topbar', this._templateContext ); const metadataUrl = /** @type {HTMLAnchorElement} */ (this._dom.find( - ".lh-topbar__url", + '.lh-topbar__url', el )); metadataUrl.href = metadataUrl.textContent = report.finalUrl; @@ -96,14 +94,14 @@ class ReportRenderer { */ _renderReportHeader() { const el = this._dom.cloneTemplate( - "#tmpl-lh-heading", + '#tmpl-lh-heading', this._templateContext ); const domFragment = this._dom.cloneTemplate( - "#tmpl-lh-scores-wrapper", + '#tmpl-lh-scores-wrapper', this._templateContext ); - const placeholder = this._dom.find(".lh-scores-wrapper-placeholder", el); + const placeholder = this._dom.find('.lh-scores-wrapper-placeholder', el); /** @type {HTMLDivElement} */ (placeholder.parentNode).replaceChild( domFragment, placeholder @@ -117,13 +115,13 @@ class ReportRenderer { */ _renderReportFooter(report) { const footer = this._dom.cloneTemplate( - "#tmpl-lh-footer", + '#tmpl-lh-footer', this._templateContext ); - const env = this._dom.find(".lh-env__items", footer); - env.id = "runtime-settings"; - this._dom.find(".lh-env__title", footer).textContent = + const env = this._dom.find('.lh-env__items', footer); + env.id = 'runtime-settings'; + this._dom.find('.lh-env__title', footer).textContent = Util.i18n.strings.runtimeSettingsTitle; const envValues = Util.getEnvironmentDisplayValues( @@ -132,39 +130,43 @@ class ReportRenderer { [ { name: Util.i18n.strings.runtimeSettingsUrl, - description: report.finalUrl + description: report.finalUrl, }, { name: Util.i18n.strings.runtimeSettingsFetchTime, - description: Util.i18n.formatDateTime(report.fetchTime) + description: Util.i18n.formatDateTime(report.fetchTime), }, ...envValues, + { + name: Util.i18n.strings.runtimeSettingsChannel, + description: report.configSettings.channel, + }, { name: Util.i18n.strings.runtimeSettingsUA, - description: report.userAgent + description: report.userAgent, }, { name: Util.i18n.strings.runtimeSettingsUANetwork, - description: report.environment && report.environment.networkUserAgent + description: report.environment && report.environment.networkUserAgent, }, { name: Util.i18n.strings.runtimeSettingsBenchmark, description: - report.environment && report.environment.benchmarkIndex.toFixed(0) - } - ].forEach(runtime => { + report.environment && report.environment.benchmarkIndex.toFixed(0), + }, + ].forEach((runtime) => { if (!runtime.description) return; - const item = this._dom.cloneTemplate("#tmpl-lh-env__items", env); - this._dom.find(".lh-env__name", item).textContent = runtime.name; - this._dom.find(".lh-env__description", item).textContent = + const item = this._dom.cloneTemplate('#tmpl-lh-env__items', env); + this._dom.find('.lh-env__name', item).textContent = runtime.name; + this._dom.find('.lh-env__description', item).textContent = runtime.description; env.appendChild(item); }); - this._dom.find(".lh-footer__version_issue", footer).textContent = + this._dom.find('.lh-footer__version_issue', footer).textContent = Util.i18n.strings.footerIssue; - this._dom.find(".lh-footer__version", footer).textContent = + this._dom.find('.lh-footer__version', footer).textContent = report.lighthouseVersion; return footer; } @@ -176,19 +178,19 @@ class ReportRenderer { */ _renderReportWarnings(report) { if (!report.runWarnings || report.runWarnings.length === 0) { - return this._dom.createElement("div"); + return this._dom.createElement('div'); } const container = this._dom.cloneTemplate( - "#tmpl-lh-warnings--toplevel", + '#tmpl-lh-warnings--toplevel', this._templateContext ); - const message = this._dom.find(".lh-warnings__msg", container); + const message = this._dom.find('.lh-warnings__msg', container); message.textContent = Util.i18n.strings.toplevelWarningsMessage; - const warnings = this._dom.find("ul", container); + const warnings = this._dom.find('ul', container); for (const warningString of report.runWarnings) { - const warning = warnings.appendChild(this._dom.createElement("li")); + const warning = warnings.appendChild(this._dom.createElement('li')); warning.textContent = warningString; } @@ -199,7 +201,7 @@ class ReportRenderer { * @param {LH.ReportResult} report * @param {CategoryRenderer} categoryRenderer * @param {Record<string, CategoryRenderer>} specificCategoryRenderers - * @return {DocumentFragment[]} + * @return {!DocumentFragment[]} */ _renderScoreGauges(report, categoryRenderer, specificCategoryRenderers) { // Group gauges in this order: default, pwa, plugins. @@ -236,15 +238,16 @@ class ReportRenderer { /** * @param {LH.ReportResult} report - * @return {DocumentFragment} + * @return {!DocumentFragment} */ _renderReport(report) { const i18n = new I18n(report.configSettings.locale, { // Set missing renderer strings to default (english) values. ...Util.UIStrings, - ...report.i18n.rendererFormattedStrings + ...report.i18n.rendererFormattedStrings, }); Util.i18n = i18n; + Util.reportJson = report; const detailsRenderer = new DetailsRenderer(this._dom); const categoryRenderer = new CategoryRenderer(this._dom, detailsRenderer); @@ -253,34 +256,34 @@ class ReportRenderer { /** @type {Record<string, CategoryRenderer>} */ const specificCategoryRenderers = { performance: new PerformanceCategoryRenderer(this._dom, detailsRenderer), - pwa: new PwaCategoryRenderer(this._dom, detailsRenderer) + pwa: new PwaCategoryRenderer(this._dom, detailsRenderer), }; - Object.values(specificCategoryRenderers).forEach(renderer => { + Object.values(specificCategoryRenderers).forEach((renderer) => { renderer.setTemplateContext(this._templateContext); }); - const headerContainer = this._dom.createElement("div"); + const headerContainer = this._dom.createElement('div'); headerContainer.appendChild(this._renderReportHeader()); - const reportContainer = this._dom.createElement("div", "lh-container"); - const reportSection = this._dom.createElement("div", "lh-report"); + const reportContainer = this._dom.createElement('div', 'lh-container'); + const reportSection = this._dom.createElement('div', 'lh-report'); reportSection.appendChild(this._renderReportWarnings(report)); let scoreHeader; const isSoloCategory = Object.keys(report.categories).length === 1; if (!isSoloCategory) { - scoreHeader = this._dom.createElement("div", "lh-scores-header"); + scoreHeader = this._dom.createElement('div', 'lh-scores-header'); } else { - headerContainer.classList.add("lh-header--solo-category"); + headerContainer.classList.add('lh-header--solo-category'); } if (scoreHeader) { const scoreScale = this._dom.cloneTemplate( - "#tmpl-lh-scorescale", + '#tmpl-lh-scorescale', this._templateContext ); const scoresContainer = this._dom.find( - ".lh-scores-container", + '.lh-scores-container', headerContainer ); scoreHeader.append( @@ -293,7 +296,7 @@ class ReportRenderer { scoresContainer.appendChild(scoreHeader); scoresContainer.appendChild(scoreScale); - const stickyHeader = this._dom.createElement("div", "lh-sticky-header"); + const stickyHeader = this._dom.createElement('div', 'lh-sticky-header'); stickyHeader.append( ...this._renderScoreGauges( report, @@ -305,7 +308,7 @@ class ReportRenderer { } const categories = reportSection.appendChild( - this._dom.createElement("div", "lh-categories") + this._dom.createElement('div', 'lh-categories') ); for (const category of Object.values(report.categories)) { const renderer = @@ -314,8 +317,8 @@ class ReportRenderer { // .lh-category within has the max-width: var(--report-width); const wrapper = renderer.dom.createChildOf( categories, - "div", - "lh-category-wrapper" + 'div', + 'lh-category-wrapper' ); wrapper.appendChild(renderer.render(category, report.categoryGroups)); } @@ -333,9 +336,4 @@ class ReportRenderer { } } -// if (typeof module !== "undefined" && module.exports) { -// module.exports = ReportRenderer; -// } else { -// self.ReportRenderer = ReportRenderer; -// } export default ReportRenderer; diff --git a/src/renderer/report-ui-features.js b/src/renderer/report-ui-features.js index 0a10b11..8be370c 100644 --- a/src/renderer/report-ui-features.js +++ b/src/renderer/report-ui-features.js @@ -1,8 +1,6 @@ -import Util from "./util"; - /** * @license - * Copyright 2017 Google Inc. All Rights Reserved. + * Copyright 2017 The Lighthouse Authors. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +14,9 @@ import Util from "./util"; * See the License for the specific language governing permissions and * limitations under the License. */ -("use strict"); +'use strict'; + +import Util from './util'; /* eslint-env browser */ @@ -27,9 +27,11 @@ import Util from "./util"; /* globals getFilenamePrefix Util */ +/** @typedef {import('./dom')} DOM */ + /** * @param {HTMLTableElement} tableEl - * @return {Array<HTMLTableRowElement>} + * @return {Array<HTMLElement>} */ function getTableRows(tableEl) { return Array.from(tableEl.tBodies[0].rows); @@ -86,28 +88,28 @@ class ReportUIFeatures { this._setupThirdPartyFilter(); this._setUpCollapseDetailsAfterPrinting(); this._resetUIState(); - this._document.addEventListener("keyup", this.onKeyUp); - this._document.addEventListener("copy", this.onCopy); + this._document.addEventListener('keyup', this.onKeyUp); + this._document.addEventListener('copy', this.onCopy); - const topbarLogo = this._dom.find(".lh-topbar__logo", this._document); - topbarLogo.addEventListener("click", () => this._toggleDarkTheme()); + const topbarLogo = this._dom.find('.lh-topbar__logo', this._document); + topbarLogo.addEventListener('click', () => this._toggleDarkTheme()); let turnOffTheLights = false; // Do not query the system preferences for DevTools - DevTools should only apply dark theme // if dark is selected in the settings panel. if ( !this._dom.isDevTools() && - window.matchMedia("(prefers-color-scheme: dark)").matches + window.matchMedia('(prefers-color-scheme: dark)').matches ) { turnOffTheLights = true; } // Fireworks. const scoresAll100 = Object.values(report.categories).every( - cat => cat.score === 1 + (cat) => cat.score === 1 ); const hasAllCoreCategories = - Object.keys(report.categories).filter(id => !Util.isPluginCategory(id)) + Object.keys(report.categories).filter((id) => !Util.isPluginCategory(id)) .length >= 5; if (scoresAll100 && hasAllCoreCategories) { turnOffTheLights = true; @@ -121,10 +123,10 @@ class ReportUIFeatures { // There is only a sticky header when at least 2 categories are present. if (Object.keys(this.json.categories).length >= 2) { this._setupStickyHeaderElements(); - const containerEl = this._dom.find(".lh-container", this._document); + const containerEl = this._dom.find('.lh-container', this._document); const elToAddScrollListener = this._getScrollParent(containerEl); elToAddScrollListener.addEventListener( - "scroll", + 'scroll', this._updateStickyHeaderOnScroll ); @@ -139,32 +141,32 @@ class ReportUIFeatures { ); resizeObserver.observe(containerEl); } else { - window.addEventListener("resize", this._updateStickyHeaderOnScroll); + window.addEventListener('resize', this._updateStickyHeaderOnScroll); } } // Show the metric descriptions by default when there is an error. const hasMetricError = report.categories.performance && - report.categories.performance.auditRefs.some(audit => + report.categories.performance.auditRefs.some((audit) => Boolean( - audit.group === "metrics" && report.audits[audit.id].errorMessage + audit.group === 'metrics' && report.audits[audit.id].errorMessage ) ); if (hasMetricError) { const toggleInputEl = /** @type {HTMLInputElement} */ (this._dom.find( - ".lh-metrics-toggle__input", + '.lh-metrics-toggle__input', this._document )); toggleInputEl.checked = true; } // Fill in all i18n data. - for (const node of this._dom.findAll("[data-i18n]", this._dom.document())) { + for (const node of this._dom.findAll('[data-i18n]', this._dom.document())) { // These strings are guaranteed to (at least) have a default English string in Util.UIStrings, // so this cannot be undefined as long as `report-ui-features.data-i18n` test passes. const i18nAttr = /** @type {keyof LH.I18NRendererStrings} */ (node.getAttribute( - "data-i18n" + 'data-i18n' )); node.textContent = Util.i18n.strings[i18nAttr]; } @@ -186,7 +188,7 @@ class ReportUIFeatures { */ _getScrollParent(element) { const { overflowY } = window.getComputedStyle(element); - const isScrollable = overflowY !== "visible" && overflowY !== "hidden"; + const isScrollable = overflowY !== 'visible' && overflowY !== 'hidden'; if (isScrollable) { return element; @@ -201,12 +203,12 @@ class ReportUIFeatures { _enableFireworks() { const scoresContainer = this._dom.find( - ".lh-scores-container", + '.lh-scores-container', this._document ); - scoresContainer.classList.add("score100"); - scoresContainer.addEventListener("click", _ => { - scoresContainer.classList.toggle("fireworks-paused"); + scoresContainer.classList.add('score100'); + scoresContainer.addEventListener('click', (_) => { + scoresContainer.classList.toggle('fireworks-paused'); }); } @@ -222,7 +224,7 @@ class ReportUIFeatures { } _setupMediaQueryListeners() { - const mediaQuery = self.matchMedia("(max-width: 500px)"); + const mediaQuery = self.matchMedia('(max-width: 500px)'); mediaQuery.addListener(this.onMediaQueryChange); // Ensure the handler is called on init this.onMediaQueryChange(mediaQuery); @@ -233,113 +235,138 @@ class ReportUIFeatures { * @param {MediaQueryList|MediaQueryListEvent} mql */ onMediaQueryChange(mql) { - const root = this._dom.find(".lh-root", this._document); - root.classList.toggle("lh-narrow", mql.matches); + const root = this._dom.find('.lh-root', this._document); + root.classList.toggle('lh-narrow', mql.matches); } _setupThirdPartyFilter() { // Some audits should not display the third party filter option. const thirdPartyFilterAuditExclusions = [ // This audit deals explicitly with third party resources. - "uses-rel-preconnect" + 'uses-rel-preconnect', + ]; + // Some audits should hide third party by default. + const thirdPartyFilterAuditHideByDefault = [ + // Only first party resources are actionable. + 'legacy-javascript', ]; // Get all tables with a text url column. /** @type {Array<HTMLTableElement>} */ - const tables = Array.from(this._document.querySelectorAll(".lh-table")); + const tables = Array.from(this._document.querySelectorAll('.lh-table')); const tablesWithUrls = tables - .filter(el => + .filter((el) => el.querySelector( - "td.lh-table-column--url, td.lh-table-column--source-location" + 'td.lh-table-column--url, td.lh-table-column--source-location' ) ) - .filter(el => { - const containingAudit = el.closest(".lh-audit"); - if (!containingAudit) throw new Error(".lh-table not within audit"); + .filter((el) => { + const containingAudit = el.closest('.lh-audit'); + if (!containingAudit) throw new Error('.lh-table not within audit'); return !thirdPartyFilterAuditExclusions.includes(containingAudit.id); }); tablesWithUrls.forEach((tableEl, index) => { - const urlItems = this._getUrlItems(tableEl); + const rowEls = getTableRows(tableEl); const thirdPartyRows = this._getThirdPartyRows( - tableEl, - urlItems, + rowEls, this.json.finalUrl ); // create input box const filterTemplate = this._dom.cloneTemplate( - "#tmpl-lh-3p-filter", + '#tmpl-lh-3p-filter', this._templateContext ); const filterInput = /** @type {HTMLInputElement} */ (this._dom.find( - "input", + 'input', filterTemplate )); const id = `lh-3p-filter-label--${index}`; filterInput.id = id; - filterInput.addEventListener("change", e => { - // Remove rows from the dom and keep track of them to re-add on uncheck. - // Why removing instead of hiding? To keep nth-child(even) background-colors working. - if (e.target instanceof HTMLInputElement && !e.target.checked) { - for (const row of thirdPartyRows.values()) { - row.remove(); - } - } else { - // Add row elements back to original positions. - for (const [position, row] of thirdPartyRows.entries()) { - const childrenArr = getTableRows(tableEl); - tableEl.tBodies[0].insertBefore(row, childrenArr[position]); - } + filterInput.addEventListener('change', (e) => { + const shouldHideThirdParty = + e.target instanceof HTMLInputElement && !e.target.checked; + let even = true; + let rowEl = rowEls[0]; + while (rowEl) { + const shouldHide = + shouldHideThirdParty && thirdPartyRows.includes(rowEl); + + // Iterate subsequent associated sub item rows. + do { + rowEl.classList.toggle('lh-row--hidden', shouldHide); + // Adjust for zebra styling. + rowEl.classList.toggle('lh-row--even', !shouldHide && even); + rowEl.classList.toggle('lh-row--odd', !shouldHide && !even); + + rowEl = /** @type {HTMLElement} */ (rowEl.nextElementSibling); + } while (rowEl && rowEl.classList.contains('lh-sub-item-row')); + + if (!shouldHide) even = !even; } }); - this._dom.find("label", filterTemplate).setAttribute("for", id); + this._dom.find('label', filterTemplate).setAttribute('for', id); this._dom.find( - ".lh-3p-filter-count", + '.lh-3p-filter-count', filterTemplate - ).textContent = `${thirdPartyRows.size}`; - this._dom.find(".lh-3p-ui-string", filterTemplate).textContent = + ).textContent = `${thirdPartyRows.length}`; + this._dom.find('.lh-3p-ui-string', filterTemplate).textContent = Util.i18n.strings.thirdPartyResourcesLabel; + const allThirdParty = thirdPartyRows.length === rowEls.length; + const allFirstParty = !thirdPartyRows.length; + // If all or none of the rows are 3rd party, disable the checkbox. - if (thirdPartyRows.size === urlItems.length || !thirdPartyRows.size) { + if (allThirdParty || allFirstParty) { filterInput.disabled = true; - filterInput.checked = thirdPartyRows.size === urlItems.length; + filterInput.checked = allThirdParty; } - // Finally, add checkbox to the DOM. + // Add checkbox to the DOM. if (!tableEl.parentNode) return; // Keep tsc happy. tableEl.parentNode.insertBefore(filterTemplate, tableEl); + + // Hide third-party rows for some audits by default. + const containingAudit = tableEl.closest('.lh-audit'); + if (!containingAudit) throw new Error('.lh-table not within audit'); + if ( + thirdPartyFilterAuditHideByDefault.includes(containingAudit.id) && + !allThirdParty + ) { + filterInput.click(); + } }); } /** * From a table with URL entries, finds the rows containing third-party URLs - * and returns a Map of those rows, mapping from row index to row Element. - * @param {HTMLTableElement} el + * and returns them. + * @param {HTMLElement[]} rowEls * @param {string} finalUrl - * @param {Array<HTMLElement>} urlItems - * @return {Map<number, HTMLTableRowElement>} + * @return {Array<HTMLElement>} */ - _getThirdPartyRows(el, urlItems, finalUrl) { + _getThirdPartyRows(rowEls, finalUrl) { + /** @type {Array<HTMLElement>} */ + const thirdPartyRows = []; const finalUrlRootDomain = Util.getRootDomain(finalUrl); - /** @type {Map<number, HTMLTableRowElement>} */ - const thirdPartyRows = new Map(); - for (const urlItem of urlItems) { + for (const rowEl of rowEls) { + if (rowEl.classList.contains('lh-sub-item-row')) continue; + + /** @type {HTMLElement|null} */ + const urlItem = rowEl.querySelector('.lh-text__url'); + if (!urlItem) continue; + const datasetUrl = urlItem.dataset.url; if (!datasetUrl) continue; const isThirdParty = Util.getRootDomain(datasetUrl) !== finalUrlRootDomain; if (!isThirdParty) continue; - const urlRowEl = urlItem.closest("tr"); - if (urlRowEl) { - const rowPosition = getTableRows(el).indexOf(urlRowEl); - thirdPartyRows.set(rowPosition, urlRowEl); - } + thirdPartyRows.push(rowEl); } return thirdPartyRows; @@ -351,19 +378,19 @@ class ReportUIFeatures { * @return {Array<HTMLElement>} */ _getUrlItems(tableEl) { - return this._dom.findAll(".lh-text__url", tableEl); + return this._dom.findAll('.lh-text__url', tableEl); } _setupStickyHeaderElements() { - this.topbarEl = this._dom.find(".lh-topbar", this._document); - this.scoreScaleEl = this._dom.find(".lh-scorescale", this._document); - this.stickyHeaderEl = this._dom.find(".lh-sticky-header", this._document); + this.topbarEl = this._dom.find('.lh-topbar', this._document); + this.scoreScaleEl = this._dom.find('.lh-scorescale', this._document); + this.stickyHeaderEl = this._dom.find('.lh-sticky-header', this._document); // Highlighter will be absolutely positioned at first gauge, then transformed on scroll. this.highlightEl = this._dom.createChildOf( this.stickyHeaderEl, - "div", - "lh-highlighter" + 'div', + 'lh-highlighter' ); } @@ -376,11 +403,11 @@ class ReportUIFeatures { if (this._copyAttempt && e.clipboardData) { // We want to write our own data to the clipboard, not the user's text selection. e.preventDefault(); - e.clipboardData.setData("text/plain", JSON.stringify(this.json, null, 2)); + e.clipboardData.setData('text/plain', JSON.stringify(this.json, null, 2)); - this._fireEventOn("lh-log", this._document, { - cmd: "log", - msg: "Report JSON copied to clipboard" + this._fireEventOn('lh-log', this._document, { + cmd: 'log', + msg: 'Report JSON copied to clipboard', }); } @@ -391,31 +418,35 @@ class ReportUIFeatures { * Copies the report JSON to the clipboard (if supported by the browser). */ onCopyButtonClick() { - this._fireEventOn("lh-analytics", this._document, { - cmd: "send", - fields: { hitType: "event", eventCategory: "report", eventAction: "copy" } + this._fireEventOn('lh-analytics', this._document, { + cmd: 'send', + fields: { + hitType: 'event', + eventCategory: 'report', + eventAction: 'copy', + }, }); try { - if (this._document.queryCommandSupported("copy")) { + if (this._document.queryCommandSupported('copy')) { this._copyAttempt = true; // Note: In Safari 10.0.1, execCommand('copy') returns true if there's // a valid text selection on the page. See http://caniuse.com/#feat=clipboard. - if (!this._document.execCommand("copy")) { + if (!this._document.execCommand('copy')) { this._copyAttempt = false; // Prevent event handler from seeing this as a copy attempt. - this._fireEventOn("lh-log", this._document, { - cmd: "warn", - msg: "Your browser does not support copy to clipboard." + this._fireEventOn('lh-log', this._document, { + cmd: 'warn', + msg: 'Your browser does not support copy to clipboard.', }); } } } catch (/** @type {Error} */ e) { this._copyAttempt = false; - this._fireEventOn("lh-log", this._document, { - cmd: "log", - msg: e.message + this._fireEventOn('lh-log', this._document, { + cmd: 'log', + msg: e.message, }); } } @@ -439,49 +470,49 @@ class ReportUIFeatures { const el = /** @type {?Element} */ (e.target); - if (!el || !el.hasAttribute("data-action")) { + if (!el || !el.hasAttribute('data-action')) { return; } - switch (el.getAttribute("data-action")) { - case "copy": + switch (el.getAttribute('data-action')) { + case 'copy': this.onCopyButtonClick(); break; - case "print-summary": + case 'print-summary': this.collapseAllDetails(); this._print(); break; - case "print-expanded": + case 'print-expanded': this.expandAllDetails(); this._print(); break; - case "save-json": { + case 'save-json': { const jsonStr = JSON.stringify(this.json, null, 2); - this._saveFile(new Blob([jsonStr], { type: "application/json" })); + this._saveFile(new Blob([jsonStr], { type: 'application/json' })); break; } - case "save-html": { + case 'save-html': { const htmlStr = this.getReportHtml(); try { - this._saveFile(new Blob([htmlStr], { type: "text/html" })); + this._saveFile(new Blob([htmlStr], { type: 'text/html' })); } catch (/** @type {Error} */ e) { - this._fireEventOn("lh-log", this._document, { - cmd: "error", - msg: "Could not export as HTML. " + e.message + this._fireEventOn('lh-log', this._document, { + cmd: 'error', + msg: 'Could not export as HTML. ' + e.message, }); } break; } - case "open-viewer": { - const viewerPath = "/lighthouse/viewer/"; + case 'open-viewer': { + const viewerPath = '/lighthouse/viewer/'; ReportUIFeatures.openTabAndSendJsonReport(this.json, viewerPath); break; } - case "save-gist": { + case 'save-gist': { this.saveAsGist(); break; } - case "toggle-dark": { + case 'toggle-dark': { this._toggleDarkTheme(); break; } @@ -513,19 +544,19 @@ class ReportUIFeatures { * @protected */ static openTabAndSendJsonReport(reportJson, viewerPath) { - const VIEWER_ORIGIN = "https://googlechrome.github.io"; + const VIEWER_ORIGIN = 'https://googlechrome.github.io'; // Chrome doesn't allow us to immediately postMessage to a popup right // after it's created. Normally, we could also listen for the popup window's // load event, however it is cross-domain and won't fire. Instead, listen // for a message from the target app saying "I'm open". const json = reportJson; - window.addEventListener("message", function msgHandler(messageEvent) { + window.addEventListener('message', function msgHandler(messageEvent) { if (messageEvent.origin !== VIEWER_ORIGIN) { return; } if (popup && messageEvent.data.opened) { popup.postMessage({ lhresults: json }, VIEWER_ORIGIN); - window.removeEventListener("message", msgHandler); + window.removeEventListener('message', msgHandler); } }); @@ -544,10 +575,10 @@ class ReportUIFeatures { */ expandAllDetails() { const details = /** @type {Array<HTMLDetailsElement>} */ (this._dom.findAll( - ".lh-categories details", + '.lh-categories details', this._document )); - details.map(detail => (detail.open = true)); + details.map((detail) => (detail.open = true)); } /** @@ -556,10 +587,10 @@ class ReportUIFeatures { */ collapseAllDetails() { const details = /** @type {Array<HTMLDetailsElement>} */ (this._dom.findAll( - ".lh-categories details", + '.lh-categories details', this._document )); - details.map(detail => (detail.open = false)); + details.map((detail) => (detail.open = false)); } /** @@ -568,13 +599,13 @@ class ReportUIFeatures { */ _setUpCollapseDetailsAfterPrinting() { // FF and IE implement these old events. - if ("onbeforeprint" in self) { - self.addEventListener("afterprint", this.collapseAllDetails); + if ('onbeforeprint' in self) { + self.addEventListener('afterprint', this.collapseAllDetails); } else { const win = /** @type {Window} */ (self); // Note: FF implements both window.onbeforeprint and media listeners. However, // it doesn't matchMedia doesn't fire when matching 'print'. - win.matchMedia("print").addListener(mql => { + win.matchMedia('print').addListener((mql) => { if (mql.matches) { this.expandAllDetails(); } else { @@ -599,7 +630,7 @@ class ReportUIFeatures { * @protected */ saveAsGist() { - throw new Error("Cannot save as gist from base report"); + throw new Error('Cannot save as gist from base report'); } /** @@ -610,13 +641,13 @@ class ReportUIFeatures { _saveFile(blob) { const filename = getFilenamePrefix({ finalUrl: this.json.finalUrl, - fetchTime: this.json.fetchTime + fetchTime: this.json.fetchTime, }); - const ext = blob.type.match("json") ? ".json" : ".html"; + const ext = blob.type.match('json') ? '.json' : '.html'; const href = URL.createObjectURL(blob); - const a = this._dom.createElement("a"); + const a = this._dom.createElement('a'); a.download = `${filename}${ext}`; a.href = href; this._document.body.appendChild(a); // Firefox requires anchor to be in the DOM. @@ -624,7 +655,7 @@ class ReportUIFeatures { // cleanup. this._document.body.removeChild(a); - setTimeout(_ => URL.revokeObjectURL(href), 500); + setTimeout((_) => URL.revokeObjectURL(href), 500); } /** @@ -632,14 +663,14 @@ class ReportUIFeatures { * @param {boolean} [force] */ _toggleDarkTheme(force) { - const el = this._dom.find(".lh-vars", this._document); + const el = this._dom.find('.lh-vars', this._document); // This seems unnecessary, but in DevTools, passing "undefined" as the second // parameter acts like passing "false". // https://github.com/ChromeDevTools/devtools-frontend/blob/dd6a6d4153647c2a4203c327c595692c5e0a4256/front_end/dom_extension/DOMExtension.js#L809-L819 - if (typeof force === "undefined") { - el.classList.toggle("dark"); + if (typeof force === 'undefined') { + el.classList.toggle('dark'); } else { - el.classList.toggle("dark", force); + el.classList.toggle('dark', force); } } @@ -652,10 +683,10 @@ class ReportUIFeatures { // Highlight mini gauge when section is in view. // In view = the last category that starts above the middle of the window. const categoryEls = Array.from( - this._document.querySelectorAll(".lh-category") + this._document.querySelectorAll('.lh-category') ); const categoriesAboveTheMiddle = categoryEls.filter( - el => el.getBoundingClientRect().top - window.innerHeight / 2 < 0 + (el) => el.getBoundingClientRect().top - window.innerHeight / 2 < 0 ); const highlightIndex = categoriesAboveTheMiddle.length > 0 @@ -664,7 +695,7 @@ class ReportUIFeatures { // Category order matches gauge order in sticky header. const gaugeWrapperEls = this.stickyHeaderEl.querySelectorAll( - ".lh-gauge__wrapper" + '.lh-gauge__wrapper' ); const gaugeToHighlight = gaugeWrapperEls[highlightIndex]; const origin = gaugeWrapperEls[0].getBoundingClientRect().left; @@ -673,7 +704,7 @@ class ReportUIFeatures { // Mutate at end to avoid layout thrashing. this.highlightEl.style.transform = `translate(${offset}px)`; this.stickyHeaderEl.classList.toggle( - "lh-sticky-header--visible", + 'lh-sticky-header--visible', showStickyHeader ); } @@ -694,6 +725,7 @@ class DropDown { this.onDocumentKeyDown = this.onDocumentKeyDown.bind(this); this.onToggleClick = this.onToggleClick.bind(this); this.onToggleKeydown = this.onToggleKeydown.bind(this); + this.onMenuFocusOut = this.onMenuFocusOut.bind(this); this.onMenuKeydown = this.onMenuKeydown.bind(this); this._getNextMenuItem = this._getNextMenuItem.bind(this); @@ -705,36 +737,37 @@ class DropDown { * @param {function(MouseEvent): any} menuClickHandler */ setup(menuClickHandler) { - this._toggleEl = this._dom.find(".lh-tools__button", this._dom.document()); - this._toggleEl.addEventListener("click", this.onToggleClick); - this._toggleEl.addEventListener("keydown", this.onToggleKeydown); + this._toggleEl = this._dom.find('.lh-tools__button', this._dom.document()); + this._toggleEl.addEventListener('click', this.onToggleClick); + this._toggleEl.addEventListener('keydown', this.onToggleKeydown); - this._menuEl = this._dom.find(".lh-tools__dropdown", this._dom.document()); - this._menuEl.addEventListener("keydown", this.onMenuKeydown); - this._menuEl.addEventListener("click", menuClickHandler); + this._menuEl = this._dom.find('.lh-tools__dropdown', this._dom.document()); + this._menuEl.addEventListener('keydown', this.onMenuKeydown); + this._menuEl.addEventListener('click', menuClickHandler); } close() { - this._toggleEl.classList.remove("active"); - this._toggleEl.setAttribute("aria-expanded", "false"); + this._toggleEl.classList.remove('active'); + this._toggleEl.setAttribute('aria-expanded', 'false'); if (this._menuEl.contains(this._dom.document().activeElement)) { // Refocus on the tools button if the drop down last had focus this._toggleEl.focus(); } - this._dom.document().removeEventListener("keydown", this.onDocumentKeyDown); + this._menuEl.removeEventListener('focusout', this.onMenuFocusOut); + this._dom.document().removeEventListener('keydown', this.onDocumentKeyDown); } /** * @param {HTMLElement} firstFocusElement */ open(firstFocusElement) { - if (this._toggleEl.classList.contains("active")) { + if (this._toggleEl.classList.contains('active')) { // If the drop down is already open focus on the element firstFocusElement.focus(); } else { // Wait for drop down transition to complete so options are focusable. this._menuEl.addEventListener( - "transitionend", + 'transitionend', () => { firstFocusElement.focus(); }, @@ -742,9 +775,10 @@ class DropDown { ); } - this._toggleEl.classList.add("active"); - this._toggleEl.setAttribute("aria-expanded", "true"); - this._dom.document().addEventListener("keydown", this.onDocumentKeyDown); + this._toggleEl.classList.add('active'); + this._toggleEl.setAttribute('aria-expanded', 'true'); + this._menuEl.addEventListener('focusout', this.onMenuFocusOut); + this._dom.document().addEventListener('keydown', this.onDocumentKeyDown); } /** @@ -755,7 +789,7 @@ class DropDown { e.preventDefault(); e.stopImmediatePropagation(); - if (this._toggleEl.classList.contains("active")) { + if (this._toggleEl.classList.contains('active')) { this.close(); } else { this.open(this._getNextMenuItem()); @@ -768,13 +802,13 @@ class DropDown { */ onToggleKeydown(e) { switch (e.code) { - case "ArrowUp": + case 'ArrowUp': e.preventDefault(); this.open(this._getPreviousMenuItem()); break; - case "ArrowDown": - case "Enter": - case " ": + case 'ArrowDown': + case 'Enter': + case ' ': e.preventDefault(); this.open(this._getNextMenuItem()); break; @@ -791,19 +825,19 @@ class DropDown { const el = /** @type {?HTMLElement} */ (e.target); switch (e.code) { - case "ArrowUp": + case 'ArrowUp': e.preventDefault(); this._getPreviousMenuItem(el).focus(); break; - case "ArrowDown": + case 'ArrowDown': e.preventDefault(); this._getNextMenuItem(el).focus(); break; - case "Home": + case 'Home': e.preventDefault(); this._getNextMenuItem().focus(); break; - case "End": + case 'End': e.preventDefault(); this._getPreviousMenuItem().focus(); break; @@ -823,24 +857,36 @@ class DropDown { } } + /** + * Focus out handler for the drop down menu. + * @param {FocusEvent} e + */ + onMenuFocusOut(e) { + const focusedEl = /** @type {?HTMLElement} */ (e.relatedTarget); + + if (!this._menuEl.contains(focusedEl)) { + this.close(); + } + } + /** * @param {Array<Node>} allNodes * @param {?Node=} startNode * @returns {Node} */ _getNextSelectableNode(allNodes, startNode) { - const nodes = allNodes.filter(node => { + const nodes = allNodes.filter((node) => { if (!(node instanceof HTMLElement)) { return false; } // 'Save as Gist' option may be disabled. - if (node.hasAttribute("disabled")) { + if (node.hasAttribute('disabled')) { return false; } // 'Save as Gist' option may have display none. - if (window.getComputedStyle(node).display === "none") { + if (window.getComputedStyle(node).display === 'none') { return false; } @@ -880,10 +926,4 @@ class DropDown { } } -// if (typeof module !== 'undefined' && module.exports) { -// module.exports = ReportUIFeatures; -// } else { -// self.ReportUIFeatures = ReportUIFeatures; -// } - export default ReportUIFeatures; diff --git a/src/renderer/snippet-renderer.js b/src/renderer/snippet-renderer.js index eac582e..e6ea370 100644 --- a/src/renderer/snippet-renderer.js +++ b/src/renderer/snippet-renderer.js @@ -1,20 +1,21 @@ /** - * @license Copyright 2019 Google Inc. All Rights Reserved. + * @license Copyright 2019 The Lighthouse Authors. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. */ -"use strict"; +'use strict'; /* globals self, Util */ /** @typedef {import('./details-renderer')} DetailsRenderer */ +/** @typedef {import('./dom')} DOM */ /** @enum {number} */ const LineVisibility = { /** Show regardless of whether the snippet is collapsed or expanded */ ALWAYS: 0, WHEN_COLLAPSED: 1, - WHEN_EXPANDED: 2 + WHEN_EXPANDED: 2, }; /** @enum {number} */ @@ -26,7 +27,7 @@ const LineContentType = { /** Use when some lines are hidden, shows the "..." placeholder */ PLACEHOLDER: 2, /** A message about a line of content or the snippet in general */ - MESSAGE: 3 + MESSAGE: 3, }; /** @typedef {{ @@ -38,13 +39,13 @@ const LineContentType = { }} LineDetails */ const classNamesByContentType = { - [LineContentType.CONTENT_NORMAL]: ["lh-snippet__line--content"], + [LineContentType.CONTENT_NORMAL]: ['lh-snippet__line--content'], [LineContentType.CONTENT_HIGHLIGHTED]: [ - "lh-snippet__line--content", - "lh-snippet__line--content-highlighted" + 'lh-snippet__line--content', + 'lh-snippet__line--content-highlighted', ], - [LineContentType.PLACEHOLDER]: ["lh-snippet__line--placeholder"], - [LineContentType.MESSAGE]: ["lh-snippet__line--message"] + [LineContentType.PLACEHOLDER]: ['lh-snippet__line--placeholder'], + [LineContentType.MESSAGE]: ['lh-snippet__line--message'], }; /** @@ -54,8 +55,8 @@ const classNamesByContentType = { */ function getLineAndPreviousLine(lines, lineNumber) { return { - line: lines.find(l => l.lineNumber === lineNumber), - previousLine: lines.find(l => l.lineNumber === lineNumber - 1) + line: lines.find((l) => l.lineNumber === lineNumber), + previousLine: lines.find((l) => l.lineNumber === lineNumber - 1), }; } @@ -64,7 +65,7 @@ function getLineAndPreviousLine(lines, lineNumber) { * @param {number} lineNumber */ function getMessagesForLineNumber(messages, lineNumber) { - return messages.filter(h => h.lineNumber === lineNumber); + return messages.filter((h) => h.lineNumber === lineNumber); } /** @@ -99,36 +100,36 @@ class SnippetRenderer { const linesWhenCollapsed = getLinesWhenCollapsed(details); const canExpand = linesWhenCollapsed.length < details.lines.length; - const header = dom.cloneTemplate("#tmpl-lh-snippet__header", tmpl); - dom.find(".lh-snippet__title", header).textContent = details.title; + const header = dom.cloneTemplate('#tmpl-lh-snippet__header', tmpl); + dom.find('.lh-snippet__title', header).textContent = details.title; const { snippetCollapseButtonLabel, - snippetExpandButtonLabel + snippetExpandButtonLabel, } = Util.i18n.strings; dom.find( - ".lh-snippet__btn-label-collapse", + '.lh-snippet__btn-label-collapse', header ).textContent = snippetCollapseButtonLabel; dom.find( - ".lh-snippet__btn-label-expand", + '.lh-snippet__btn-label-expand', header ).textContent = snippetExpandButtonLabel; - const toggleExpandButton = dom.find(".lh-snippet__toggle-expand", header); + const toggleExpandButton = dom.find('.lh-snippet__toggle-expand', header); // If we're already showing all the available lines of the snippet, we don't need an // expand/collapse button and can remove it from the DOM. // If we leave the button in though, wire up the click listener to toggle visibility! if (!canExpand) { toggleExpandButton.remove(); } else { - toggleExpandButton.addEventListener("click", () => toggleExpandedFn()); + toggleExpandButton.addEventListener('click', () => toggleExpandedFn()); } // We only show the source node of the snippet in DevTools because then the user can // access the full element detail. Just being able to see the outer HTML isn't very useful. if (details.node && dom.isDevTools()) { - const nodeContainer = dom.find(".lh-snippet__node", header); + const nodeContainer = dom.find('.lh-snippet__node', header); nodeContainer.appendChild(detailsRenderer.renderNode(details.node)); } @@ -147,22 +148,22 @@ class SnippetRenderer { tmpl, { content, lineNumber, truncated, contentType, visibility } ) { - const clonedTemplate = dom.cloneTemplate("#tmpl-lh-snippet__line", tmpl); - const contentLine = dom.find(".lh-snippet__line", clonedTemplate); + const clonedTemplate = dom.cloneTemplate('#tmpl-lh-snippet__line', tmpl); + const contentLine = dom.find('.lh-snippet__line', clonedTemplate); const { classList } = contentLine; - classNamesByContentType[contentType].forEach(typeClass => + classNamesByContentType[contentType].forEach((typeClass) => classList.add(typeClass) ); if (visibility === LineVisibility.WHEN_COLLAPSED) { - classList.add("lh-snippet__show-if-collapsed"); + classList.add('lh-snippet__show-if-collapsed'); } else if (visibility === LineVisibility.WHEN_EXPANDED) { - classList.add("lh-snippet__show-if-expanded"); + classList.add('lh-snippet__show-if-expanded'); } - const lineContent = content + (truncated ? "…" : ""); - const lineContentEl = dom.find(".lh-snippet__line code", contentLine); + const lineContent = content + (truncated ? '…' : ''); + const lineContentEl = dom.find('.lh-snippet__line code', contentLine); if (contentType === LineContentType.MESSAGE) { lineContentEl.appendChild(dom.convertMarkdownLinkSnippets(lineContent)); } else { @@ -170,7 +171,7 @@ class SnippetRenderer { } dom.find( - ".lh-snippet__line-number", + '.lh-snippet__line-number', contentLine ).textContent = lineNumber.toString(); @@ -185,9 +186,9 @@ class SnippetRenderer { */ static renderMessage(dom, tmpl, message) { return SnippetRenderer.renderSnippetLine(dom, tmpl, { - lineNumber: " ", + lineNumber: ' ', content: message.message, - contentType: LineContentType.MESSAGE + contentType: LineContentType.MESSAGE, }); } @@ -199,10 +200,10 @@ class SnippetRenderer { */ static renderOmittedLinesPlaceholder(dom, tmpl, visibility) { return SnippetRenderer.renderSnippetLine(dom, tmpl, { - lineNumber: "…", - content: "", + lineNumber: '…', + content: '', visibility, - contentType: LineContentType.PLACEHOLDER + contentType: LineContentType.PLACEHOLDER, }); } @@ -213,11 +214,11 @@ class SnippetRenderer { * @return {DocumentFragment} */ static renderSnippetContent(dom, tmpl, details) { - const template = dom.cloneTemplate("#tmpl-lh-snippet__content", tmpl); - const snippetEl = dom.find(".lh-snippet__snippet-inner", template); + const template = dom.cloneTemplate('#tmpl-lh-snippet__content', tmpl); + const snippetEl = dom.find('.lh-snippet__snippet-inner', template); // First render messages that don't belong to specific lines - details.generalMessages.forEach(m => + details.generalMessages.forEach((m) => snippetEl.append(SnippetRenderer.renderMessage(dom, tmpl, m)) ); // Then render the lines and their messages, as well as placeholders where lines are omitted @@ -249,7 +250,7 @@ class SnippetRenderer { const { line, previousLine } = getLineAndPreviousLine(lines, lineNumber); const { line: lineWhenCollapsed, - previousLine: previousLineWhenCollapsed + previousLine: previousLineWhenCollapsed, } = getLineAndPreviousLine(linesWhenCollapsed, lineNumber); const showLineWhenCollapsed = !!lineWhenCollapsed; @@ -287,7 +288,7 @@ class SnippetRenderer { // In the collapsed state we don't show omitted lines placeholders around // the edges of the snippet const hasRenderedAllLinesVisibleWhenCollapsed = !linesWhenCollapsed.some( - l => l.lineNumber > lineNumber + (l) => l.lineNumber > lineNumber ); const onlyShowWhenExpanded = hasRenderedAllLinesVisibleWhenCollapsed || lineNumber === 1; @@ -317,13 +318,13 @@ class SnippetRenderer { : LineContentType.CONTENT_NORMAL, visibility: lineWhenCollapsed ? LineVisibility.ALWAYS - : LineVisibility.WHEN_EXPANDED + : LineVisibility.WHEN_EXPANDED, }); lineContainer.append( SnippetRenderer.renderSnippetLine(dom, tmpl, contentLineDetails) ); - messages.forEach(message => { + messages.forEach((message) => { lineContainer.append(SnippetRenderer.renderMessage(dom, tmpl, message)); }); } @@ -336,18 +337,18 @@ class SnippetRenderer { * @param {ParentNode} templateContext * @param {LH.Audit.Details.SnippetValue} details * @param {DetailsRenderer} detailsRenderer - * @return {Element} + * @return {!Element} */ static render(dom, templateContext, details, detailsRenderer) { - const tmpl = dom.cloneTemplate("#tmpl-lh-snippet", templateContext); - const snippetEl = dom.find(".lh-snippet", tmpl); + const tmpl = dom.cloneTemplate('#tmpl-lh-snippet', templateContext); + const snippetEl = dom.find('.lh-snippet', tmpl); const header = SnippetRenderer.renderHeader( dom, tmpl, details, detailsRenderer, - () => snippetEl.classList.toggle("lh-snippet--expanded") + () => snippetEl.classList.toggle('lh-snippet--expanded') ); const content = SnippetRenderer.renderSnippetContent(dom, tmpl, details); snippetEl.append(header, content); @@ -356,11 +357,4 @@ class SnippetRenderer { } } -// Allow Node require()'ing. -// if (typeof module !== 'undefined' && module.exports) { -// module.exports = SnippetRenderer; -// } else { -// self.SnippetRenderer = SnippetRenderer; -// } - export default SnippetRenderer; diff --git a/src/renderer/util.js b/src/renderer/util.js index edca4a9..80563af 100644 --- a/src/renderer/util.js +++ b/src/renderer/util.js @@ -1,6 +1,6 @@ /** * @license - * Copyright 2017 Google Inc. All Rights Reserved. + * Copyright 2017 The Lighthouse Authors. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,51 +14,53 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -"use strict"; +'use strict'; /* globals self, URL */ -const ELLIPSIS = "\u2026"; -const NBSP = "\xa0"; +/** @typedef {import('./i18n')} I18n */ + +const ELLIPSIS = '\u2026'; +const NBSP = '\xa0'; const PASS_THRESHOLD = 0.9; -const SCREENSHOT_PREFIX = "data:image/jpeg;base64,"; +const SCREENSHOT_PREFIX = 'data:image/jpeg;base64,'; const RATINGS = { - PASS: { label: "pass", minScore: PASS_THRESHOLD }, - AVERAGE: { label: "average", minScore: 0.5 }, - FAIL: { label: "fail" }, - ERROR: { label: "error" } + PASS: { label: 'pass', minScore: PASS_THRESHOLD }, + AVERAGE: { label: 'average', minScore: 0.5 }, + FAIL: { label: 'fail' }, + ERROR: { label: 'error' }, }; // 25 most used tld plus one domains (aka public suffixes) from http archive. // @see https://github.com/GoogleChrome/lighthouse/pull/5065#discussion_r191926212 // The canonical list is https://publicsuffix.org/learn/ but we're only using subset to conserve bytes const listOfTlds = [ - "com", - "co", - "gov", - "edu", - "ac", - "org", - "go", - "gob", - "or", - "net", - "in", - "ne", - "nic", - "gouv", - "web", - "spb", - "blog", - "jus", - "kiev", - "mil", - "wi", - "qc", - "ca", - "bel", - "on" + 'com', + 'co', + 'gov', + 'edu', + 'ac', + 'org', + 'go', + 'gob', + 'or', + 'net', + 'in', + 'ne', + 'nic', + 'gouv', + 'web', + 'spb', + 'blog', + 'jus', + 'kiev', + 'mil', + 'wi', + 'qc', + 'ca', + 'bel', + 'on', ]; class Util { @@ -87,7 +89,7 @@ class Util { // If LHR is older (≤3.0.3), it has no locale setting. Set default. if (!clone.configSettings.locale) { - clone.configSettings.locale = "en"; + clone.configSettings.locale = 'en'; } for (const audit of Object.values(clone.audits)) { @@ -96,10 +98,10 @@ class Util { // @ts-ignore tsc rightly flags that these values shouldn't occur. // eslint-disable-next-line max-len if ( - audit.scoreDisplayMode === "not_applicable" || - audit.scoreDisplayMode === "not-applicable" + audit.scoreDisplayMode === 'not_applicable' || + audit.scoreDisplayMode === 'not-applicable' ) { - audit.scoreDisplayMode = "notApplicable"; + audit.scoreDisplayMode = 'notApplicable'; } if (audit.details) { @@ -108,13 +110,13 @@ class Util { // @ts-ignore tsc rightly flags that these values shouldn't occur. if ( audit.details.type === undefined || - audit.details.type === "diagnostic" + audit.details.type === 'diagnostic' ) { - audit.details.type = "debugdata"; + audit.details.type = 'debugdata'; } // Add the jpg data URL prefix to filmstrip screenshots without them (LHR <5.0). - if (audit.details.type === "filmstrip") { + if (audit.details.type === 'filmstrip') { for (const screenshot of audit.details.items) { if (!screenshot.data.startsWith(SCREENSHOT_PREFIX)) { screenshot.data = SCREENSHOT_PREFIX + screenshot.data; @@ -125,22 +127,22 @@ class Util { } // For convenience, smoosh all AuditResults into their auditRef (which has just weight & group) - if (typeof clone.categories !== "object") - throw new Error("No categories provided."); + if (typeof clone.categories !== 'object') + throw new Error('No categories provided.'); for (const category of Object.values(clone.categories)) { - category.auditRefs.forEach(auditRef => { + category.auditRefs.forEach((auditRef) => { const result = clone.audits[auditRef.id]; auditRef.result = result; // attach the stackpacks to the auditRef object if (clone.stackPacks) { - clone.stackPacks.forEach(pack => { + clone.stackPacks.forEach((pack) => { if (pack.descriptions[auditRef.id]) { auditRef.stackPacks = auditRef.stackPacks || []; auditRef.stackPacks.push({ title: pack.title, iconDataURL: pack.iconDataURL, - description: pack.descriptions[auditRef.id] + description: pack.descriptions[auditRef.id], }); } }); @@ -160,14 +162,14 @@ class Util { */ static showAsPassed(audit) { switch (audit.scoreDisplayMode) { - case "manual": - case "notApplicable": + case 'manual': + case 'notApplicable': return true; - case "error": - case "informative": + case 'error': + case 'informative': return false; - case "numeric": - case "binary": + case 'numeric': + case 'binary': default: return Number(audit.score) >= RATINGS.PASS.minScore; } @@ -181,9 +183,9 @@ class Util { */ static calculateRating(score, scoreDisplayMode) { // Handle edge cases first, manual and not applicable receive 'pass', errored audits receive 'error' - if (scoreDisplayMode === "manual" || scoreDisplayMode === "notApplicable") { + if (scoreDisplayMode === 'manual' || scoreDisplayMode === 'notApplicable') { return RATINGS.PASS.label; - } else if (scoreDisplayMode === "error") { + } else if (scoreDisplayMode === 'error') { return RATINGS.ERROR.label; } else if (score === null) { return RATINGS.FAIL.label; @@ -222,7 +224,7 @@ class Util { const isCode = i % 2 !== 0; segments.push({ isCode, - text + text, }); } @@ -250,7 +252,7 @@ class Util { // Skip empty text as it's an artifact of splitting, not meaningful. segments.push({ isLink: false, - text: preambleText + text: preambleText, }); } @@ -259,7 +261,7 @@ class Util { segments.push({ isLink: true, text: linkText, - linkHref + linkHref, }); } } @@ -277,7 +279,7 @@ class Util { options = options || { numPathParts: undefined, preserveQuery: undefined, - preserveHost: undefined + preserveHost: undefined, }; const numPathParts = options.numPathParts !== undefined ? options.numPathParts : 2; @@ -287,18 +289,18 @@ class Util { let name; - if (parsedUrl.protocol === "about:" || parsedUrl.protocol === "data:") { + if (parsedUrl.protocol === 'about:' || parsedUrl.protocol === 'data:') { // Handle 'about:*' and 'data:*' URLs specially since they have no path. name = parsedUrl.href; } else { name = parsedUrl.pathname; - const parts = name.split("/").filter(part => part.length); + const parts = name.split('/').filter((part) => part.length); if (numPathParts && parts.length > numPathParts) { - name = ELLIPSIS + parts.slice(-1 * numPathParts).join("/"); + name = ELLIPSIS + parts.slice(-1 * numPathParts).join('/'); } if (preserveHost) { - name = `${parsedUrl.host}/${name.replace(/^\//, "")}`; + name = `${parsedUrl.host}/${name.replace(/^\//, '')}`; } if (preserveQuery) { name = `${name}${parsedUrl.search}`; @@ -319,7 +321,7 @@ class Util { name = name.replace(/\u2026+/g, ELLIPSIS); // Elide query params first - if (name.length > MAX_LENGTH && name.includes("?")) { + if (name.length > MAX_LENGTH && name.includes('?')) { // Try to leave the first query parameter intact name = name.replace(/\?([^=]*)(=)?.*/, `?$1$2${ELLIPSIS}`); @@ -331,7 +333,7 @@ class Util { // Elide too long names next if (name.length > MAX_LENGTH) { - const dotIndex = name.lastIndexOf("."); + const dotIndex = name.lastIndexOf('.'); if (dotIndex >= 0) { name = name.slice(0, MAX_LENGTH - 1 - (name.length - dotIndex)) + @@ -355,13 +357,13 @@ class Util { return { file: Util.getURLDisplayName(parsedUrl), hostname: parsedUrl.hostname, - origin: parsedUrl.origin + origin: parsedUrl.origin, }; } /** * @param {string|URL} value - * @return {URL} + * @return {!URL} */ static createOrReturnURL(value) { if (value instanceof URL) { @@ -378,13 +380,13 @@ class Util { * @return {string} tld */ static getTld(hostname) { - const tlds = hostname.split(".").slice(-2); + const tlds = hostname.split('.').slice(-2); if (!listOfTlds.includes(tlds[0])) { return `.${tlds[tlds.length - 1]}`; } - return `.${tlds.join(".")}`; + return `.${tlds.join('.')}`; } /** @@ -398,18 +400,15 @@ class Util { // tld is .com or .co.uk which means we means that length is 1 to big // .com => 2 & .co.uk => 3 - const splitTld = tld.split("."); + const splitTld = tld.split('.'); // get TLD + root domain - return hostname - .split(".") - .slice(-splitTld.length) - .join("."); + return hostname.split('.').slice(-splitTld.length).join('.'); } /** * @param {LH.Config.Settings} settings - * @return {Array<{name: string, description: string}>} + * @return {!Array<{name: string, description: string}>} */ static getEnvironmentDisplayValues(settings) { const emulationDesc = Util.getEmulationDescriptions(settings); @@ -417,16 +416,16 @@ class Util { return [ { name: Util.i18n.strings.runtimeSettingsDevice, - description: emulationDesc.deviceEmulation + description: emulationDesc.deviceEmulation, }, { name: Util.i18n.strings.runtimeSettingsNetworkThrottling, - description: emulationDesc.networkThrottling + description: emulationDesc.networkThrottling, }, { name: Util.i18n.strings.runtimeSettingsCPUThrottling, - description: emulationDesc.cpuThrottling - } + description: emulationDesc.cpuThrottling, + }, ]; } @@ -441,11 +440,11 @@ class Util { const throttling = settings.throttling; switch (settings.throttlingMethod) { - case "provided": + case 'provided': cpuThrottling = Util.i18n.strings.throttlingProvided; networkThrottling = Util.i18n.strings.throttlingProvided; break; - case "devtools": { + case 'devtools': { const { cpuSlowdownMultiplier, requestLatencyMs } = throttling; cpuThrottling = `${Util.i18n.formatNumber( cpuSlowdownMultiplier @@ -460,7 +459,7 @@ class Util { )}${NBSP}Kbps up (DevTools)`; break; } - case "simulate": { + case 'simulate': { const { cpuSlowdownMultiplier, rttMs, throughputKbps } = throttling; cpuThrottling = `${Util.i18n.formatNumber( cpuSlowdownMultiplier @@ -478,16 +477,16 @@ class Util { } let deviceEmulation = Util.i18n.strings.runtimeNoEmulation; - if (settings.emulatedFormFactor === "mobile") { + if (settings.emulatedFormFactor === 'mobile') { deviceEmulation = Util.i18n.strings.runtimeMobileEmulation; - } else if (settings.emulatedFormFactor === "desktop") { + } else if (settings.emulatedFormFactor === 'desktop') { deviceEmulation = Util.i18n.strings.runtimeDesktopEmulation; } return { deviceEmulation, cpuThrottling, - networkThrottling + networkThrottling, }; } @@ -536,17 +535,24 @@ class Util { } }); - return lines.filter(line => lineNumbersToKeep.has(line.lineNumber)); + return lines.filter((line) => lineNumbersToKeep.has(line.lineNumber)); } /** * @param {string} categoryId */ static isPluginCategory(categoryId) { - return categoryId.startsWith("lighthouse-plugin-"); + return categoryId.startsWith('lighthouse-plugin-'); } } +/** + * Some parts of the report renderer require data found on the LHR. Instead of wiring it + * through, we have this global. + * @type {LH.ReportResult | null} + */ +Util.reportJson = null; + /** @type {I18n} */ // @ts-ignore: Is set in report renderer. Util.i18n = null; @@ -557,108 +563,106 @@ Util.i18n = null; Util.UIStrings = { /** Disclaimer shown to users below the metric values (First Contentful Paint, Time to Interactive, etc) to warn them that the numbers they see will likely change slightly the next time they run Lighthouse. */ varianceDisclaimer: - "Values are estimated and may vary. The performance score is [based only on these metrics](https://github.com/GoogleChrome/lighthouse/blob/d2ec9ffbb21de9ad1a0f86ed24575eda32c796f0/docs/scoring.md#how-are-the-scores-weighted).", + 'Values are estimated and may vary. The [performance score is calculated](https://web.dev/performance-scoring/) directly from these metrics.', + /** Text link pointing to an interactive calculator that explains Lighthouse scoring. The link text should be fairly short. */ + calculatorLink: 'See calculator.', /** Column heading label for the listing of opportunity audits. Each audit title represents an opportunity. There are only 2 columns, so no strict character limit. */ - opportunityResourceColumnLabel: "Opportunity", + opportunityResourceColumnLabel: 'Opportunity', /** Column heading label for the estimated page load savings of opportunity audits. Estimated Savings is the total amount of time (in seconds) that Lighthouse computed could be reduced from the total page load time, if the suggested action is taken. There are only 2 columns, so no strict character limit. */ - opportunitySavingsColumnLabel: "Estimated Savings", + opportunitySavingsColumnLabel: 'Estimated Savings', /** An error string displayed next to a particular audit when it has errored, but not provided any specific error message. */ - errorMissingAuditInfo: "Report error: no audit information", + errorMissingAuditInfo: 'Report error: no audit information', /** A label, shown next to an audit title or metric title, indicating that there was an error computing it. The user can hover on the label to reveal a tooltip with the extended error message. Translation should be short (< 20 characters). */ - errorLabel: "Error!", + errorLabel: 'Error!', /** This label is shown above a bulleted list of warnings. It is shown directly below an audit that produced warnings. Warnings describe situations the user should be aware of, as Lighthouse was unable to complete all the work required on this audit. For example, The 'Unable to decode image (biglogo.jpg)' warning may show up below an image encoding audit. */ - warningHeader: "Warnings: ", + warningHeader: 'Warnings: ', /** The tooltip text on an expandable chevron icon. Clicking the icon expands a section to reveal a list of audit results that was hidden by default. */ - auditGroupExpandTooltip: "Show audits", + auditGroupExpandTooltip: 'Show audits', /** Section heading shown above a list of passed audits that contain warnings. Audits under this section do not negatively impact the score, but Lighthouse has generated some potentially actionable suggestions that should be reviewed. This section is expanded by default and displays after the failing audits. */ - warningAuditsGroupTitle: "Passed audits but with warnings", + warningAuditsGroupTitle: 'Passed audits but with warnings', /** Section heading shown above a list of audits that are passing. 'Passed' here refers to a passing grade. This section is collapsed by default, as the user should be focusing on the failed audits instead. Users can click this heading to reveal the list. */ - passedAuditsGroupTitle: "Passed audits", + passedAuditsGroupTitle: 'Passed audits', /** Section heading shown above a list of audits that do not apply to the page. For example, if an audit is 'Are images optimized?', but the page has no images on it, the audit will be marked as not applicable. This is neither passing or failing. This section is collapsed by default, as the user should be focusing on the failed audits instead. Users can click this heading to reveal the list. */ - notApplicableAuditsGroupTitle: "Not applicable", + notApplicableAuditsGroupTitle: 'Not applicable', /** Section heading shown above a list of audits that were not computed by Lighthouse. They serve as a list of suggestions for the user to go and manually check. For example, Lighthouse can't automate testing cross-browser compatibility, so that is listed within this section, so the user is reminded to test it themselves. This section is collapsed by default, as the user should be focusing on the failed audits instead. Users can click this heading to reveal the list. */ - manualAuditsGroupTitle: "Additional items to manually check", + manualAuditsGroupTitle: 'Additional items to manually check', /** Label shown preceding any important warnings that may have invalidated the entire report. For example, if the user has Chrome extensions installed, they may add enough performance overhead that Lighthouse's performance metrics are unreliable. If shown, this will be displayed at the top of the report UI. */ toplevelWarningsMessage: - "There were issues affecting this run of Lighthouse:", + 'There were issues affecting this run of Lighthouse:', /** String of text shown in a graphical representation of the flow of network requests for the web page. This label represents the initial network request that fetches an HTML page. This navigation may be redirected (eg. Initial navigation to http://example.com redirects to https://www.example.com). */ - crcInitialNavigation: "Initial Navigation", + crcInitialNavigation: 'Initial Navigation', /** Label of value shown in the summary of critical request chains. Refers to the total amount of time (milliseconds) of the longest critical path chain/sequence of network requests. Example value: 2310 ms */ - crcLongestDurationLabel: "Maximum critical path latency:", + crcLongestDurationLabel: 'Maximum critical path latency:', /** Label for button that shows all lines of the snippet when clicked */ - snippetExpandButtonLabel: "Expand snippet", + snippetExpandButtonLabel: 'Expand snippet', /** Label for button that only shows a few lines of the snippet when clicked */ - snippetCollapseButtonLabel: "Collapse snippet", + snippetCollapseButtonLabel: 'Collapse snippet', /** Explanation shown to users below performance results to inform them that the test was done with a 4G network connection and to warn them that the numbers they see will likely change slightly the next time they run Lighthouse. 'Lighthouse' becomes link text to additional documentation. */ lsPerformanceCategoryDescription: - "[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.", + '[Lighthouse](https://developers.google.com/web/tools/lighthouse/) analysis of the current page on an emulated mobile network. Values are estimated and may vary.', /** Title of the lab data section of the Performance category. Within this section are various speed metrics which quantify the pageload performance into values presented in seconds and milliseconds. "Lab" is an abbreviated form of "laboratory", and refers to the fact that the data is from a controlled test of a website, not measurements from real users visiting that site. */ - labDataTitle: "Lab Data", + labDataTitle: 'Lab Data', /** This label is for a checkbox above a table of items loaded by a web page. The checkbox is used to show or hide third-party (or "3rd-party") resources in the table, where "third-party resources" refers to items loaded by a web page from URLs that aren't controlled by the owner of the web page. */ - thirdPartyResourcesLabel: "Show 3rd-party resources", + thirdPartyResourcesLabel: 'Show 3rd-party resources', /** Option in a dropdown menu that opens a small, summary report in a print dialog. */ - dropdownPrintSummary: "Print Summary", + dropdownPrintSummary: 'Print Summary', /** Option in a dropdown menu that opens a full Lighthouse report in a print dialog. */ - dropdownPrintExpanded: "Print Expanded", + dropdownPrintExpanded: 'Print Expanded', /** Option in a dropdown menu that copies the Lighthouse JSON object to the system clipboard. */ - dropdownCopyJSON: "Copy JSON", + dropdownCopyJSON: 'Copy JSON', /** Option in a dropdown menu that saves the Lighthouse report HTML locally to the system as a '.html' file. */ - dropdownSaveHTML: "Save as HTML", + dropdownSaveHTML: 'Save as HTML', /** Option in a dropdown menu that saves the Lighthouse JSON object to the local system as a '.json' file. */ - dropdownSaveJSON: "Save as JSON", + dropdownSaveJSON: 'Save as JSON', /** Option in a dropdown menu that opens the current report in the Lighthouse Viewer Application. */ - dropdownViewer: "Open in Viewer", + dropdownViewer: 'Open in Viewer', /** Option in a dropdown menu that saves the current report as a new Github Gist. */ - dropdownSaveGist: "Save as Gist", + dropdownSaveGist: 'Save as Gist', /** Option in a dropdown menu that toggles the themeing of the report between Light(default) and Dark themes. */ - dropdownDarkTheme: "Toggle Dark Theme", + dropdownDarkTheme: 'Toggle Dark Theme', /** Title of the Runtime settings table in a Lighthouse report. Runtime settings are the environment configurations that a specific report used at auditing time. */ - runtimeSettingsTitle: "Runtime Settings", + runtimeSettingsTitle: 'Runtime Settings', /** Label for a row in a table that shows the URL that was audited during a Lighthouse run. */ - runtimeSettingsUrl: "URL", + runtimeSettingsUrl: 'URL', /** Label for a row in a table that shows the time at which a Lighthouse run was conducted; formatted as a timestamp, e.g. Jan 1, 1970 12:00 AM UTC. */ - runtimeSettingsFetchTime: "Fetch Time", + runtimeSettingsFetchTime: 'Fetch Time', /** Label for a row in a table that describes the kind of device that was emulated for the Lighthouse run. Example values for row elements: 'No Emulation', 'Emulated Desktop', etc. */ - runtimeSettingsDevice: "Device", + runtimeSettingsDevice: 'Device', /** Label for a row in a table that describes the network throttling conditions that were used during a Lighthouse run, if any. */ - runtimeSettingsNetworkThrottling: "Network throttling", + runtimeSettingsNetworkThrottling: 'Network throttling', /** Label for a row in a table that describes the CPU throttling conditions that were used during a Lighthouse run, if any.*/ - runtimeSettingsCPUThrottling: "CPU throttling", + runtimeSettingsCPUThrottling: 'CPU throttling', + /** Label for a row in a table that shows in what tool Lighthouse is being run (e.g. The lighthouse CLI, Chrome DevTools, Lightrider, WebPageTest, etc). */ + runtimeSettingsChannel: 'Channel', /** Label for a row in a table that shows the User Agent that was detected on the Host machine that ran Lighthouse. */ - runtimeSettingsUA: "User agent (host)", + runtimeSettingsUA: 'User agent (host)', /** Label for a row in a table that shows the User Agent that was used to send out all network requests during the Lighthouse run. */ - runtimeSettingsUANetwork: "User agent (network)", + runtimeSettingsUANetwork: 'User agent (network)', /** Label for a row in a table that shows the estimated CPU power of the machine running Lighthouse. Example row values: 532, 1492, 783. */ - runtimeSettingsBenchmark: "CPU/Memory Power", + runtimeSettingsBenchmark: 'CPU/Memory Power', /** Label for button to create an issue against the Lighthouse Github project. */ - footerIssue: "File an issue", + footerIssue: 'File an issue', /** Descriptive explanation for emulation setting when no device emulation is set. */ - runtimeNoEmulation: "No emulation", - /** Descriptive explanation for emulation setting when emulating a Nexus 5X mobile device. */ - runtimeMobileEmulation: "Emulated Nexus 5X", + runtimeNoEmulation: 'No emulation', + /** Descriptive explanation for emulation setting when emulating a Moto G4 mobile device. */ + runtimeMobileEmulation: 'Emulated Moto G4', /** Descriptive explanation for emulation setting when emulating a generic desktop form factor, as opposed to a mobile-device like form factor. */ - runtimeDesktopEmulation: "Emulated Desktop", + runtimeDesktopEmulation: 'Emulated Desktop', /** Descriptive explanation for a runtime setting that is set to an unknown value. */ - runtimeUnknown: "Unknown", + runtimeUnknown: 'Unknown', /** Descriptive explanation for environment throttling that was provided by the runtime environment instead of provided by Lighthouse throttling. */ - throttlingProvided: "Provided by environment" + throttlingProvided: 'Provided by environment', }; -// if (typeof module !== 'undefined' && module.exports) { -// module.exports = Util; -// } else { -// self.Util = Util; -// } - export default Util; diff --git a/src/report-styles.css b/src/report-styles.css index 6bf8c50..084cd9e 100644 --- a/src/report-styles.css +++ b/src/report-styles.css @@ -1,6 +1,6 @@ /** * @license - * Copyright 2017 Google Inc. All Rights Reserved. + * Copyright 2017 The Lighthouse Authors. All Rights Reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -33,43 +33,47 @@ */ .lh-vars { /* Palette using Material Design Colors - * https://www.materialui.co/colors */ - --color-amber-50: #FFF8E1; - --color-blue-200: #90CAF9; - --color-blue-900: #0D47A1; - --color-blue-A700: #2962FF; - --color-cyan-500: #00BCD4; - --color-gray-100: #F5F5F5; - --color-gray-200: #E0E0E0; - --color-gray-400: #BDBDBD; - --color-gray-50: #FAFAFA; - --color-gray-500: #9E9E9E; + * https://www.materialui.co/colors */ + --color-amber-50: #fff8e1; + --color-blue-200: #90caf9; + --color-blue-900: #0d47a1; + --color-blue-A700: #2962ff; + --color-cyan-500: #00bcd4; + --color-gray-100: #f5f5f5; + --color-gray-200: #e0e0e0; + --color-gray-400: #bdbdbd; + --color-gray-50: #fafafa; + --color-gray-500: #9e9e9e; --color-gray-600: #757575; --color-gray-700: #616161; --color-gray-800: #424242; --color-gray-900: #212121; --color-gray: #000000; --color-green-700: #018642; - --color-green: #0CCE6B; - --color-orange-700: #D04900; - --color-orange: #FFA400; - --color-red-700: #EB0F00; - --color-red: #FF4E42; - --color-teal-600: #00897B; - --color-white: #FFFFFF; + --color-green: #0cce6b; + --color-orange-50: #fff3e0; + --color-orange-700: #d04900; + --color-orange: #ffa400; + --color-red-700: #eb0f00; + --color-red: #ff4e42; + --color-teal-600: #00897b; + --color-white: #ffffff; /* Context-specific colors */ --color-average-secondary: var(--color-orange-700); --color-average: var(--color-orange); --color-fail-secondary: var(--color-red-700); --color-fail: var(--color-red); + --color-hover: var(--color-gray-50); --color-informative: var(--color-blue-900); --color-pass-secondary: var(--color-green-700); --color-pass: var(--color-green); - --color-hover: var(--color-gray-50); /* Component variables */ - --audit-description-padding-left: calc(var(--score-icon-size) + var(--score-icon-margin-left) + var(--score-icon-margin-right)); + --audit-description-padding-left: calc( + var(--score-icon-size) + var(--score-icon-margin-left) + + var(--score-icon-margin-right) + ); --audit-explanation-line-height: 16px; --audit-group-margin-bottom: 40px; --audit-group-padding-vertical: 8px; @@ -99,7 +103,7 @@ --highlighter-background-color: var(--report-text-color); --icon-square-size: calc(var(--score-icon-size) * 0.88); --image-preview-size: 48px; - --metric-toggle-lines-fill: #7F7F7F; + --metric-toggle-lines-fill: #7f7f7f; --metrics-toggle-background-color: var(--color-gray-200); --plugin-badge-background-color: var(--color-white); --plugin-badge-size-big: calc(var(--gauge-circle-size-big) / 2.7); @@ -109,9 +113,11 @@ --pwa-icon-size: var(--topbar-logo-size); --report-background-color: #fff; --report-border-color-secondary: #ebebeb; - --report-font-family-monospace: 'Roboto Mono', 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace; + --report-font-family-monospace: 'Roboto Mono', 'Menlo', 'dejavu sans mono', + 'Consolas', 'Lucida Console', monospace; --report-font-family: Roboto, Helvetica, Arial, sans-serif; --report-font-size: 16px; + --report-monospace-font-size: calc(var(--report-font-size) * 0.85); --report-line-height: 24px; --report-min-width: 400px; --report-text-color-secondary: var(--color-gray-800); @@ -121,14 +127,15 @@ --score-icon-background-size: 24px; --score-icon-margin-left: 4px; --score-icon-margin-right: 12px; - --score-icon-margin: 0 var(--score-icon-margin-right) 0 var(--score-icon-margin-left); + --score-icon-margin: 0 var(--score-icon-margin-right) 0 + var(--score-icon-margin-left); --score-icon-size: 12px; --scores-container-padding: 20px 0 20px 0; --scorescale-height: 6px; --scorescale-width: 18px; --section-padding-vertical: 12px; --snippet-background-color: var(--color-gray-50); - --snippet-color: var(--color-gray-800); + --snippet-color: #0938c2; --sparkline-height: 5px; --stackpack-padding-horizontal: 10px; --sticky-header-background-color: var(--report-background-color); @@ -139,7 +146,10 @@ --topbar-height: 32px; --topbar-logo-size: 24px; --topbar-padding: 0 8px; - --toplevel-warning-padding: 22px; + --toplevel-warning-background-color: var(--color-orange-50); + --toplevel-warning-message-text-color: #bd4200; + --toplevel-warning-padding: 18px; + --toplevel-warning-text-color: var(--report-text-color); /* SVGs */ --plugin-icon-url-dark: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" width="24px" height="24px" viewBox="0 0 24 24" fill="%23FFFFFF"><path d="M0 0h24v24H0z" fill="none"/><path d="M20.5 11H19V7c0-1.1-.9-2-2-2h-4V3.5C13 2.12 11.88 1 10.5 1S8 2.12 8 3.5V5H4c-1.1 0-1.99.9-1.99 2v3.8H3.5c1.49 0 2.7 1.21 2.7 2.7s-1.21 2.7-2.7 2.7H2V20c0 1.1.9 2 2 2h3.8v-1.5c0-1.49 1.21-2.7 2.7-2.7 1.49 0 2.7 1.21 2.7 2.7V22H17c1.1 0 2-.9 2-2v-4h1.5c1.38 0 2.5-1.12 2.5-2.5S21.88 11 20.5 11z"/></svg>'); @@ -186,7 +196,11 @@ --report-border-color-secondary: var(--color-gray-200); --report-text-color-secondary: var(--color-gray-400); --report-text-color: var(--color-gray-100); + --snippet-color: var(--color-cyan-500); --topbar-background-color: var(--color-gray); + --toplevel-warning-background-color: #544b40; + --toplevel-warning-message-text-color: var(--color-orange-700); + --toplevel-warning-text-color: var(--color-gray-100); /* SVGs */ --plugin-icon-url: var(--plugin-icon-url-dark); @@ -251,8 +265,10 @@ --header-padding: 16px 0 16px 0; --plugin-icon-size: 75%; --pwa-icon-margin: 0 7px 0 -3px; - --report-font-family-monospace: 'Menlo', 'dejavu sans mono', 'Consolas', 'Lucida Console', monospace; - --report-font-family: '.SFNSDisplay-Regular', 'Helvetica Neue', 'Lucida Grande', sans-serif; + --report-font-family-monospace: 'Menlo', 'dejavu sans mono', 'Consolas', + 'Lucida Console', monospace; + --report-font-family: '.SFNSDisplay-Regular', 'Helvetica Neue', + 'Lucida Grande', sans-serif; --report-font-size: 12px; --report-line-height: 20px; --score-icon-margin-left: 2px; @@ -282,11 +298,17 @@ } @keyframes fadeIn { - 0% { opacity: 0;} - 100% { opacity: 0.6;} + 0% { + opacity: 0; + } + 100% { + opacity: 0.6; + } } -.lh-root *, .lh-root *::before, .lh-root *::after { +.lh-root *, +.lh-root *::before, +.lh-root *::after { box-sizing: border-box; -webkit-font-smoothing: antialiased; } @@ -302,50 +324,56 @@ } .lh-root :focus { - outline: -webkit-focus-ring-color auto 3px; + outline: -webkit-focus-ring-color auto 3px; } .lh-root summary:focus { - outline: none; - box-shadow: 0 0 0 1px hsl(217, 89%, 61%); + outline: none; + box-shadow: 0 0 0 1px hsl(217, 89%, 61%); } .lh-root [hidden] { display: none !important; } +.lh-root pre { + margin: 0; +} + .lh-root details > summary { cursor: pointer; } .lh-container { /* - Text wrapping in the report is so much FUN! - We have a `word-break: break-word;` globally here to prevent a few common scenarios, namely - long non-breakable text (usually URLs) found in: - 1. The footer - 2. .lh-node (outerHTML) - 3. .lh-code - - With that sorted, the next challenge is appropriate column sizing and text wrapping inside our - .lh-details tables. Even more fun. - * We don't want table headers ("Potential Savings (ms)") to wrap or their column values, but - we'd be happy for the URL column to wrap if the URLs are particularly long. - * We want the narrow columns to remain narrow, providing the most column width for URL - * We don't want the table to extend past 100% width. - * Long URLs in the URL column can wrap. Util.getURLDisplayName maxes them out at 64 characters, - but they do not get any overflow:ellipsis treatment. - */ + Text wrapping in the report is so much FUN! + We have a `word-break: break-word;` globally here to prevent a few common scenarios, namely + long non-breakable text (usually URLs) found in: + 1. The footer + 2. .lh-node (outerHTML) + 3. .lh-code + + With that sorted, the next challenge is appropriate column sizing and text wrapping inside our + .lh-details tables. Even more fun. + * We don't want table headers ("Potential Savings (ms)") to wrap or their column values, but + we'd be happy for the URL column to wrap if the URLs are particularly long. + * We want the narrow columns to remain narrow, providing the most column width for URL + * We don't want the table to extend past 100% width. + * Long URLs in the URL column can wrap. Util.getURLDisplayName maxes them out at 64 characters, + but they do not get any overflow:ellipsis treatment. + */ word-break: break-word; } .lh-audit-group a, .lh-category-header__description a, .lh-audit__description a, -.lh-footer a { +.lh-footer a, +.lh-table-column--link a { color: var(--color-informative); } -.lh-audit__description, .lh-audit__stackpack { +.lh-audit__description, +.lh-audit__stackpack { --inner-audit-padding-right: var(--stackpack-padding-horizontal); padding-left: var(--audit-description-padding-left); padding-right: var(--inner-audit-padding-right); @@ -373,7 +401,7 @@ .lh-audit__stackpack__img { max-width: 50px; - margin-right: var(--default-padding) + margin-right: var(--default-padding); } /* Report header */ @@ -402,15 +430,15 @@ background-image: url('data:image/svg+xml;utf8,<svg height="24" viewBox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/><path d="M0 0h24v24H0z" fill="none"/></svg>'); } .report-icon--dark { - background-image:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 100 125"><path d="M50 23.587c-16.27 0-22.799 12.574-22.799 21.417 0 12.917 10.117 22.451 12.436 32.471h20.726c2.32-10.02 12.436-19.554 12.436-32.471 0-8.843-6.528-21.417-22.799-21.417zM39.637 87.161c0 3.001 1.18 4.181 4.181 4.181h.426l.41 1.231C45.278 94.449 46.042 95 48.019 95h3.963c1.978 0 2.74-.551 3.365-2.427l.409-1.231h.427c3.002 0 4.18-1.18 4.18-4.181V80.91H39.637v6.251zM50 18.265c1.26 0 2.072-.814 2.072-2.073v-9.12C52.072 5.813 51.26 5 50 5c-1.259 0-2.072.813-2.072 2.073v9.12c0 1.259.813 2.072 2.072 2.072zM68.313 23.727c.994.774 2.135.634 2.91-.357l5.614-7.187c.776-.992.636-2.135-.356-2.909-.992-.776-2.135-.636-2.91.357l-5.613 7.186c-.778.993-.636 2.135.355 2.91zM91.157 36.373c-.306-1.222-1.291-1.815-2.513-1.51l-8.85 2.207c-1.222.305-1.814 1.29-1.51 2.512.305 1.223 1.291 1.814 2.513 1.51l8.849-2.206c1.223-.305 1.816-1.291 1.511-2.513zM86.757 60.48l-8.331-3.709c-1.15-.512-2.225-.099-2.736 1.052-.512 1.151-.1 2.224 1.051 2.737l8.33 3.707c1.15.514 2.225.101 2.736-1.05.513-1.149.1-2.223-1.05-2.737zM28.779 23.37c.775.992 1.917 1.131 2.909.357.992-.776 1.132-1.917.357-2.91l-5.615-7.186c-.775-.992-1.917-1.132-2.909-.357s-1.131 1.917-.356 2.909l5.614 7.187zM21.715 39.583c.305-1.223-.288-2.208-1.51-2.513l-8.849-2.207c-1.222-.303-2.208.289-2.513 1.511-.303 1.222.288 2.207 1.511 2.512l8.848 2.206c1.222.304 2.208-.287 2.513-1.509zM21.575 56.771l-8.331 3.711c-1.151.511-1.563 1.586-1.05 2.735.511 1.151 1.586 1.563 2.736 1.052l8.331-3.711c1.151-.511 1.563-1.586 1.05-2.735-.512-1.15-1.585-1.562-2.736-1.052z"/></svg>'); + background-image: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="24" viewBox="0 0 100 125"><path d="M50 23.587c-16.27 0-22.799 12.574-22.799 21.417 0 12.917 10.117 22.451 12.436 32.471h20.726c2.32-10.02 12.436-19.554 12.436-32.471 0-8.843-6.528-21.417-22.799-21.417zM39.637 87.161c0 3.001 1.18 4.181 4.181 4.181h.426l.41 1.231C45.278 94.449 46.042 95 48.019 95h3.963c1.978 0 2.74-.551 3.365-2.427l.409-1.231h.427c3.002 0 4.18-1.18 4.18-4.181V80.91H39.637v6.251zM50 18.265c1.26 0 2.072-.814 2.072-2.073v-9.12C52.072 5.813 51.26 5 50 5c-1.259 0-2.072.813-2.072 2.073v9.12c0 1.259.813 2.072 2.072 2.072zM68.313 23.727c.994.774 2.135.634 2.91-.357l5.614-7.187c.776-.992.636-2.135-.356-2.909-.992-.776-2.135-.636-2.91.357l-5.613 7.186c-.778.993-.636 2.135.355 2.91zM91.157 36.373c-.306-1.222-1.291-1.815-2.513-1.51l-8.85 2.207c-1.222.305-1.814 1.29-1.51 2.512.305 1.223 1.291 1.814 2.513 1.51l8.849-2.206c1.223-.305 1.816-1.291 1.511-2.513zM86.757 60.48l-8.331-3.709c-1.15-.512-2.225-.099-2.736 1.052-.512 1.151-.1 2.224 1.051 2.737l8.33 3.707c1.15.514 2.225.101 2.736-1.05.513-1.149.1-2.223-1.05-2.737zM28.779 23.37c.775.992 1.917 1.131 2.909.357.992-.776 1.132-1.917.357-2.91l-5.615-7.186c-.775-.992-1.917-1.132-2.909-.357s-1.131 1.917-.356 2.909l5.614 7.187zM21.715 39.583c.305-1.223-.288-2.208-1.51-2.513l-8.849-2.207c-1.222-.303-2.208.289-2.513 1.511-.303 1.222.288 2.207 1.511 2.512l8.848 2.206c1.222.304 2.208-.287 2.513-1.509zM21.575 56.771l-8.331 3.711c-1.151.511-1.563 1.586-1.05 2.735.511 1.151 1.586 1.563 2.736 1.052l8.331-3.711c1.151-.511 1.563-1.586 1.05-2.735-.512-1.15-1.585-1.562-2.736-1.052z"/></svg>'); } /* Node */ .lh-node__snippet { font-family: var(--report-font-family-monospace); - color: var(--color-teal-600); - font-size: 12px; - line-height: 1.5em; + color: var(--snippet-color); + font-size: var(--report-monospace-font-size); + line-height: 20px; } /* Score */ @@ -472,14 +500,13 @@ .lh-audit__stackpack { color: var(--report-text-color-secondary); } -.lh-category-header__description { +.lh-category-header__description { font-size: var(--report-font-size); text-align: center; margin: 0px auto; max-width: 400px; } - .lh-audit__display-text, .lh-load-opportunity__sparkline, .lh-chevron-container { @@ -493,12 +520,18 @@ flex: 1; } +.lh-audit__title-and-text code { + color: var(--snippet-color); + font-size: var(--report-monospace-font-size); +} + /* Prepend display text with em dash separator. But not in Opportunities. */ .lh-audit__display-text:not(:empty):before { content: '—'; margin-right: var(--audit-margin-horizontal); } -.lh-audit-group.lh-audit-group--load-opportunities .lh-audit__display-text:not(:empty):before { +.lh-audit-group.lh-audit-group--load-opportunities + .lh-audit__display-text:not(:empty):before { display: none; } @@ -533,50 +566,33 @@ display: none; } - /* Perf Metric */ -.lh-columns { - display: flex; - width: 100%; -} -@media screen and (max-width: 640px) { - .lh-columns { - flex-wrap: wrap; - - } +.lh-metrics-container { + display: grid; + grid-template-rows: 1fr 1fr 1fr; + grid-auto-flow: column; + grid-column-gap: 24px; } -.lh-column { - flex: 1; -} -.lh-column:first-of-type { - margin-right: 24px; +.lh-metric { + border-top: 1px solid var(--report-border-color-secondary); } -@media screen and (max-width: 800px) { - .lh-column:first-of-type { - margin-right: 8px; +@media screen and (min-width: 640px) { + .lh-metric:nth-child(3n + 3) { + border-bottom: 1px solid var(--report-border-color-secondary); } } + @media screen and (max-width: 640px) { - .lh-column { - flex-basis: 100%; - } - .lh-column:first-of-type { - margin-right: 0px; - } - .lh-column:first-of-type .lh-metric:last-of-type { - border-bottom: 0; + .lh-metrics-container { + display: block; } -} - -.lh-metric { - border-bottom: 1px solid var(--report-border-color-secondary); -} -.lh-metric:first-of-type { - border-top: 1px solid var(--report-border-color-secondary); + .lh-metric:nth-last-child(-n + 1) { + border-bottom: 1px solid var(--report-border-color-secondary); + } } .lh-metric__innerwrap { @@ -599,8 +615,9 @@ color: var(--color-gray-600); margin: var(--section-padding-vertical) 0; } -.lh-metrics__disclaimer a { - color: var(--color-gray-700); + +.lh-calclink { + padding-left: calc(1ex / 3); } .lh-metric__description { @@ -618,7 +635,9 @@ /* No-JS toggle switch */ /* Keep this selector sync'd w/ `magicSelector` in report-ui-features-test.js */ - .lh-metrics-toggle__input:checked ~ .lh-columns .lh-metric__description { +.lh-metrics-toggle__input:checked + ~ .lh-metrics-container + .lh-metric__description { display: block; } @@ -661,7 +680,7 @@ fill: var(--metric-toggle-lines-fill); } -.lh-metrics-toggle__label { +.lh-metrics-toggle__label { background-color: var(--metrics-toggle-background-color); } @@ -746,13 +765,12 @@ flex: 4; text-align: right; } -/* -.lh-audit--load-opportunity .lh-audit__display-text { + +/* .lh-audit--load-opportunity .lh-audit__display-text { text-align: right; flex: 0 0 calc(3 * var(--report-font-size)); } */ -/* React css fix */ .lh-audit--load-opportunity .lh-audit__display-text { text-align: right; flex-grow: 0; @@ -789,8 +807,6 @@ background: var(--color-fail); } - - /* Filmstrip */ .lh-filmstrip-container { @@ -844,7 +860,6 @@ border-top: none; } - .lh-audit--error .lh-audit__display-text { color: var(--color-fail); } @@ -867,18 +882,20 @@ } /* Style the "over budget" columns red. */ -.lh-audit-group--budgets .lh-table tbody tr td:nth-child(4), -.lh-audit-group--budgets .lh-table tbody tr td:nth-child(5){ +.lh-audit-group--budgets #performance-budget tbody tr td:nth-child(4), +.lh-audit-group--budgets #performance-budget tbody tr td:nth-child(5), +.lh-audit-group--budgets #timing-budget tbody tr td:nth-child(3) { color: var(--color-red-700); } /* Align the "over budget request count" text to be close to the "over budget bytes" column. */ -.lh-audit-group--budgets .lh-table tbody tr td:nth-child(4){ +.lh-audit-group--budgets .lh-table tbody tr td:nth-child(4) { text-align: right; } .lh-audit-group--budgets .lh-table { width: 100%; + margin: 16px 0px 16px 0px; } .lh-audit-group--pwa-fast-reliable .lh-audit-group__header::before { @@ -963,7 +980,8 @@ } .lh-audit-explanation { - margin: var(--audit-padding-vertical) 0 calc(var(--audit-padding-vertical) / 2) var(--audit-margin-horizontal); + margin: var(--audit-padding-vertical) 0 + calc(var(--audit-padding-vertical) / 2) var(--audit-margin-horizontal); line-height: var(--audit-explanation-line-height); display: inline-block; } @@ -995,14 +1013,15 @@ .lh-code { white-space: normal; margin-top: 0; - font-size: 85%; + font-size: var(--report-monospace-font-size); } .lh-warnings { --item-margin: calc(var(--report-line-height) / 6); color: var(--color-average); margin: var(--audit-padding-vertical) 0; - padding: calc(var(--audit-padding-vertical) / 2) calc(var(--audit-description-padding-left)); + padding: calc(var(--audit-padding-vertical) / 2) + calc(var(--audit-description-padding-left)); } .lh-warnings span { font-weight: bold; @@ -1010,16 +1029,21 @@ .lh-warnings--toplevel { --item-margin: calc(var(--header-line-height) / 4); - color: var(--report-text-color-secondary); + color: var(--toplevel-warning-text-color); margin-left: auto; margin-right: auto; max-width: calc(var(--report-width) - var(--category-padding) * 2); - background-color: var(--color-amber-50); + background-color: var(--toplevel-warning-background-color); padding: var(--toplevel-warning-padding); + border-radius: 8px; +} + +.lh-warnings__msg { + color: var(--toplevel-warning-message-text-color); + margin: 0; } .lh-warnings ul { - padding-left: calc(var(--category-padding) * 2); margin: 0; } .lh-warnings li { @@ -1070,16 +1094,16 @@ } .lh-gauge-base { - opacity: 0.1; - stroke: var(--circle-background); + opacity: 0.1; + stroke: var(--circle-background); } .lh-gauge-arc { - fill: none; - stroke: var(--circle-color); - transform-origin: 50% 50%; - animation: load-gauge var(--transition-length) ease forwards; - animation-delay: 250ms; + fill: none; + stroke: var(--circle-color); + transform-origin: 50% 50%; + animation: load-gauge var(--transition-length) ease forwards; + animation-delay: 250ms; } .lh-gauge__svg-wrapper { @@ -1099,13 +1123,13 @@ background-repeat: no-repeat; background-size: var(--plugin-icon-size); background-position: 58% 50%; - content: ""; + content: ''; position: absolute; right: -6px; bottom: 0px; display: block; z-index: 100; - box-shadow: 0 0 4px rgba(0,0,0,.2); + box-shadow: 0 0 4px rgba(0, 0, 0, 0.2); border-radius: 25%; } .lh-category .lh-gauge__wrapper--plugin .lh-gauge__svg-wrapper::before { @@ -1114,7 +1138,9 @@ } @keyframes load-gauge { - from { stroke-dasharray: 0 352; } + from { + stroke-dasharray: 0 352; + } } .lh-gauge__percentage { @@ -1163,7 +1189,6 @@ margin-top: 14px; } - .lh-scores-header .lh-gauge__wrapper, .lh-scores-header .lh-gauge--pwa__wrapper, .lh-sticky-header .lh-gauge__wrapper, @@ -1213,7 +1238,6 @@ display: none; } - .lh-categories { width: 100%; overflow: hidden; @@ -1234,11 +1258,15 @@ } /* section hash link jump should preserve fixed header - https://css-tricks.com/hash-tag-links-padding/ -*/ + https://css-tricks.com/hash-tag-links-padding/ + */ .lh-category > .lh-permalink { - --sticky-header-height: calc(var(--gauge-circle-size) + var(--score-container-padding) * 2); - --topbar-plus-header: calc(var(--topbar-height) + var(--sticky-header-height)); + --sticky-header-height: calc( + var(--gauge-circle-size) + var(--score-container-padding) * 2 + ); + --topbar-plus-header: calc( + var(--topbar-height) + var(--sticky-header-height) + ); margin-top: calc(var(--topbar-plus-header) * -1); padding-bottom: var(--topbar-plus-header); display: block; @@ -1324,9 +1352,12 @@ word-break: normal; } -.lh-table tbody tr:nth-child(odd) { +.lh-row--odd { background-color: var(--table-higlight-background-color); } +.lh-row--hidden { + display: none; +} .lh-table th, .lh-table td { @@ -1339,14 +1370,18 @@ padding-right: 0; } +.lh-table tr { + vertical-align: baseline; +} + /* Looks unnecessary, but mostly for keeping the <th>s left-aligned */ .lh-table-column--text, -.lh-table-column--source-location, -.lh-table-column--url, -/* .lh-table-column--thumbnail, */ -/* .lh-table-column--empty,*/ -.lh-table-column--code, -.lh-table-column--node { + .lh-table-column--source-location, + .lh-table-column--url, + /* .lh-table-column--thumbnail, */ + /* .lh-table-column--empty,*/ + .lh-table-column--code, + .lh-table-column--node { text-align: left; } @@ -1358,8 +1393,6 @@ word-break: normal; } - - .lh-table .lh-table-column--thumbnail { width: var(--image-preview-size); padding: 0; @@ -1369,17 +1402,22 @@ min-width: 250px; } +.lh-table-column--text { + min-width: 80px; +} + /* Keep columns narrow if they follow the URL column */ /* 12% was determined to be a decent narrow width, but wide enough for column headings */ .lh-table-column--url + th.lh-table-column--bytes, .lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--bytes, .lh-table-column--url + .lh-table-column--ms, .lh-table-column--url + .lh-table-column--ms + th.lh-table-column--bytes, -.lh-table-column--url + .lh-table-column--bytes + th.lh-table-column--timespanMs { +.lh-table-column--url + + .lh-table-column--bytes + + th.lh-table-column--timespanMs { width: 12%; } - .lh-text__url-host { display: inline; } @@ -1387,7 +1425,7 @@ .lh-text__url-host { margin-left: calc(var(--report-font-size) / 2); opacity: 0.6; - font-size: 90% + font-size: 90%; } .lh-thumbnail { @@ -1411,14 +1449,20 @@ text-decoration: underline dotted #999; } -.lh-sub-rows:not(:first-child) .lh-sub-row { +.lh-sub-item-row { margin-left: 20px; + margin-bottom: 0; color: var(--color-gray-700); } +.lh-sub-item-row td { + padding-top: 4px; + padding-bottom: 4px; + padding-left: 20px; +} /* Chevron - https://codepen.io/paulirish/pen/LmzEmK - */ + https://codepen.io/paulirish/pen/LmzEmK + */ .lh-chevron { --chevron-angle: 42deg; /* Edge doesn't support transform: rotate(calc(...)), so we define it here */ @@ -1433,33 +1477,47 @@ transform: translateY(var(--report-line-height)); } .lh-chevron__line { - stroke: var(--chevron-line-stroke); - stroke-width: var(--chevron-size); - stroke-linecap: square; - transform-origin: 50%; - transform: rotate(var(--chevron-angle)); - transition: transform 300ms, stroke 300ms; -} - -.lh-audit-group > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-right, -.lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-left, + stroke: var(--chevron-line-stroke); + stroke-width: var(--chevron-size); + stroke-linecap: square; + transform-origin: 50%; + transform: rotate(var(--chevron-angle)); + transition: transform 300ms, stroke 300ms; +} + +.lh-audit-group + > summary + > .lh-audit-group__summary + > .lh-chevron + .lh-chevron__line-right, +.lh-audit-group[open] + > summary + > .lh-audit-group__summary + > .lh-chevron + .lh-chevron__line-left, .lh-audit > .lh-expandable-details .lh-chevron__line-right, .lh-audit > .lh-expandable-details[open] .lh-chevron__line-left { - transform: rotate(var(--chevron-angle-right)); + transform: rotate(var(--chevron-angle-right)); } -.lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__line-right, +.lh-audit-group[open] + > summary + > .lh-audit-group__summary + > .lh-chevron + .lh-chevron__line-right, .lh-audit > .lh-expandable-details[open] .lh-chevron__line-right { transform: rotate(var(--chevron-angle)); } -.lh-audit-group[open] > summary > .lh-audit-group__summary > .lh-chevron .lh-chevron__lines, +.lh-audit-group[open] + > summary + > .lh-audit-group__summary + > .lh-chevron + .lh-chevron__lines, .lh-audit > .lh-expandable-details[open] .lh-chevron__lines { - transform: translateY(calc(var(--chevron-size) * -1)); + transform: translateY(calc(var(--chevron-size) * -1)); } - - /* Tooltip */ .tooltip-boundary { position: relative; @@ -1477,8 +1535,8 @@ text-align: initial; } /* shrink tooltips to not be cutoff on left edge of narrow viewports - 45vw is chosen to be ~= width of the left column of metrics -*/ + 45vw is chosen to be ~= width of the left column of metrics + */ @media screen and (max-width: 535px) { .tooltip { min-width: 45vw; @@ -1503,7 +1561,7 @@ } .tooltip::before { - content: ""; + content: ''; border: solid transparent; border-bottom-color: #fff; border-width: 10px; @@ -1515,7 +1573,18 @@ } @keyframes fadeInTooltip { - 0% { opacity: 0; } - 75% { opacity: 1; } - 100% { opacity: 1; filter: drop-shadow(1px 0px 1px #aaa) drop-shadow(0px 2px 4px hsla(206, 6%, 25%, 0.15)); pointer-events: auto; } + 0% { + opacity: 0; + } + 75% { + opacity: 1; + } + 100% { + opacity: 1; + filter: drop-shadow(1px 0px 1px #aaa) + drop-shadow(0px 2px 4px hsla(206, 6%, 25%, 0.15)); + pointer-events: auto; + } } + +/*# sourceURL=report-styles.css */ diff --git a/src/templates.js b/src/templates.js index 9dcd733..c7852fe 100644 --- a/src/templates.js +++ b/src/templates.js @@ -1,6 +1,6 @@ export default `<!-- @license -Copyright 2018 Google Inc. All Rights Reserved. +Copyright 2018 The Lighthouse Authors. All Rights Reserved. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ limitations under the License. <!-- Lighthouse run warnings --> <template id="tmpl-lh-warnings--toplevel"> <div class="lh-warnings lh-warnings--toplevel"> - <strong class="lh-warnings__msg"></strong> + <p class="lh-warnings__msg"></p> <ul></ul> </div> </template> @@ -186,7 +186,7 @@ limitations under the License. } .lh-devtools .lh-sticky-header { - + /* The report within DevTools is placed in a container with overflow, which changes the placement of this header unless we change position to sticky. */ position: sticky; } @@ -268,6 +268,7 @@ limitations under the License. .lh-tools { margin-left: auto; will-change: transform; + min-width: var(--tools-icon-size); } .lh-tools__button { width: var(--tools-icon-size); @@ -952,4 +953,5 @@ limitations under the License. </div> </template> + `; diff --git a/yarn.lock b/yarn.lock index 5627b9a..6eff255 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,10 +2,19 @@ # yarn lockfile v1 -"@babel/cli@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.8.4.tgz#505fb053721a98777b2b175323ea4f090b7d3c1c" - integrity sha512-XXLgAm6LBbaNxaGhMAznXXaxtCWfuv6PIDJ9Alsy9JYTOh+j2jJz+L/162kkfU1j/pTSxK1xGmlwI4pdIMkoag== +"5to6-codemod@^1.0.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/5to6-codemod/-/5to6-codemod-1.8.0.tgz#12f7639ff965efd23de3a5bff4787742a50260cf" + integrity sha512-RUHjjwl9+p1d46USvmoKsmMaHODFUAESE1de/q0qQM+hwzgk/HssTwb1Nc5dbUpKEkJ7duLg6ggMIwScd+TRig== + dependencies: + jscodeshift "^0.6.3" + lodash "^4.17.4" + recast "^0.12.1" + +"@babel/cli@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/cli/-/cli-7.10.4.tgz#ba38ad6d0b4b772a67b106934b7c33d656031896" + integrity sha512-xX99K4V1BzGJdQANK5cwK+EpF1vP9gvqhn+iWvG+TubCjecplW7RSQimJ2jcCvu6fnK5pY6mZMdu6EWTj32QVA== dependencies: commander "^4.0.1" convert-source-map "^1.1.0" @@ -18,6 +27,13 @@ optionalDependencies: chokidar "^2.1.8" +"@babel/code-frame@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.10.4.tgz#168da1a36e90da68ae8d49c0f1b48c7c6249213a" + integrity sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg== + dependencies: + "@babel/highlight" "^7.10.4" + "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" @@ -25,15 +41,37 @@ dependencies: "@babel/highlight" "^7.8.3" -"@babel/compat-data@^7.8.4": - version "7.8.5" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.8.5.tgz#d28ce872778c23551cbb9432fc68d28495b613b9" - integrity sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg== +"@babel/compat-data@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.10.4.tgz#706a6484ee6f910b719b696a9194f8da7d7ac241" + integrity sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw== dependencies: - browserslist "^4.8.5" + browserslist "^4.12.0" invariant "^2.2.4" semver "^5.5.0" +"@babel/core@^7.1.6", "@babel/core@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.10.4.tgz#780e8b83e496152f8dd7df63892b2e052bf1d51d" + integrity sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helpers" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.13" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/core@^7.5.5": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.3.tgz#30b0ebb4dd1585de6923a0b4d179e0b9f5d82941" @@ -55,25 +93,14 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.8.4.tgz#d496799e5c12195b3602d0fddd77294e3e38e80e" - integrity sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA== +"@babel/generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.10.4.tgz#e49eeed9fe114b62fa5b181856a43a5e32f5f243" + integrity sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng== dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" - "@babel/helpers" "^7.8.4" - "@babel/parser" "^7.8.4" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.0" + "@babel/types" "^7.10.4" + jsesc "^2.5.1" lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" source-map "^0.5.0" "@babel/generator@^7.3.4", "@babel/generator@^7.8.3": @@ -86,83 +113,95 @@ lodash "^4.17.13" source-map "^0.5.0" -"@babel/generator@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.8.4.tgz#35bbc74486956fe4251829f9f6c48330e8d0985e" - integrity sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA== +"@babel/helper-annotate-as-pure@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" + integrity sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA== dependencies: - "@babel/types" "^7.8.3" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" + "@babel/types" "^7.10.4" -"@babel/helper-annotate-as-pure@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" - integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== +"@babel/helper-builder-binary-assignment-operator-visitor@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz#bb0b75f31bf98cbf9ff143c1ae578b87274ae1a3" + integrity sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg== dependencies: - "@babel/types" "^7.8.3" + "@babel/helper-explode-assignable-expression" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" - integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== +"@babel/helper-builder-react-jsx-experimental@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.10.4.tgz#d0ffb875184d749c63ffe1f4f65be15143ec322d" + integrity sha512-LyacH/kgQPgLAuaWrvvq1+E7f5bLyT8jXCh7nM67sRsy2cpIGfgWJ+FCnAKQXfY+F0tXUaN6FqLkp4JiCzdK8Q== dependencies: - "@babel/helper-explode-assignable-expression" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helper-builder-react-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.8.3.tgz#dee98d7d79cc1f003d80b76fe01c7f8945665ff6" - integrity sha512-JT8mfnpTkKNCboTqZsQTdGo3l3Ik3l7QIt9hh0O9DYiwVel37VoJpILKM4YFbP2euF32nkQSb+F9cUk9b7DDXQ== +"@babel/helper-builder-react-jsx@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz#8095cddbff858e6fa9c326daee54a2f2732c1d5d" + integrity sha512-5nPcIZ7+KKDxT1427oBivl9V9YTal7qk0diccnh7RrcgrT/pGFOjgGw1dgryyx1GvHEpXVfoDF6Ak3rTiWh8Rg== dependencies: - "@babel/types" "^7.8.3" - esutils "^2.0.0" + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helper-call-delegate@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz#de82619898aa605d409c42be6ffb8d7204579692" - integrity sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A== +"@babel/helper-compilation-targets@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz#804ae8e3f04376607cc791b9d47d540276332bd2" + integrity sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ== dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-compilation-targets@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz#03d7ecd454b7ebe19a254f76617e61770aed2c88" - integrity sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg== - dependencies: - "@babel/compat-data" "^7.8.4" - browserslist "^4.8.5" + "@babel/compat-data" "^7.10.4" + browserslist "^4.12.0" invariant "^2.2.4" levenary "^1.1.1" semver "^5.5.0" -"@babel/helper-create-regexp-features-plugin@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz#c774268c95ec07ee92476a3862b75cc2839beb79" - integrity sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q== - dependencies: - "@babel/helper-regex" "^7.8.3" - regexpu-core "^4.6.0" +"@babel/helper-create-class-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz#2d4015d0136bd314103a70d84a7183e4b344a355" + integrity sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + +"@babel/helper-create-regexp-features-plugin@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" + integrity sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + regexpu-core "^4.7.0" + +"@babel/helper-define-map@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz#f037ad794264f729eda1889f4ee210b870999092" + integrity sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/types" "^7.10.4" + lodash "^4.17.13" -"@babel/helper-define-map@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" - integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== +"@babel/helper-explode-assignable-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz#40a1cd917bff1288f699a94a75b37a1a2dbd8c7c" + integrity sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/types" "^7.8.3" - lodash "^4.17.13" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helper-explode-assignable-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" - integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== +"@babel/helper-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz#d2d3b20c59ad8c47112fa7d2a94bc09d5ef82f1a" + integrity sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ== dependencies: - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" "@babel/helper-function-name@^7.8.3": version "7.8.3" @@ -173,6 +212,13 @@ "@babel/template" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/helper-get-function-arity@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz#98c1cbea0e2332f33f9a4661b8ce1505b2c19ba2" + integrity sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A== + dependencies: + "@babel/types" "^7.10.4" + "@babel/helper-get-function-arity@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" @@ -180,86 +226,106 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-hoist-variables@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" - integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== +"@babel/helper-hoist-variables@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz#d49b001d1d5a68ca5e6604dda01a6297f7c9381e" + integrity sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.4" -"@babel/helper-member-expression-to-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" - integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== +"@babel/helper-member-expression-to-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz#7cd04b57dfcf82fce9aeae7d4e4452fa31b8c7c4" + integrity sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.4" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.8.3": +"@babel/helper-module-imports@^7.0.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== dependencies: "@babel/types" "^7.8.3" -"@babel/helper-module-transforms@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz#d305e35d02bee720fbc2c3c3623aa0c316c01590" - integrity sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q== +"@babel/helper-module-imports@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" + integrity sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-simple-access" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.4" + +"@babel/helper-module-transforms@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz#ca1f01fdb84e48c24d7506bb818c961f1da8805d" + integrity sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q== + dependencies: + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" lodash "^4.17.13" -"@babel/helper-optimise-call-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" - integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== +"@babel/helper-optimise-call-expression@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" + integrity sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg== dependencies: - "@babel/types" "^7.8.3" + "@babel/types" "^7.10.4" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz#2f75a831269d4f677de49986dff59927533cf375" + integrity sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg== -"@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": +"@babel/helper-plugin-utils@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== -"@babel/helper-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" - integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== +"@babel/helper-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.10.4.tgz#59b373daaf3458e5747dece71bbaf45f9676af6d" + integrity sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ== dependencies: lodash "^4.17.13" -"@babel/helper-remap-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" - integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== +"@babel/helper-remap-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz#fce8bea4e9690bbe923056ded21e54b4e8b68ed5" + integrity sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg== dependencies: - "@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-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helper-replace-supers@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz#91192d25f6abbcd41da8a989d4492574fb1530bc" - integrity sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA== +"@babel/helper-replace-supers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" + integrity sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A== dependencies: - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-member-expression-to-functions" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" -"@babel/helper-simple-access@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" - integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== +"@babel/helper-simple-access@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" + integrity sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw== dependencies: - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/template" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helper-split-export-declaration@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz#2c70576eaa3b5609b24cb99db2888cc3fc4251d1" + integrity sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg== + dependencies: + "@babel/types" "^7.10.4" "@babel/helper-split-export-declaration@^7.8.3": version "7.8.3" @@ -268,15 +334,29 @@ dependencies: "@babel/types" "^7.8.3" -"@babel/helper-wrap-function@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" - integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== +"@babel/helper-validator-identifier@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" + integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== + +"@babel/helper-wrap-function@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" + integrity sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" + "@babel/helper-function-name" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" + +"@babel/helpers@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.10.4.tgz#2abeb0d721aff7c0a97376b9e1f6f65d7a475044" + integrity sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.10.4" + "@babel/types" "^7.10.4" "@babel/helpers@^7.8.3": version "7.8.3" @@ -287,14 +367,14 @@ "@babel/traverse" "^7.8.3" "@babel/types" "^7.8.3" -"@babel/helpers@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.8.4.tgz#754eb3ee727c165e0a240d6c207de7c455f36f73" - integrity sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w== +"@babel/highlight@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" + integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.4" - "@babel/types" "^7.8.3" + "@babel/helper-validator-identifier" "^7.10.4" + chalk "^2.0.0" + js-tokens "^4.0.0" "@babel/highlight@^7.8.3": version "7.8.3" @@ -305,80 +385,105 @@ esutils "^2.0.2" js-tokens "^4.0.0" +"@babel/parser@^7.1.6", "@babel/parser@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.10.4.tgz#9eedf27e1998d87739fb5028a5120557c06a1a64" + integrity sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA== + "@babel/parser@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.3.tgz#790874091d2001c9be6ec426c2eed47bc7679081" integrity sha512-/V72F4Yp/qmHaTALizEm9Gf2eQHV3QyTL3K0cNfijwnMnb1L+LDlAubb/ZnSdGAVzVSWakujHYs1I26x66sMeQ== -"@babel/parser@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.8.4.tgz#d1dbe64691d60358a974295fa53da074dd2ce8e8" - integrity sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw== - -"@babel/plugin-proposal-async-generator-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" - integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== +"@babel/plugin-proposal-async-generator-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz#4b65abb3d9bacc6c657aaa413e56696f9f170fc6" + integrity sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" - integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== +"@babel/plugin-proposal-class-properties@^7.1.0", "@babel/plugin-proposal-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" + integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-dynamic-import@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz#ba57a26cb98b37741e9d5bca1b8b0ddf8291f17e" + integrity sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" -"@babel/plugin-proposal-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" - integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== +"@babel/plugin-proposal-json-strings@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" + integrity sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.0" -"@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" - integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== +"@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" + integrity sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" -"@babel/plugin-proposal-object-rest-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz#eb5ae366118ddca67bed583b53d7554cad9951bb" - integrity sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA== +"@babel/plugin-proposal-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" + integrity sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.0.0", "@babel/plugin-proposal-object-rest-spread@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz#50129ac216b9a6a55b3853fdd923e74bf553a4c0" + integrity sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.10.4" -"@babel/plugin-proposal-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" - integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== +"@babel/plugin-proposal-optional-catch-binding@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" + integrity sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" -"@babel/plugin-proposal-optional-chaining@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz#ae10b3214cb25f7adb1f3bc87ba42ca10b7e2543" - integrity sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg== +"@babel/plugin-proposal-optional-chaining@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz#750f1255e930a1f82d8cdde45031f81a0d0adff7" + integrity sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-chaining" "^7.8.0" -"@babel/plugin-proposal-unicode-property-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz#b646c3adea5f98800c9ab45105ac34d06cd4a47f" - integrity sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ== +"@babel/plugin-proposal-private-methods@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" + integrity sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" + integrity sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-async-generators@^7.8.0": version "7.8.4" @@ -387,6 +492,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-class-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz#6644e6a0baa55a61f9e3231f6c9eeb6ee46c124c" + integrity sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" @@ -394,6 +506,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-flow@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.10.4.tgz#53351dd7ae01995e567d04ce42af1a6e0ba846a6" + integrity sha512-yxQsX1dJixF4qEEdzVbst3SZQ58Nrooz8NV9Z9GL4byTE25BvJgl5lf0RECUf0fh28rZBb/RYTWn/eeKwCMrZQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" @@ -401,12 +520,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" - integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== +"@babel/plugin-syntax-jsx@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.10.4.tgz#39abaae3cbf710c4373d8429484e6ba21340166c" + integrity sha512-KCg9mio9jwiARCB7WAcQ7Y1q+qicILjoK8LP/VkPkEKaf5dkaZZK1EcTe91a3JJlZ3qy6L5s9X52boEYi8DM9g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": version "7.8.3" @@ -415,6 +534,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread@^7.8.0": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" @@ -436,363 +562,474 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" - integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== +"@babel/plugin-syntax-top-level-await@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz#4bbeb8917b54fcf768364e0a81f560e33a3ef57d" + integrity sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-arrow-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" - integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== +"@babel/plugin-syntax-typescript@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.10.4.tgz#2f55e770d3501e83af217d782cb7517d7bb34d25" + integrity sha512-oSAEz1YkBCAKr5Yiq8/BNtvSAPwkp/IyUnwZogd8p+F0RuYQQrLeRUzIQhueQTTBy/F+a40uS7OFKxnkRvmvFQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" - integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== +"@babel/plugin-transform-arrow-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz#e22960d77e697c74f41c501d44d73dbf8a6a64cd" + integrity sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA== dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-block-scoped-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" - integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== +"@babel/plugin-transform-async-to-generator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" + integrity sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.10.4" -"@babel/plugin-transform-block-scoping@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" - integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== +"@babel/plugin-transform-block-scoped-functions@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" + integrity sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - lodash "^4.17.13" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-classes@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz#46fd7a9d2bb9ea89ce88720477979fe0d71b21b8" - integrity sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w== +"@babel/plugin-transform-block-scoping@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz#a670d1364bb5019a621b9ea2001482876d734787" + integrity sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + lodash "^4.17.13" + +"@babel/plugin-transform-classes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" + integrity sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" - integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== +"@babel/plugin-transform-computed-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" + integrity sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-destructuring@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz#20ddfbd9e4676906b1056ee60af88590cc7aaa0b" - integrity sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ== +"@babel/plugin-transform-destructuring@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" + integrity sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-dotall-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" - integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== +"@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" + integrity sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-duplicate-keys@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" - integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== +"@babel/plugin-transform-duplicate-keys@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" + integrity sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-exponentiation-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" - integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== +"@babel/plugin-transform-exponentiation-operator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" + integrity sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-for-of@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz#6fe8eae5d6875086ee185dd0b098a8513783b47d" - integrity sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A== +"@babel/plugin-transform-flow-strip-types@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788" + integrity sha512-XTadyuqNst88UWBTdLjM+wEY7BFnY2sYtPyAidfC7M/QaZnSuIZpMvLxqGT7phAcnGyWh/XQFLKcGf04CnvxSQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-flow" "^7.10.4" -"@babel/plugin-transform-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" - integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== +"@babel/plugin-transform-for-of@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz#c08892e8819d3a5db29031b115af511dbbfebae9" + integrity sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ== dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" - integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== +"@babel/plugin-transform-function-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" + integrity sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" - integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== +"@babel/plugin-transform-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" + integrity sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-amd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz#65606d44616b50225e76f5578f33c568a0b876a5" - integrity sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ== +"@babel/plugin-transform-member-expression-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" + integrity sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw== dependencies: - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-modules-commonjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz#df251706ec331bd058a34bdd72613915f82928a5" - integrity sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg== +"@babel/plugin-transform-modules-amd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz#cb407c68b862e4c1d13a2fc738c7ec5ed75fc520" + integrity sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA== dependencies: - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-simple-access" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-systemjs@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz#d8bbf222c1dbe3661f440f2f00c16e9bb7d0d420" - integrity sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg== +"@babel/plugin-transform-modules-commonjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" + integrity sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w== dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-modules-umd@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz#592d578ce06c52f5b98b02f913d653ffe972661a" - integrity sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw== +"@babel/plugin-transform-modules-systemjs@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz#8f576afd943ac2f789b35ded0a6312f929c633f9" + integrity sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ== dependencies: - "@babel/helper-module-transforms" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" - integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== +"@babel/plugin-transform-modules-umd@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" + integrity sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" + "@babel/helper-module-transforms" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-new-target@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" - integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== +"@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" + integrity sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.10.4" -"@babel/plugin-transform-object-super@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" - integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== +"@babel/plugin-transform-new-target@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" + integrity sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-parameters@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz#1d5155de0b65db0ccf9971165745d3bb990d77d3" - integrity sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA== +"@babel/plugin-transform-object-super@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" + integrity sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ== dependencies: - "@babel/helper-call-delegate" "^7.8.3" - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.10.4" -"@babel/plugin-transform-property-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" - integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== +"@babel/plugin-transform-parameters@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz#7b4d137c87ea7adc2a0f3ebf53266871daa6fced" + integrity sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-get-function-arity" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-display-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" - integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A== +"@babel/plugin-transform-property-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" + integrity sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx-self@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.8.3.tgz#c4f178b2aa588ecfa8d077ea80d4194ee77ed702" - integrity sha512-01OT7s5oa0XTLf2I8XGsL8+KqV9lx3EZV+jxn/L2LQ97CGKila2YMroTkCEIE0HV/FF7CMSRsIAybopdN9NTdg== +"@babel/plugin-transform-react-display-name@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.10.4.tgz#b5795f4e3e3140419c3611b7a2a3832b9aef328d" + integrity sha512-Zd4X54Mu9SBfPGnEcaGcOrVAYOtjT2on8QZkLKEq1S/tHexG39d9XXGZv19VfRrDjPJzFmPfTAqOQS1pfFOujw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-jsx-source@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.8.3.tgz#951e75a8af47f9f120db731be095d2b2c34920e0" - integrity sha512-PLMgdMGuVDtRS/SzjNEQYUT8f4z1xb2BAT54vM1X5efkVuYBf5WyGUMbpmARcfq3NaglIwz08UVQK4HHHbC6ag== +"@babel/plugin-transform-react-jsx-development@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.10.4.tgz#6ec90f244394604623880e15ebc3c34c356258ba" + integrity sha512-RM3ZAd1sU1iQ7rI2dhrZRZGv0aqzNQMbkIUCS1txYpi9wHQ2ZHNjo5TwX+UD6pvFW4AbWqLVYvKy5qJSAyRGjQ== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/helper-builder-react-jsx-experimental" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.10.4" -"@babel/plugin-transform-react-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.8.3.tgz#4220349c0390fdefa505365f68c103562ab2fc4a" - integrity sha512-r0h+mUiyL595ikykci+fbwm9YzmuOrUBi0b+FDIKmi3fPQyFokWVEMJnRWHJPPQEjyFJyna9WZC6Viv6UHSv1g== +"@babel/plugin-transform-react-jsx-self@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz#cd301a5fed8988c182ed0b9d55e9bd6db0bd9369" + integrity sha512-yOvxY2pDiVJi0axdTWHSMi5T0DILN+H+SaeJeACHKjQLezEzhLx9nEF9xgpBLPtkZsks9cnb5P9iBEi21En3gg== dependencies: - "@babel/helper-builder-react-jsx" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.10.4" -"@babel/plugin-transform-regenerator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz#b31031e8059c07495bf23614c97f3d9698bc6ec8" - integrity sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA== +"@babel/plugin-transform-react-jsx-source@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.4.tgz#86baf0fcccfe58084e06446a80858e1deae8f291" + integrity sha512-FTK3eQFrPv2aveerUSazFmGygqIdTtvskG50SnGnbEUnRPcGx2ylBhdFIzoVS1ty44hEgcPoCAyw5r3VDEq+Ug== dependencies: - regenerator-transform "^0.14.0" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.10.4" -"@babel/plugin-transform-reserved-words@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" - integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" +"@babel/plugin-transform-react-jsx@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz#673c9f913948764a4421683b2bef2936968fddf2" + integrity sha512-L+MfRhWjX0eI7Js093MM6MacKU4M6dnCRa/QPDwYMxjljzSCzzlzKzj9Pk4P3OtrPcxr2N3znR419nr3Xw+65A== + dependencies: + "@babel/helper-builder-react-jsx" "^7.10.4" + "@babel/helper-builder-react-jsx-experimental" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.10.4" + +"@babel/plugin-transform-react-pure-annotations@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz#3eefbb73db94afbc075f097523e445354a1c6501" + integrity sha512-+njZkqcOuS8RaPakrnR9KvxjoG1ASJWpoIv/doyWngId88JoFlPlISenGXjrVacZUIALGUr6eodRs1vmPnF23A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-regenerator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" + integrity sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw== + dependencies: + regenerator-transform "^0.14.2" + +"@babel/plugin-transform-reserved-words@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" + integrity sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-shorthand-properties@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" + integrity sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-spread@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz#4e2c85ea0d6abaee1b24dcfbbae426fe8d674cff" + integrity sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-sticky-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" + integrity sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + +"@babel/plugin-transform-template-literals@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz#e6375407b30fcb7fcfdbba3bb98ef3e9d36df7bc" + integrity sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typeof-symbol@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" + integrity sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-typescript@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.10.4.tgz#8b01cb8d77f795422277cc3fcf45af72bc68ba78" + integrity sha512-3WpXIKDJl/MHoAN0fNkSr7iHdUMHZoppXjf2HJ9/ed5Xht5wNIsXllJXdityKOxeA3Z8heYRb1D3p2H5rfCdPw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-typescript" "^7.10.4" + +"@babel/plugin-transform-unicode-escapes@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz#feae523391c7651ddac115dae0a9d06857892007" + integrity sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-unicode-regex@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" + integrity sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/preset-env@^7.1.6", "@babel/preset-env@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.10.4.tgz#fbf57f9a803afd97f4f32e4f798bb62e4b2bef5f" + integrity sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw== + dependencies: + "@babel/compat-data" "^7.10.4" + "@babel/helper-compilation-targets" "^7.10.4" + "@babel/helper-module-imports" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-async-generator-functions" "^7.10.4" + "@babel/plugin-proposal-class-properties" "^7.10.4" + "@babel/plugin-proposal-dynamic-import" "^7.10.4" + "@babel/plugin-proposal-json-strings" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.10.4" + "@babel/plugin-proposal-numeric-separator" "^7.10.4" + "@babel/plugin-proposal-object-rest-spread" "^7.10.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.10.4" + "@babel/plugin-proposal-optional-chaining" "^7.10.4" + "@babel/plugin-proposal-private-methods" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex" "^7.10.4" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.10.4" + "@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.10.4" + "@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.10.4" + "@babel/plugin-transform-arrow-functions" "^7.10.4" + "@babel/plugin-transform-async-to-generator" "^7.10.4" + "@babel/plugin-transform-block-scoped-functions" "^7.10.4" + "@babel/plugin-transform-block-scoping" "^7.10.4" + "@babel/plugin-transform-classes" "^7.10.4" + "@babel/plugin-transform-computed-properties" "^7.10.4" + "@babel/plugin-transform-destructuring" "^7.10.4" + "@babel/plugin-transform-dotall-regex" "^7.10.4" + "@babel/plugin-transform-duplicate-keys" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator" "^7.10.4" + "@babel/plugin-transform-for-of" "^7.10.4" + "@babel/plugin-transform-function-name" "^7.10.4" + "@babel/plugin-transform-literals" "^7.10.4" + "@babel/plugin-transform-member-expression-literals" "^7.10.4" + "@babel/plugin-transform-modules-amd" "^7.10.4" + "@babel/plugin-transform-modules-commonjs" "^7.10.4" + "@babel/plugin-transform-modules-systemjs" "^7.10.4" + "@babel/plugin-transform-modules-umd" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.10.4" + "@babel/plugin-transform-new-target" "^7.10.4" + "@babel/plugin-transform-object-super" "^7.10.4" + "@babel/plugin-transform-parameters" "^7.10.4" + "@babel/plugin-transform-property-literals" "^7.10.4" + "@babel/plugin-transform-regenerator" "^7.10.4" + "@babel/plugin-transform-reserved-words" "^7.10.4" + "@babel/plugin-transform-shorthand-properties" "^7.10.4" + "@babel/plugin-transform-spread" "^7.10.4" + "@babel/plugin-transform-sticky-regex" "^7.10.4" + "@babel/plugin-transform-template-literals" "^7.10.4" + "@babel/plugin-transform-typeof-symbol" "^7.10.4" + "@babel/plugin-transform-unicode-escapes" "^7.10.4" + "@babel/plugin-transform-unicode-regex" "^7.10.4" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.10.4" + browserslist "^4.12.0" + core-js-compat "^3.6.2" + invariant "^2.2.2" + levenary "^1.1.1" + semver "^5.5.0" -"@babel/plugin-transform-shorthand-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" - integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== +"@babel/preset-flow@^7.0.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.10.4.tgz#e0d9c72f8cb02d1633f6a5b7b16763aa2edf659f" + integrity sha512-XI6l1CptQCOBv+ZKYwynyswhtOKwpZZp5n0LG1QKCo8erRhqjoQV6nvx61Eg30JHpysWQSBwA2AWRU3pBbSY5g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-flow-strip-types" "^7.10.4" -"@babel/plugin-transform-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" - integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== +"@babel/preset-modules@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" + integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + "@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/plugin-transform-sticky-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" - integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== +"@babel/preset-react@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.10.4.tgz#92e8a66d816f9911d11d4cc935be67adfc82dbcf" + integrity sha512-BrHp4TgOIy4M19JAfO1LhycVXOPWdDbTRep7eVyatf174Hff+6Uk53sDyajqZPu8W1qXRBiYOfIamek6jA7YVw== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-regex" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.10.4" + "@babel/plugin-transform-react-jsx" "^7.10.4" + "@babel/plugin-transform-react-jsx-development" "^7.10.4" + "@babel/plugin-transform-react-jsx-self" "^7.10.4" + "@babel/plugin-transform-react-jsx-source" "^7.10.4" + "@babel/plugin-transform-react-pure-annotations" "^7.10.4" -"@babel/plugin-transform-template-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" - integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== +"@babel/preset-typescript@^7.1.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.10.4.tgz#7d5d052e52a682480d6e2cc5aa31be61c8c25e36" + integrity sha512-SdYnvGPv+bLlwkF2VkJnaX/ni1sMNetcGI1+nThF1gyv6Ph8Qucc4ZZAjM5yZcE/AKRXIOTZz7eSRDWOEjPyRQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-typescript" "^7.10.4" -"@babel/plugin-transform-typeof-symbol@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" - integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== +"@babel/register@^7.0.0": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.10.4.tgz#53004ba8b04c4af3cbd84508e03ad150669746e4" + integrity sha512-whHmgGiWNVyTVnYTSawtDWhaeYsc+noeU8Rmi+MPnbGhDYmr5QpEDMrQcIA07D2RUv0BlThPcN89XcHCqq/O4g== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" + find-cache-dir "^2.0.0" + lodash "^4.17.13" + make-dir "^2.1.0" + pirates "^4.0.0" + source-map-support "^0.5.16" -"@babel/plugin-transform-unicode-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" - integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== +"@babel/runtime@^7.8.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.10.4.tgz#a6724f1a6b8d2f6ea5236dbfe58c7d7ea9c5eb99" + integrity sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" + regenerator-runtime "^0.13.4" -"@babel/preset-env@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.8.4.tgz#9dac6df5f423015d3d49b6e9e5fa3413e4a72c4e" - integrity sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w== - dependencies: - "@babel/compat-data" "^7.8.4" - "@babel/helper-compilation-targets" "^7.8.4" - "@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-object-rest-spread" "^7.8.3" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.8.3" - "@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-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.8.3" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.8.3" - "@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.8.4" - "@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.8.3" - "@babel/plugin-transform-modules-commonjs" "^7.8.3" - "@babel/plugin-transform-modules-systemjs" "^7.8.3" - "@babel/plugin-transform-modules-umd" "^7.8.3" - "@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.8.4" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.3" - "@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/types" "^7.8.3" - browserslist "^4.8.5" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/preset-react@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.8.3.tgz#23dc63f1b5b0751283e04252e78cf1d6589273d2" - integrity sha512-9hx0CwZg92jGb7iHYQVgi0tOEHP/kM60CtWJQnmbATSPIQQ2xYzfoCI3EdqAhFBeeJwYMdWQuDUHMsuDbH9hyQ== +"@babel/template@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.10.4.tgz#3251996c4200ebc71d1a8fc405fba940f36ba278" + integrity sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA== dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-react-display-name" "^7.8.3" - "@babel/plugin-transform-react-jsx" "^7.8.3" - "@babel/plugin-transform-react-jsx-self" "^7.8.3" - "@babel/plugin-transform-react-jsx-source" "^7.8.3" + "@babel/code-frame" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" "@babel/template@^7.2.2", "@babel/template@^7.8.3": version "7.8.3" @@ -803,6 +1040,21 @@ "@babel/parser" "^7.8.3" "@babel/types" "^7.8.3" +"@babel/traverse@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.10.4.tgz#e642e5395a3b09cc95c8e74a27432b484b697818" + integrity sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/parser" "^7.10.4" + "@babel/types" "^7.10.4" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.13" + "@babel/traverse@^7.6.2", "@babel/traverse@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.3.tgz#a826215b011c9b4f73f3a893afbc05151358bf9a" @@ -818,20 +1070,14 @@ globals "^11.1.0" lodash "^4.17.13" -"@babel/traverse@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.8.4.tgz#f0845822365f9d5b0e312ed3959d3f827f869e3c" - integrity sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg== +"@babel/types@^7.10.4", "@babel/types@^7.4.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.10.4.tgz#369517188352e18219981efd156bfdb199fff1ee" + integrity sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg== dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.8.4" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.8.4" - "@babel/types" "^7.8.3" - debug "^4.1.0" - globals "^11.1.0" + "@babel/helper-validator-identifier" "^7.10.4" lodash "^4.17.13" + to-fast-properties "^2.0.0" "@babel/types@^7.3.4", "@babel/types@^7.8.3": version "7.8.3" @@ -842,6 +1088,11 @@ lodash "^4.17.13" to-fast-properties "^2.0.0" +"@types/anymatch@*": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@types/anymatch/-/anymatch-1.3.1.tgz#336badc1beecb9dacc38bea2cf32adf627a8421a" + integrity sha512-/+CRPXpBDpo2RK9C68N3b2cOvO0Cf5B9aPijHsoDQTHivnGSObdOF2BRQOYjojWTDy6nQvMjmqRXIxH55VjxxA== + "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" @@ -861,6 +1112,16 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/html-minifier-terser@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/html-minifier-terser/-/html-minifier-terser-5.1.0.tgz#551a4589b6ee2cc9c1dff08056128aec29b94880" + integrity sha512-iYCgjm1dGPRuo12+BStjd1HiVQqhlRhWDOQigNxn023HcjnhsiFz9pc6CzJj4HwDCSQca9bxTL4PxJDbkdm3PA== + +"@types/json-schema@^7.0.4": + version "7.0.5" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" + integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== + "@types/minimatch@*": version "3.0.3" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" @@ -871,150 +1132,187 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-13.1.7.tgz#db51d28b8dfacfe4fb2d0da88f5eb0a2eca00675" integrity sha512-HU0q9GXazqiKwviVxg9SI/+t/nAsGkvLDkIdxz+ObejG2nX6Si00TeLqHMoS+a/1tjH7a8YpKVQwtgHuMQsldg== -"@webassemblyjs/ast@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.8.5.tgz#51b1c5fe6576a34953bf4b253df9f0d490d9e359" - integrity sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ== +"@types/source-list-map@*": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@types/source-list-map/-/source-list-map-0.1.2.tgz#0078836063ffaf17412349bba364087e0ac02ec9" + integrity sha512-K5K+yml8LTo9bWJI/rECfIPrGgxdpeNbj+d53lwN4QjW1MCwlkhUms+gtdzigTeUyBr09+u8BwOIY3MXvHdcsA== + +"@types/tapable@*", "@types/tapable@^1.0.5": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@types/tapable/-/tapable-1.0.6.tgz#a9ca4b70a18b270ccb2bc0aaafefd1d486b7ea74" + integrity sha512-W+bw9ds02rAQaMvaLYxAbJ6cvguW/iJXNT6lTssS1ps6QdrMKttqEAMEG/b5CR8TZl3/L7/lH0ZV5nNR1LXikA== + +"@types/uglify-js@*": + version "3.9.3" + resolved "https://registry.yarnpkg.com/@types/uglify-js/-/uglify-js-3.9.3.tgz#d94ed608e295bc5424c9600e6b8565407b6b4b6b" + integrity sha512-KswB5C7Kwduwjj04Ykz+AjvPcfgv/37Za24O2EDzYNbwyzOo8+ydtvzUfZ5UMguiVu29Gx44l1A6VsPPcmYu9w== dependencies: - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/helper-wasm-bytecode" "1.8.5" - "@webassemblyjs/wast-parser" "1.8.5" + source-map "^0.6.1" -"@webassemblyjs/floating-point-hex-parser@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz#1ba926a2923613edce496fd5b02e8ce8a5f49721" - integrity sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ== +"@types/webpack-sources@*": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@types/webpack-sources/-/webpack-sources-1.4.0.tgz#e58f1f05f87d39a5c64cf85705bdbdbb94d4d57e" + integrity sha512-c88dKrpSle9BtTqR6ifdaxu1Lvjsl3C5OsfvuUbUwdXymshv1TkufUAXBajCCUM/f/TmnkZC/Esb03MinzSiXQ== + dependencies: + "@types/node" "*" + "@types/source-list-map" "*" + source-map "^0.7.3" -"@webassemblyjs/helper-api-error@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz#c49dad22f645227c5edb610bdb9697f1aab721f7" - integrity sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA== +"@types/webpack@^4.41.8": + version "4.41.21" + resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.41.21.tgz#cc685b332c33f153bb2f5fc1fa3ac8adeb592dee" + integrity sha512-2j9WVnNrr/8PLAB5csW44xzQSJwS26aOnICsP3pSGCEdsu6KYtfQ6QJsVUKHWRnm1bL7HziJsfh5fHqth87yKA== + dependencies: + "@types/anymatch" "*" + "@types/node" "*" + "@types/tapable" "*" + "@types/uglify-js" "*" + "@types/webpack-sources" "*" + source-map "^0.6.0" -"@webassemblyjs/helper-buffer@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz#fea93e429863dd5e4338555f42292385a653f204" - integrity sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q== +"@webassemblyjs/ast@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.9.0.tgz#bd850604b4042459a5a41cd7d338cbed695ed964" + integrity sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA== + dependencies: + "@webassemblyjs/helper-module-context" "1.9.0" + "@webassemblyjs/helper-wasm-bytecode" "1.9.0" + "@webassemblyjs/wast-parser" "1.9.0" -"@webassemblyjs/helper-code-frame@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz#9a740ff48e3faa3022b1dff54423df9aa293c25e" - integrity sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ== +"@webassemblyjs/floating-point-hex-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz#3c3d3b271bddfc84deb00f71344438311d52ffb4" + integrity sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA== + +"@webassemblyjs/helper-api-error@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz#203f676e333b96c9da2eeab3ccef33c45928b6a2" + integrity sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw== + +"@webassemblyjs/helper-buffer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz#a1442d269c5feb23fcbc9ef759dac3547f29de00" + integrity sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA== + +"@webassemblyjs/helper-code-frame@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz#647f8892cd2043a82ac0c8c5e75c36f1d9159f27" + integrity sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA== dependencies: - "@webassemblyjs/wast-printer" "1.8.5" + "@webassemblyjs/wast-printer" "1.9.0" -"@webassemblyjs/helper-fsm@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz#ba0b7d3b3f7e4733da6059c9332275d860702452" - integrity sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow== +"@webassemblyjs/helper-fsm@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz#c05256b71244214671f4b08ec108ad63b70eddb8" + integrity sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw== -"@webassemblyjs/helper-module-context@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz#def4b9927b0101dc8cbbd8d1edb5b7b9c82eb245" - integrity sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g== +"@webassemblyjs/helper-module-context@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz#25d8884b76839871a08a6c6f806c3979ef712f07" + integrity sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g== dependencies: - "@webassemblyjs/ast" "1.8.5" - mamacro "^0.0.3" + "@webassemblyjs/ast" "1.9.0" -"@webassemblyjs/helper-wasm-bytecode@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz#537a750eddf5c1e932f3744206551c91c1b93e61" - integrity sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ== +"@webassemblyjs/helper-wasm-bytecode@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz#4fed8beac9b8c14f8c58b70d124d549dd1fe5790" + integrity sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw== -"@webassemblyjs/helper-wasm-section@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz#74ca6a6bcbe19e50a3b6b462847e69503e6bfcbf" - integrity sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA== +"@webassemblyjs/helper-wasm-section@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz#5a4138d5a6292ba18b04c5ae49717e4167965346" + integrity sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw== dependencies: - "@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@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz#712329dbef240f36bf57bd2f7b8fb9bf4154421e" - integrity sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g== +"@webassemblyjs/ieee754@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz#15c7a0fbaae83fb26143bbacf6d6df1702ad39e4" + integrity sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg== dependencies: "@xtuc/ieee754" "^1.2.0" -"@webassemblyjs/leb128@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.8.5.tgz#044edeb34ea679f3e04cd4fd9824d5e35767ae10" - integrity sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A== +"@webassemblyjs/leb128@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz#f19ca0b76a6dc55623a09cffa769e838fa1e1c95" + integrity sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw== dependencies: "@xtuc/long" "4.2.2" -"@webassemblyjs/utf8@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.8.5.tgz#a8bf3b5d8ffe986c7c1e373ccbdc2a0915f0cedc" - integrity sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw== +"@webassemblyjs/utf8@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz#04d33b636f78e6a6813227e82402f7637b6229ab" + integrity sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w== -"@webassemblyjs/wasm-edit@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz#962da12aa5acc1c131c81c4232991c82ce56e01a" - integrity sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q== - dependencies: - "@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/wasm-gen@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz#54840766c2c1002eb64ed1abe720aded714f98bc" - integrity sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg== +"@webassemblyjs/wasm-edit@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz#3fe6d79d3f0f922183aa86002c42dd256cfee9cf" + integrity sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw== + dependencies: + "@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@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz#50bc70ec68ded8e2763b01a1418bf43491a7a49c" + integrity sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA== dependencies: - "@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@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz#b24d9f6ba50394af1349f510afa8ffcb8a63d264" - integrity sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q== +"@webassemblyjs/wasm-opt@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz#2211181e5b31326443cc8112eb9f0b9028721a61" + integrity sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A== dependencies: - "@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@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz#21576f0ec88b91427357b8536383668ef7c66b8d" - integrity sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw== +"@webassemblyjs/wasm-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz#9d48e44826df4a6598294aa6c87469d642fff65e" + integrity sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA== dependencies: - "@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@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz#e10eecd542d0e7bd394f6827c49f3df6d4eefb8c" - integrity sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg== - dependencies: - "@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/wast-parser@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz#3031115d79ac5bd261556cecc3fa90a3ef451914" + integrity sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw== + dependencies: + "@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@1.8.5": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz#114bbc481fd10ca0e23b3560fa812748b0bae5bc" - integrity sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg== +"@webassemblyjs/wast-printer@1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz#4935d54c85fef637b00ce9f52377451d00d47899" + integrity sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA== dependencies: - "@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" "@xtuc/ieee754@^1.2.0": @@ -1035,7 +1333,12 @@ accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" -acorn@^6.2.1: +acorn@^5.2.1: + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== + +acorn@^6.4.1: version "6.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== @@ -1065,11 +1368,42 @@ ajv@^6.1.0, ajv@^6.10.2: resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.10.2.tgz#d3cea04d6b017b2894ad69040fec8b623eb4bd52" integrity sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw== dependencies: - fast-deep-equal "^2.0.1" + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^6.12.2: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.4.1" uri-js "^4.2.2" +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +alter@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/alter/-/alter-0.2.0.tgz#c7588808617572034aae62480af26b1d4d1cb3cd" + integrity sha1-x1iICGF1cgNKrmJICvJrHU0cs80= + dependencies: + stable "~0.1.3" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= + ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" @@ -1085,11 +1419,6 @@ ansi-regex@^2.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - ansi-regex@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" @@ -1115,6 +1444,11 @@ ansi-styles@^4.1.0: "@types/color-name" "^1.1.1" color-convert "^2.0.1" +ansi-styles@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" + integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= + anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" @@ -1123,6 +1457,14 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" +anymatch@~3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" + integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -1135,12 +1477,19 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= + dependencies: + arr-flatten "^1.0.1" + arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= -arr-flatten@^1.1.0: +arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== @@ -1172,6 +1521,11 @@ array-uniq@^1.0.1: resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= + array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" @@ -1199,10 +1553,40 @@ assign-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= -astroturf@^0.10.2: - version "0.10.2" - resolved "https://registry.yarnpkg.com/astroturf/-/astroturf-0.10.2.tgz#881d2b625a06b1c21a0e7c6708b39c53cc43e055" - integrity sha512-vQVJ1YLW4u0RjO/Ak65HXhEmwmWZW6iJvpqz1El9a5C5ZAmHg6SjUyJUlOYDdGH7L4JnJYziTlwGCJm+IWiVAg== +ast-traverse@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ast-traverse/-/ast-traverse-0.1.1.tgz#69cf2b8386f19dcda1bb1e05d68fe359d8897de6" + integrity sha1-ac8rg4bxnc2hux4F1o/jWdiJfeY= + +ast-types@0.10.1: + version "0.10.1" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.10.1.tgz#f52fca9715579a14f841d67d7f8d25432ab6a3dd" + integrity sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ== + +ast-types@0.11.7: + version "0.11.7" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.7.tgz#f318bf44e339db6a320be0009ded64ec1471f46c" + integrity sha512-2mP3TwtkY/aTv5X3ZsMpNAbOnyoC/aMJwJSoaELPkHId0nSQgFcnU4dRW3isxiz7+zBexk0ym3WNVjMiQBnJSw== + +ast-types@0.8.12: + version "0.8.12" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.12.tgz#a0d90e4351bb887716c83fd637ebf818af4adfcc" + integrity sha1-oNkOQ1G7iHcWyD/WN+v4GK9K38w= + +ast-types@0.8.15: + version "0.8.15" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.8.15.tgz#8eef0827f04dff0ec8857ba925abe3fea6194e52" + integrity sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI= + +ast-types@0.9.6: + version "0.9.6" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" + integrity sha1-ECyenpAF0+fjgpvwxPok7oYu6bk= + +astroturf@^0.10.4: + version "0.10.4" + resolved "https://registry.yarnpkg.com/astroturf/-/astroturf-0.10.4.tgz#52cf43609aa4e7a9c5ff768c206bc0a047b41608" + integrity sha512-QjwXisOoPNP/AdWzw+nJMiux2bp6ETUWxzDrla/J6GrXWa3EdY2AEV/2rPYZ0+Xtum8NPG5umC3P2RDC5Kzj+w== dependencies: "@babel/code-frame" "^7.5.5" "@babel/core" "^7.5.5" @@ -1211,14 +1595,15 @@ astroturf@^0.10.2: "@babel/template" "^7.2.2" "@babel/traverse" "^7.6.2" "@babel/types" "^7.3.4" - chalk "^3.0.0" + chalk "^4.0.0" common-tags "^1.8.0" css-loader "^3.0.0" errno "^0.1.7" fast-levenshtein "^2.0.6" - fs-extra "^8.0.0" - loader-utils "^1.2.3" + fs-extra "^9.0.0" + loader-utils "^2.0.0" lodash "^4.17.15" + magic-string "^0.25.7" memory-fs "^0.5.0" postcss-atroot "^0.1.3" postcss-loader "^3.0.0" @@ -1235,6 +1620,11 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== +async@^1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= + async@^2.4.1, async@^2.6.1, async@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" @@ -1242,23 +1632,28 @@ async@^2.4.1, async@^2.6.1, async@^2.6.2: dependencies: lodash "^4.17.14" +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + atob@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== -autoprefixer@^9.7.4: - version "9.7.4" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.4.tgz#f8bf3e06707d047f0641d87aee8cfb174b2a5378" - integrity sha512-g0Ya30YrMBAEZk60lp+qfX5YQllG+S5W3GYCFvyHTvhOki0AEQJLPEcIuGRsqVwLi8FvXPVtwTGhfr38hVpm0g== +autoprefixer@^9.8.4: + version "9.8.4" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.8.4.tgz#736f1012673a70fa3464671d78d41abd54512863" + integrity sha512-84aYfXlpUe45lvmS+HoAWKCkirI/sw4JK0/bTeeqgHYco3dcsOn0NqdejISjptsYwNji/21dnkDri9PsYKk89A== dependencies: - browserslist "^4.8.3" - caniuse-lite "^1.0.30001020" - chalk "^2.4.2" + browserslist "^4.12.0" + caniuse-lite "^1.0.30001087" + colorette "^1.2.0" normalize-range "^0.1.2" num2fraction "^1.2.2" - postcss "^7.0.26" - postcss-value-parser "^4.0.2" + postcss "^7.0.32" + postcss-value-parser "^4.1.0" babel-code-frame@^6.26.0: version "6.26.0" @@ -1269,6 +1664,111 @@ babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" +babel-core@^5: + version "5.8.38" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-5.8.38.tgz#1fcaee79d7e61b750b00b8e54f6dfc9d0af86558" + integrity sha1-H8ruedfmG3ULALjlT238nQr4ZVg= + dependencies: + babel-plugin-constant-folding "^1.0.1" + babel-plugin-dead-code-elimination "^1.0.2" + babel-plugin-eval "^1.0.1" + babel-plugin-inline-environment-variables "^1.0.1" + babel-plugin-jscript "^1.0.4" + babel-plugin-member-expression-literals "^1.0.1" + babel-plugin-property-literals "^1.0.1" + babel-plugin-proto-to-assign "^1.0.3" + babel-plugin-react-constant-elements "^1.0.3" + babel-plugin-react-display-name "^1.0.3" + babel-plugin-remove-console "^1.0.1" + babel-plugin-remove-debugger "^1.0.1" + babel-plugin-runtime "^1.0.7" + babel-plugin-undeclared-variables-check "^1.0.2" + babel-plugin-undefined-to-void "^1.1.6" + babylon "^5.8.38" + bluebird "^2.9.33" + chalk "^1.0.0" + convert-source-map "^1.1.0" + core-js "^1.0.0" + debug "^2.1.1" + detect-indent "^3.0.0" + esutils "^2.0.0" + fs-readdir-recursive "^0.1.0" + globals "^6.4.0" + home-or-tmp "^1.0.0" + is-integer "^1.0.4" + js-tokens "1.0.1" + json5 "^0.4.0" + lodash "^3.10.0" + minimatch "^2.0.3" + output-file-sync "^1.1.0" + path-exists "^1.0.0" + path-is-absolute "^1.0.0" + private "^0.1.6" + regenerator "0.8.40" + regexpu "^1.3.0" + repeating "^1.1.2" + resolve "^1.1.6" + shebang-regex "^1.0.0" + slash "^1.0.0" + source-map "^0.5.0" + source-map-support "^0.2.10" + to-fast-properties "^1.0.0" + trim-right "^1.0.0" + try-resolve "^1.0.0" + +babel-core@^6.26.0: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-core@^7.0.0-bridge.0: + version "7.0.0-bridge.0" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-7.0.0-bridge.0.tgz#95a492ddd90f9b4e9a4a1da14eb335b87b634ece" + integrity sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg== + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + integrity sha1-FMGeXxQte0fxmlJDHlKxzLxAozA= + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" @@ -1307,6 +1807,16 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + integrity sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes= + dependencies: + babel-helper-bindify-decorators "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" @@ -1374,15 +1884,24 @@ babel-helper-replace-supers@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-loader@^8.0.6: - version "8.0.6" - resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.0.6.tgz#e33bdb6f362b03f4bb141a0c21ab87c501b70dfb" - integrity sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw== +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-loader@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" + integrity sha512-7q7nC1tYOrqvUrN3LQK4GwSk/TQorZSOlO9C+RZDZpODgyN4ZlCqE5q9cDsyWOliN+aU9B4JX01xK9eJXowJLw== dependencies: - find-cache-dir "^2.0.0" - loader-utils "^1.0.2" - mkdirp "^0.5.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-messages@^6.23.0: version "6.23.0" @@ -1398,29 +1917,145 @@ babel-plugin-check-es2015-constants@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== +babel-plugin-constant-folding@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-constant-folding/-/babel-plugin-constant-folding-1.0.1.tgz#8361d364c98e449c3692bdba51eff0844290aa8e" + integrity sha1-g2HTZMmORJw2kr26Ue/whEKQqo4= + +babel-plugin-dead-code-elimination@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-dead-code-elimination/-/babel-plugin-dead-code-elimination-1.0.2.tgz#5f7c451274dcd7cccdbfbb3e0b85dd28121f0f65" + integrity sha1-X3xFEnTc18zNv7s+C4XdKBIfD2U= + +babel-plugin-dynamic-import-node@^2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz#84fda19c976ec5c6defef57f9427b3def66e17a3" + integrity sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ== dependencies: object.assign "^4.1.0" +babel-plugin-eval@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-eval/-/babel-plugin-eval-1.0.1.tgz#a2faed25ce6be69ade4bfec263f70169195950da" + integrity sha1-ovrtJc5r5preS/7CY/cBaRlZUNo= + +babel-plugin-inline-environment-variables@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-inline-environment-variables/-/babel-plugin-inline-environment-variables-1.0.1.tgz#1f58ce91207ad6a826a8bf645fafe68ff5fe3ffe" + integrity sha1-H1jOkSB61qgmqL9kX6/mj/X+P/4= + +babel-plugin-jscript@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/babel-plugin-jscript/-/babel-plugin-jscript-1.0.4.tgz#8f342c38276e87a47d5fa0a8bd3d5eb6ccad8fcc" + integrity sha1-jzQsOCduh6R9X6CovT1etsytj8w= + +babel-plugin-member-expression-literals@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-member-expression-literals/-/babel-plugin-member-expression-literals-1.0.1.tgz#cc5edb0faa8dc927170e74d6d1c02440021624d3" + integrity sha1-zF7bD6qNyScXDnTW0cAkQAIWJNM= + +babel-plugin-property-literals@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-property-literals/-/babel-plugin-property-literals-1.0.1.tgz#0252301900192980b1c118efea48ce93aab83336" + integrity sha1-AlIwGQAZKYCxwRjv6kjOk6q4MzY= + +babel-plugin-proto-to-assign@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/babel-plugin-proto-to-assign/-/babel-plugin-proto-to-assign-1.0.4.tgz#c49e7afd02f577bc4da05ea2df002250cf7cd123" + integrity sha1-xJ56/QL1d7xNoF6i3wAiUM980SM= + dependencies: + lodash "^3.9.3" + +babel-plugin-react-constant-elements@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-react-constant-elements/-/babel-plugin-react-constant-elements-1.0.3.tgz#946736e8378429cbc349dcff62f51c143b34e35a" + integrity sha1-lGc26DeEKcvDSdz/YvUcFDs041o= + +babel-plugin-react-display-name@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/babel-plugin-react-display-name/-/babel-plugin-react-display-name-1.0.3.tgz#754fe38926e8424a4e7b15ab6ea6139dee0514fc" + integrity sha1-dU/jiSboQkpOexWrbqYTne4FFPw= + +babel-plugin-remove-console@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-remove-console/-/babel-plugin-remove-console-1.0.1.tgz#d8f24556c3a05005d42aaaafd27787f53ff013a7" + integrity sha1-2PJFVsOgUAXUKqqv0neH9T/wE6c= + +babel-plugin-remove-debugger@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/babel-plugin-remove-debugger/-/babel-plugin-remove-debugger-1.0.1.tgz#fd2ea3cd61a428ad1f3b9c89882ff4293e8c14c7" + integrity sha1-/S6jzWGkKK0fO5yJiC/0KT6MFMc= + +babel-plugin-runtime@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/babel-plugin-runtime/-/babel-plugin-runtime-1.0.7.tgz#bf7c7d966dd56ecd5c17fa1cb253c9acb7e54aaf" + integrity sha1-v3x9lm3Vbs1cF/ocslPJrLflSq8= + babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + integrity sha1-a8lj67FuzLrmuStZbrfzXDQqi5o= + +babel-plugin-syntax-class-constructor-call@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + integrity sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY= + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94= + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + integrity sha1-MSVjtNvePMgGzuPkFszurd0RrAs= + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo= + babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= +babel-plugin-syntax-export-extensions@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + integrity sha1-cKFITw+QiaToStRLrDU8lbmxJyE= + +babel-plugin-syntax-flow@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0= + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= + babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= -babel-plugin-transform-async-to-generator@^6.22.0: +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + integrity sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds= + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= @@ -1429,6 +2064,36 @@ babel-plugin-transform-async-to-generator@^6.22.0: babel-plugin-syntax-async-functions "^6.8.0" babel-runtime "^6.22.0" +babel-plugin-transform-class-constructor-call@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" + integrity sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk= + dependencies: + babel-plugin-syntax-class-constructor-call "^6.18.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-class-properties@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw= + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + integrity sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0= + dependencies: + babel-helper-explode-class "^6.24.1" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" @@ -1443,7 +2108,7 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-block-scoping@^6.23.0: +babel-plugin-transform-es2015-block-scoping@^6.23.0, babel-plugin-transform-es2015-block-scoping@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= @@ -1454,7 +2119,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0: babel-types "^6.26.0" lodash "^4.17.4" -babel-plugin-transform-es2015-classes@^6.23.0: +babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= @@ -1469,7 +2134,7 @@ babel-plugin-transform-es2015-classes@^6.23.0: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-es2015-computed-properties@^6.22.0: +babel-plugin-transform-es2015-computed-properties@^6.22.0, babel-plugin-transform-es2015-computed-properties@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= @@ -1477,14 +2142,14 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-destructuring@^6.23.0: +babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-duplicate-keys@^6.22.0: +babel-plugin-transform-es2015-duplicate-keys@^6.22.0, babel-plugin-transform-es2015-duplicate-keys@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= @@ -1492,14 +2157,14 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-plugin-transform-es2015-for-of@^6.23.0: +babel-plugin-transform-es2015-for-of@^6.22.0, babel-plugin-transform-es2015-for-of@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-function-name@^6.22.0: +babel-plugin-transform-es2015-function-name@^6.22.0, babel-plugin-transform-es2015-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= @@ -1534,7 +2199,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e babel-template "^6.26.0" babel-types "^6.26.0" -babel-plugin-transform-es2015-modules-systemjs@^6.23.0: +babel-plugin-transform-es2015-modules-systemjs@^6.23.0, babel-plugin-transform-es2015-modules-systemjs@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= @@ -1543,7 +2208,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-umd@^6.23.0: +babel-plugin-transform-es2015-modules-umd@^6.23.0, babel-plugin-transform-es2015-modules-umd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= @@ -1552,7 +2217,7 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-object-super@^6.22.0: +babel-plugin-transform-es2015-object-super@^6.22.0, babel-plugin-transform-es2015-object-super@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= @@ -1560,7 +2225,7 @@ babel-plugin-transform-es2015-object-super@^6.22.0: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" -babel-plugin-transform-es2015-parameters@^6.23.0: +babel-plugin-transform-es2015-parameters@^6.23.0, babel-plugin-transform-es2015-parameters@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= @@ -1572,7 +2237,7 @@ babel-plugin-transform-es2015-parameters@^6.23.0: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-es2015-shorthand-properties@^6.22.0: +babel-plugin-transform-es2015-shorthand-properties@^6.22.0, babel-plugin-transform-es2015-shorthand-properties@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= @@ -1587,7 +2252,7 @@ babel-plugin-transform-es2015-spread@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-sticky-regex@^6.22.0: +babel-plugin-transform-es2015-sticky-regex@^6.22.0, babel-plugin-transform-es2015-sticky-regex@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= @@ -1603,14 +2268,14 @@ babel-plugin-transform-es2015-template-literals@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-typeof-symbol@^6.23.0: +babel-plugin-transform-es2015-typeof-symbol@^6.22.0, babel-plugin-transform-es2015-typeof-symbol@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-unicode-regex@^6.22.0: +babel-plugin-transform-es2015-unicode-regex@^6.22.0, babel-plugin-transform-es2015-unicode-regex@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= @@ -1619,7 +2284,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0: babel-runtime "^6.22.0" regexpu-core "^2.0.0" -babel-plugin-transform-exponentiation-operator@^6.22.0: +babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= @@ -1628,7 +2293,31 @@ babel-plugin-transform-exponentiation-operator@^6.22.0: babel-plugin-syntax-exponentiation-operator "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-regenerator@^6.22.0: +babel-plugin-transform-export-extensions@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + integrity sha1-U3OLR+deghhYnuqUbLvTkQm75lM= + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.8.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988= + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-regenerator@^6.22.0, babel-plugin-transform-regenerator@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= @@ -1643,6 +2332,18 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" +babel-plugin-undeclared-variables-check@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/babel-plugin-undeclared-variables-check/-/babel-plugin-undeclared-variables-check-1.0.2.tgz#5cf1aa539d813ff64e99641290af620965f65dee" + integrity sha1-XPGqU52BP/ZOmWQSkK9iCWX2Xe4= + dependencies: + leven "^1.0.2" + +babel-plugin-undefined-to-void@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/babel-plugin-undefined-to-void/-/babel-plugin-undefined-to-void-1.1.6.tgz#7f578ef8b78dfae6003385d8417a61eda06e2f81" + integrity sha1-f1eO+LeN+uYAM4XYQXph7aBuL4E= + babel-preset-env@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.7.0.tgz#dea79fa4ebeb883cd35dab07e260c1c9c04df77a" @@ -1679,6 +2380,79 @@ babel-preset-env@^1.7.0: invariant "^2.2.2" semver "^5.3.0" +babel-preset-es2015@^6.9.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + integrity sha1-1EBQ1rwsn+6nAqrzjXJ6AhBTiTk= + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + +babel-preset-stage-1@^6.5.0: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" + integrity sha1-dpLNfc1oSZB+auSgqFWJz7niv7A= + dependencies: + babel-plugin-transform-class-constructor-call "^6.24.1" + babel-plugin-transform-export-extensions "^6.22.0" + babel-preset-stage-2 "^6.24.1" + +babel-preset-stage-2@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + integrity sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE= + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + integrity sha1-g2raCp56f6N8sTj7kyb4eTSkg5U= + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.26.0, babel-register@^6.9.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" @@ -1723,7 +2497,12 @@ babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@^6.18.0: +babylon@^5.8.38: + version "5.8.38" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-5.8.38.tgz#ec9b120b11bf6ccd4173a18bf217e60b79859ffd" + integrity sha1-7JsSCxG/bM1Bc6GL8hfmC3mFn/0= + +babylon@^6.17.3, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== @@ -1756,11 +2535,6 @@ batch@0.6.1: resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= -big.js@^3.1.3: - version "3.2.0" - resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" - integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== - big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" @@ -1771,6 +2545,11 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== +binary-extensions@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.1.0.tgz#30fa40c9e7fe07dbc895678cd287024dea241dd9" + integrity sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ== + bindings@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" @@ -1778,6 +2557,11 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bluebird@^2.9.33: + version "2.11.0" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.11.0.tgz#534b9033c022c9579c56ba3b3e5a5caafbb650e1" + integrity sha1-U0uQM8AiyVecVro7Plpcqvu2UOE= + bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -1821,7 +2605,7 @@ boolbase@~1.0.0: resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= -brace-expansion@^1.1.7: +brace-expansion@^1.0.0, brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== @@ -1829,6 +2613,15 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + braces@^2.3.1, braces@^2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" @@ -1845,6 +2638,18 @@ braces@^2.3.1, braces@^2.3.2: split-string "^3.0.2" to-regex "^3.0.1" +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +breakable@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/breakable/-/breakable-1.0.0.tgz#784a797915a38ead27bad456b5572cb4bbaa78c1" + integrity sha1-eEp5eRWjjq0nutRWtVcstLuqeME= + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -1917,6 +2722,16 @@ browserslist@^3.2.6: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" +browserslist@^4.12.0: + version "4.13.0" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.13.0.tgz#42556cba011e1b0a2775b611cba6a8eca18e940d" + integrity sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ== + dependencies: + caniuse-lite "^1.0.30001093" + electron-to-chromium "^1.3.488" + escalade "^3.0.1" + node-releases "^1.1.58" + browserslist@^4.8.3: version "4.8.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.3.tgz#65802fcd77177c878e015f0e3189f2c4f627ba44" @@ -1926,15 +2741,6 @@ browserslist@^4.8.3: electron-to-chromium "^1.3.322" node-releases "^1.1.44" -browserslist@^4.8.5: - version "4.8.6" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.8.6.tgz#96406f3f5f0755d272e27a66f4163ca821590a7e" - integrity sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg== - dependencies: - caniuse-lite "^1.0.30001023" - electron-to-chromium "^1.3.341" - node-releases "^1.1.47" - buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" @@ -2029,39 +2835,48 @@ callsites@^2.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= -camel-case@3.0.x: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" - integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= +camel-case@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-4.1.1.tgz#1fc41c854f00e2f7d0139dfeba1542d6896fe547" + integrity sha512-7fa2WcG4fYFkclIvEmxBbTvmibwF2/agfEBc6q3lOpVu0A13ltLsA+Hr/8Hp6kp5f+G7hKi6t8lys6XxP+1K6Q== dependencies: - no-case "^2.2.0" - upper-case "^1.1.1" + pascal-case "^3.1.1" + tslib "^1.10.0" + +camelcase@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + +camelcase@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= camelcase@^5.0.0, camelcase@^5.3.1: version "5.3.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001017, caniuse-lite@^1.0.30001020: +caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30001017: version "1.0.30001021" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001021.tgz#e75ed1ef6dbadd580ac7e7720bb16f07b083f254" integrity sha512-wuMhT7/hwkgd8gldgp2jcrUjOU9RXJ4XxGumQeOsUr91l3WwmM68Cpa/ymCnWEDqakwFXhuDQbaKNHXBPgeE9g== -caniuse-lite@^1.0.30001023: - version "1.0.30001025" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001025.tgz#30336a8aca7f98618eb3cf38e35184e13d4e5fe6" - integrity sha512-SKyFdHYfXUZf5V85+PJgLYyit27q4wgvZuf8QTOk1osbypcROihMBlx9GRar2/pIcKH2r4OehdlBr9x6PXetAQ== +caniuse-lite@^1.0.30001087, caniuse-lite@^1.0.30001093: + version "1.0.30001096" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001096.tgz#5a4541af5317dc21f91f5b24d453030a35f919c0" + integrity sha512-PFTw9UyVfbkcMEFs82q8XVlRayj7HKvnhu5BLcmjGpv+SNyiWasCcWXPGJuO0rK0dhLRDJmtZcJ+LHUfypbw1w== -chalk@2.4.2, chalk@^2.0.0, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" + align-text "^0.1.3" + lazy-cache "^1.0.3" -chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -2072,15 +2887,42 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== +chalk@^2.0.0, chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" + integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== dependencies: ansi-styles "^4.1.0" supports-color "^7.1.0" -chokidar@^2.0.2, chokidar@^2.1.8: +chalk@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" + integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8= + dependencies: + ansi-styles "~1.0.0" + has-color "~0.1.0" + strip-ansi "~0.1.0" + +child-process-promise@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/child-process-promise/-/child-process-promise-2.2.1.tgz#4730a11ef610fad450b8f223c79d31d7bdad8074" + integrity sha1-RzChHvYQ+tRQuPIjx50x172tgHQ= + dependencies: + cross-spawn "^4.0.2" + node-version "^1.0.0" + promise-polyfill "^6.0.1" + +chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -2099,6 +2941,21 @@ chokidar@^2.0.2, chokidar@^2.1.8: optionalDependencies: fsevents "^1.2.7" +chokidar@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8" + integrity sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.4.0" + optionalDependencies: + fsevents "~2.1.2" + chownr@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" @@ -2119,6 +2976,22 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +cjs-to-es6@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cjs-to-es6/-/cjs-to-es6-1.1.1.tgz#4dd88006297ddb9838c5cb9e1b7f9b364b75d4df" + integrity sha512-KzRa4dogR6NuES9OxiuPhKhGTYNdy5Z24smNgBqopzQOmZ2kkkPPi+ACEiLWIYJ6VsNpubBjw9Kr56h577dijA== + dependencies: + "5to6-codemod" "^1.0.0" + child-process-promise "^2.2.1" + colors "^1.1.2" + denodeify "^1.2.1" + findit "^2.0.0" + jscodeshift "^0.3.12" + lie "^3.0.1" + lodash.flatten "^4.0.0" + uniq "^1.0.1" + yargs "^3.31.0" + class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" @@ -2129,20 +3002,29 @@ class-utils@^0.3.5: isobject "^3.0.0" static-extend "^0.1.1" -clean-css@4.2.x: - version "4.2.1" - resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17" - integrity sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g== +clean-css@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.3.tgz#507b5de7d97b48ee53d84adb0160ff6216380f78" + integrity sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA== dependencies: source-map "~0.6.0" -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.0.3: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" wrap-ansi "^2.0.0" cliui@^5.0.0: @@ -2196,12 +3078,17 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -commander@2.17.x: - version "2.17.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" - integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== +colorette@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + +colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== -commander@^2.18.0, commander@^2.20.0: +commander@^2.18.0, commander@^2.20.0, commander@^2.5.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -2211,10 +3098,10 @@ commander@^4.0.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.0.tgz#545983a0603fe425bc672d66c9e3c89c42121a83" integrity sha512-NIQrwvv9V39FHgGFm36+U9SMQzbiHvU79k+iADraJTpmrFFfx7Ds0IvDoAdZsDrknlkRk14OYoWXb57uTh7/sw== -commander@~2.19.0: - version "2.19.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" - integrity sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg== +commander@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" + integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== common-tags@^1.8.0: version "1.8.0" @@ -2226,6 +3113,21 @@ commondir@^1.0.1: resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= +commoner@~0.10.3: + version "0.10.8" + resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" + integrity sha1-NPw2cs0kOT6LtH5wyqApOBH08sU= + dependencies: + commander "^2.5.0" + detective "^4.3.1" + glob "^5.0.15" + graceful-fs "^4.1.2" + iconv-lite "^0.4.5" + mkdirp "^0.5.0" + private "^0.1.6" + q "^1.1.2" + recast "^0.11.17" + component-emitter@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" @@ -2293,7 +3195,7 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.1.0, convert-source-map@^1.7.0: +convert-source-map@^1.1.0, convert-source-map@^1.5.1, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -2335,7 +3237,12 @@ core-js-compat@^3.6.2: browserslist "^4.8.3" semver "7.0.0" -core-js@^2.4.0: +core-js@^1.0.0: + version "1.2.7" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= + +core-js@^2.4.0, core-js@^2.4.1, core-js@^2.5.0: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== @@ -2386,7 +3293,15 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" -cross-spawn@6.0.5, cross-spawn@^6.0.0: +cross-spawn@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" + integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -2414,7 +3329,7 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" -css-loader@^3.0.0, css-loader@^3.4.2: +css-loader@^3.0.0: version "3.4.2" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.4.2.tgz#d3fdb3358b43f233b78501c5ed7b1c6da6133202" integrity sha512-jYq4zdZT0oS0Iykt+fqnzVLRIeiPWhka+7BqPn+oSIpWJAHak5tmB/WZrJ2a21JhCeFyNnnlroSl8c+MtVndzA== @@ -2432,6 +3347,25 @@ css-loader@^3.0.0, css-loader@^3.4.2: postcss-value-parser "^4.0.2" schema-utils "^2.6.0" +css-loader@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== + dependencies: + 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.32" + postcss-modules-extract-imports "^2.0.0" + postcss-modules-local-by-default "^3.0.2" + postcss-modules-scope "^2.2.0" + postcss-modules-values "^3.0.0" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" + semver "^6.3.0" + css-select@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" @@ -2457,7 +3391,7 @@ cyclist@^1.0.1: resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= -debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: +debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2478,7 +3412,7 @@ debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -decamelize@^1.2.0: +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -2537,6 +3471,27 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + +defs@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/defs/-/defs-1.1.1.tgz#b22609f2c7a11ba7a3db116805c139b1caffa9d2" + integrity sha1-siYJ8sehG6ej2xFoBcE5scr/qdI= + dependencies: + alter "~0.2.0" + ast-traverse "~0.1.1" + breakable "~1.0.0" + esprima-fb "~15001.1001.0-dev-harmony-fb" + simple-fmt "~0.1.0" + simple-is "~0.2.0" + stringmap "~0.2.2" + stringset "~0.2.1" + tryor "~0.1.2" + yargs "~3.27.0" + del@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/del/-/del-4.1.1.tgz#9e8f117222ea44a31ff3a156c049b99052a9f0b4" @@ -2550,6 +3505,11 @@ del@^4.1.1: pify "^4.0.1" rimraf "^2.6.3" +denodeify@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" + integrity sha1-OjYof1A05pnnV3kBBSwubJQlFjE= + depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -2573,11 +3533,35 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +detect-indent@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-3.0.1.tgz#9dc5e5ddbceef8325764b9451b02bc6d54084f75" + integrity sha1-ncXl3bzu+DJXZLlFGwK8bVQIT3U= + dependencies: + get-stdin "^4.0.1" + minimist "^1.1.0" + repeating "^1.1.0" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + detect-node@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== +detective@^4.3.1: + version "4.7.1" + resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" + integrity sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig== + dependencies: + acorn "^5.2.1" + defined "^1.0.0" + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -2660,6 +3644,14 @@ domutils@^1.5.1: dom-serializer "0" domelementtype "1" +dot-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-3.0.3.tgz#21d3b52efaaba2ea5fda875bb1aa8124521cf4aa" + integrity sha512-7hwEmg6RiSQfm/GwPL4AAWXKy3YNNZA3oFv2Pdiey0mwkRCPZ9x6SZbkLcn8Ma5PYeVokzoD4Twv2n7LKp5WeA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" @@ -2680,10 +3672,10 @@ electron-to-chromium@^1.3.322, electron-to-chromium@^1.3.47: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.335.tgz#5fb6084a25cb1e2542df91e62b62e1931a602303" integrity sha512-ngKsDGd/xr2lAZvilxTfdvfEiQKmavyXd6irlswaHnewmXoz6JgbM9FUNwgp3NFIUHHegh1F87H8f5BJ8zABxw== -electron-to-chromium@^1.3.341: - version "1.3.345" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.345.tgz#2569d0d54a64ef0f32a4b7e8c80afa5fe57c5d98" - integrity sha512-f8nx53+Z9Y+SPWGg3YdHrbYYfIJAtbUjpFfW4X1RwTZ94iUG7geg9tV8HqzAXX7XTNgyWgAFvce4yce8ZKxKmg== +electron-to-chromium@^1.3.488: + version "1.3.494" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.494.tgz#0d2dba65b69d696c5b71abb37552ff055fb32a5c" + integrity sha512-EOZuaDT3L1sCIMAVN5J0nGuGWVq5dThrdl0d8XeDYf4MOzbXqZ19OLKesN8TZj0RxtpYjqHpiw/fR6BKWdMwYA== elliptic@^6.0.0: version "6.5.2" @@ -2713,6 +3705,11 @@ emojis-list@^2.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -2725,15 +3722,6 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" -enhanced-resolve@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz#41c7e0bfdfe74ac1ffe1e57ad6a5c6c9f3742a7f" - integrity sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng== - dependencies: - graceful-fs "^4.1.2" - memory-fs "^0.4.0" - tapable "^1.0.0" - enhanced-resolve@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz#2937e2b8066cd0fe7ce0990a98f0d71a35189f66" @@ -2743,6 +3731,15 @@ enhanced-resolve@^4.1.0: memory-fs "^0.5.0" tapable "^1.0.0" +enhanced-resolve@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz#5d43bda4a0fd447cb0ebbe71bef8deff8805ad0d" + integrity sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ== + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.5.0" + tapable "^1.0.0" + entities@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" @@ -2793,6 +3790,11 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +escalade@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.1.tgz#52568a77443f6927cd0ab9c73129137533c965ed" + integrity sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -2811,11 +3813,26 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -esprima@^4.0.0: +esprima-fb@~15001.1001.0-dev-harmony-fb: + version "15001.1001.0-dev-harmony-fb" + resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz#43beb57ec26e8cf237d3dd8b33e42533577f2659" + integrity sha1-Q761fsJujPI3092LM+QlM1d/Jlk= + +esprima@^2.6.0: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= + +esprima@^4.0.0, esprima@~4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== +esprima@~3.1.0: + version "3.1.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= + esrecurse@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" @@ -2876,6 +3893,13 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= + dependencies: + is-posix-bracket "^0.1.0" + expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" @@ -2889,6 +3913,13 @@ expand-brackets@^2.1.4: snapdragon "^0.8.1" to-regex "^3.0.1" +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= + dependencies: + fill-range "^2.1.0" + expand-tilde@^2.0.0, expand-tilde@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" @@ -2947,6 +3978,13 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: assign-symbols "^1.0.0" is-extendable "^1.0.1" +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= + dependencies: + is-extglob "^1.0.0" + extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" @@ -2981,6 +4019,11 @@ fast-deep-equal@^2.0.1: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -3015,6 +4058,11 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= + filename-reserved-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz#e61cf805f0de1c984567d0386dc5df50ee5af7e4" @@ -3037,6 +4085,17 @@ filenamify@^1.0.0: strip-outer "^1.0.0" trim-repeated "^1.0.0" +fill-range@^2.1.0: + version "2.2.4" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" + integrity sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q== + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^3.0.0" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" @@ -3047,6 +4106,13 @@ fill-range@^4.0.0: repeat-string "^1.6.1" to-regex-range "^2.1.0" +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + finalhandler@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" @@ -3069,6 +4135,15 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" +find-cache-dir@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" + integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== + dependencies: + commondir "^1.0.1" + make-dir "^3.0.2" + pkg-dir "^4.1.0" + find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" @@ -3076,7 +4151,20 @@ find-up@^3.0.0: dependencies: locate-path "^3.0.0" -findup-sync@3.0.0: +find-up@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +findit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/findit/-/findit-2.0.0.tgz#6509f0126af4c178551cfa99394e032e13a4d56e" + integrity sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4= + +findup-sync@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1" integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg== @@ -3086,6 +4174,11 @@ findup-sync@3.0.0: micromatch "^3.0.4" resolve-dir "^1.0.1" +flow-parser@0.*, flow-parser@^0.*: + version "0.129.0" + resolved "https://registry.yarnpkg.com/flow-parser/-/flow-parser-0.129.0.tgz#5924357da8f4982c11e02883a6ed10e954e61ea4" + integrity sha512-kzxyoEl8vG0JF0/h/u0UjALXmsGvwU2NBfKczCSNO/It2fKb8hz1gMt05OuZAlMLYXcvgjntWJadIABeKGPK4g== + flush-write-stream@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" @@ -3101,11 +4194,18 @@ follow-redirects@^1.0.0: dependencies: debug "^3.0.0" -for-in@^1.0.2: +for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= + dependencies: + for-in "^1.0.1" + forwarded@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" @@ -3131,7 +4231,7 @@ from2@^2.1.0: inherits "^2.0.1" readable-stream "^2.0.0" -fs-extra@^8.0.0, fs-extra@^8.1.0: +fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -3140,6 +4240,21 @@ fs-extra@^8.0.0, fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" +fs-extra@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.0.1.tgz#910da0062437ba4c39fedd863f1675ccfefcb9fc" + integrity sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^1.0.0" + +fs-readdir-recursive@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz#315b4fb8c1ca5b8c47defef319d073dad3568059" + integrity sha1-MVtPuMHKW4xH3v7zGdBz2tNWgFk= + fs-readdir-recursive@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" @@ -3168,6 +4283,11 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" +fsevents@~2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" + integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== + function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -3178,16 +4298,16 @@ gensync@^1.0.0-beta.1: resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-stdin@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= + get-stream@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" @@ -3200,18 +4320,34 @@ get-value@^2.0.3, get-value@^2.0.6: resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= -gh-pages@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-2.2.0.tgz#74ebeaca8d2b9a11279dcbd4a39ddfff3e6caa24" - integrity sha512-c+yPkNOPMFGNisYg9r4qvsMIjVYikJv7ImFOhPIVPt0+AcRUamZ7zkGRLHz7FKB0xrlZ+ddSOJsZv9XAFVXLmA== +gh-pages@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/gh-pages/-/gh-pages-3.1.0.tgz#ec3ed0f6a6e3fc3d888758fa018f08191c96bd55" + integrity sha512-3b1rly9kuf3/dXsT8+ZxP0UhNLOo1CItj+3e31yUVcaph/yDsJ9RzD7JOw5o5zpBTJVQLlJAASNkUfepi9fe2w== dependencies: async "^2.6.1" commander "^2.18.0" email-addresses "^3.0.1" filenamify-url "^1.0.0" + find-cache-dir "^3.3.1" fs-extra "^8.1.0" globby "^6.1.0" +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= + dependencies: + is-glob "^2.0.0" + glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" @@ -3220,6 +4356,24 @@ glob-parent@^3.1.0: is-glob "^3.1.0" path-dirname "^1.0.0" +glob-parent@~5.1.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" + integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== + dependencies: + is-glob "^4.0.1" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + glob@^7.0.0, glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" @@ -3232,13 +4386,6 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -global-modules@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - global-modules@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" @@ -3248,6 +4395,13 @@ global-modules@^1.0.0: is-windows "^1.0.1" resolve-dir "^1.0.0" +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + global-prefix@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" @@ -3273,6 +4427,11 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^6.4.0: + version "6.4.1" + resolved "https://registry.yarnpkg.com/globals/-/globals-6.4.1.tgz#8498032b3b6d1cc81eebc5f79690d8fe29fabf4f" + integrity sha1-hJgDKzttHMge68X3lpDY/in6v08= + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -3294,6 +4453,11 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6 resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== +graceful-fs@^4.1.4: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + handle-thing@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/handle-thing/-/handle-thing-2.0.0.tgz#0e039695ff50c93fc288557d696f3c1dc6776754" @@ -3306,6 +4470,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-color@~0.1.0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" + integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8= + has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" @@ -3380,7 +4549,7 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -he@1.2.x: +he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== @@ -3394,6 +4563,22 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +home-or-tmp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-1.0.0.tgz#4b9f1e40800c3e50c6c27f781676afcce71f3985" + integrity sha1-S58eQIAMPlDGwn94FnavzOcfOYU= + dependencies: + os-tmpdir "^1.0.1" + user-home "^1.1.1" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -3411,35 +4596,37 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" -html-entities@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.2.1.tgz#0df29351f0721163515dfb9e5543e5f6eed5162f" - integrity sha1-DfKTUfByEWNRXfueVUPl9u7VFi8= - -html-minifier@^3.2.3: - version "3.5.21" - resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.21.tgz#d0040e054730e354db008463593194015212d20c" - integrity sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA== - dependencies: - camel-case "3.0.x" - clean-css "4.2.x" - commander "2.17.x" - he "1.2.x" - param-case "2.1.x" - relateurl "0.2.x" - uglify-js "3.4.x" - -html-webpack-plugin@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" - integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= +html-entities@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.3.1.tgz#fb9a1a4b5b14c5daba82d3e34c6ae4fe701a0e44" + integrity sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA== + +html-minifier-terser@^5.0.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-5.1.1.tgz#922e96f1f3bb60832c2634b79884096389b1f054" + integrity sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg== + dependencies: + 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@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.3.0.tgz#53bf8f6d696c4637d5b656d3d9863d89ce8174fd" + integrity sha512-C0fzKN8yQoVLTelcJxZfJCE+aAvQiY2VUf3UuKrR4a9k5UMWYOtpDLsaXwATbcVCnI05hUS7L9ULQHWLZhyi3w== dependencies: - html-minifier "^3.2.3" - loader-utils "^0.2.16" - lodash "^4.17.3" - pretty-error "^2.0.2" - tapable "^1.0.0" - toposort "^1.0.0" + "@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" htmlparser2@^3.3.0: @@ -3528,7 +4715,7 @@ humanize-url@^1.0.0: normalize-url "^1.0.0" strip-url-auth "^1.0.0" -iconv-lite@0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.5: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -3552,6 +4739,11 @@ iferr@^0.1.5: resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= + import-cwd@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" @@ -3574,7 +4766,7 @@ import-from@^2.1.0: dependencies: resolve-from "^3.0.0" -import-local@2.0.0, import-local@^2.0.0: +import-local@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/import-local/-/import-local-2.0.0.tgz#55070be38a5993cf18ef6db7e961f5bee5c5a09d" integrity sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ== @@ -3633,10 +4825,10 @@ internal-ip@^4.3.0: default-gateway "^4.2.0" ipaddr.js "^1.9.0" -interpret@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296" - integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw== +interpret@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" @@ -3645,10 +4837,10 @@ invariant@^2.2.2, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= ip-regex@^2.1.0: version "2.1.0" @@ -3706,6 +4898,13 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" @@ -3758,6 +4957,18 @@ is-directory@^0.3.1: resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= + dependencies: + is-primitive "^2.0.0" + is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" @@ -3770,11 +4981,21 @@ is-extendable@^1.0.1: dependencies: is-plain-object "^2.0.4" +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= + is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-finite@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" + integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== + is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -3787,6 +5008,13 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= + dependencies: + is-extglob "^1.0.0" + is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" @@ -3794,13 +5022,27 @@ is-glob@^3.1.0: dependencies: is-extglob "^2.1.0" -is-glob@^4.0.0: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== dependencies: is-extglob "^2.1.1" +is-integer@^1.0.4: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-integer/-/is-integer-1.0.7.tgz#6bde81aacddf78b659b6629d629cadc51a886d5c" + integrity sha1-a96Bqs3feLZZtmKdYpytxRqIbVw= + dependencies: + is-finite "^1.0.0" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= + dependencies: + kind-of "^3.0.2" + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -3808,6 +5050,16 @@ is-number@^3.0.0: dependencies: kind-of "^3.0.2" +is-number@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + is-path-cwd@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb" @@ -3839,6 +5091,16 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= + is-regex@^1.0.4, is-regex@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" @@ -3895,6 +5157,11 @@ js-base64@^2.1.9: resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== +js-tokens@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-1.0.1.tgz#cc435a5c8b94ad15acb7983140fc80182c89aeae" + integrity sha1-zENaXIuUrRWst5gxQPyAGCyJrq4= + "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -3913,6 +5180,57 @@ js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +jscodeshift@^0.3.12: + version "0.3.32" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.3.32.tgz#dece5eb602f16340d8d954c7f96ac907c502eabb" + integrity sha1-3s5etgLxY0DY2VTH+WrJB8UC6rs= + dependencies: + async "^1.5.0" + babel-core "^5" + babel-plugin-transform-flow-strip-types "^6.8.0" + babel-preset-es2015 "^6.9.0" + babel-preset-stage-1 "^6.5.0" + babel-register "^6.9.0" + babylon "^6.17.3" + colors "^1.1.2" + flow-parser "^0.*" + lodash "^4.13.1" + micromatch "^2.3.7" + node-dir "0.1.8" + nomnom "^1.8.1" + recast "^0.12.5" + temp "^0.8.1" + write-file-atomic "^1.2.0" + +jscodeshift@^0.6.3: + version "0.6.4" + resolved "https://registry.yarnpkg.com/jscodeshift/-/jscodeshift-0.6.4.tgz#e19ab86214edac86a75c4557fc88b3937d558a8e" + integrity sha512-+NF/tlNbc2WEhXUuc4WEJLsJumF84tnaMUZW2hyJw3jThKKRvsPX4sPJVgO1lPE28z0gNL+gwniLG9d8mYvQCQ== + dependencies: + "@babel/core" "^7.1.6" + "@babel/parser" "^7.1.6" + "@babel/plugin-proposal-class-properties" "^7.1.0" + "@babel/plugin-proposal-object-rest-spread" "^7.0.0" + "@babel/preset-env" "^7.1.6" + "@babel/preset-flow" "^7.0.0" + "@babel/preset-typescript" "^7.1.0" + "@babel/register" "^7.0.0" + babel-core "^7.0.0-bridge.0" + colors "^1.1.2" + flow-parser "0.*" + graceful-fs "^4.1.11" + micromatch "^3.1.10" + neo-async "^2.5.0" + node-dir "^0.1.17" + recast "^0.16.1" + temp "^0.8.1" + write-file-atomic "^2.3.0" + +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -3943,7 +5261,12 @@ json3@^3.3.2: resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.3.tgz#7fc10e375fc5ae42c4705a5cc0aa6f62be305b81" integrity sha512-c7/8mbUsKigAbLkD5B010BK4D9LZm7A1pNItkEwiUZRpIN66exu/e7YQWysGun+TRKaJp8MhemM+VkfWv42aCA== -json5@^0.5.0: +json5@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.4.0.tgz#054352e4c4c80c86c0923877d449de176a732c8d" + integrity sha1-BUNS5MTIDIbAkjh31EneF2pzLI0= + +json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= @@ -3962,6 +5285,13 @@ json5@^2.1.0: dependencies: minimist "^1.2.0" +json5@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.3.tgz#c9b0f7fa9233bfe5807fe66fcf3a5617ed597d43" + integrity sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA== + dependencies: + minimist "^1.2.5" + jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" @@ -3969,6 +5299,15 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" +jsonfile@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.0.1.tgz#98966cba214378c8c84b82e085907b40bf614179" + integrity sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg== + dependencies: + universalify "^1.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + killable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" @@ -3998,12 +5337,22 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= dependencies: - invert-kv "^2.0.0" + invert-kv "^1.0.0" + +leven@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3" + integrity sha1-kUS27ryl8dBoAWnxpncNzqYLdcM= leven@^3.1.0: version "3.1.0" @@ -4017,12 +5366,19 @@ levenary@^1.1.1: dependencies: leven "^3.1.0" +lie@^3.0.1: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + loader-runner@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== -loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.3: +loader-utils@^1.1.0, loader-utils@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.2.3.tgz#1ff5dc6911c9f0a062531a4c04b609406108c2c7" integrity sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA== @@ -4031,15 +5387,23 @@ loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2. emojis-list "^2.0.0" json5 "^1.0.1" -loader-utils@^0.2.16: - version "0.2.17" - resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" - integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= +loader-utils@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + +loader-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-2.0.0.tgz#e4cace5b816d425a166b5f097e10cd12b36064b0" + integrity sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^2.1.2" locate-path@^3.0.0: version "3.0.0" @@ -4049,15 +5413,42 @@ locate-path@^3.0.0: p-locate "^3.0.0" path-exists "^3.0.0" -lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.17.4: +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.flatten@^4.0.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz#f31c22225a9632d2bbf8e4addbef240aa765a61f" + integrity sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8= + +lodash@^3.10.0, lodash@^3.9.3: + version "3.10.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= + +lodash@^4.13.1: + version "4.17.19" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b" + integrity sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ== + +lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== -loglevel@^1.6.6: - version "1.6.6" - resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.6.tgz#0ee6300cc058db6b3551fa1c4bf73b83bb771312" - integrity sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ== +loglevel@^1.6.8: + version "1.6.8" + resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.8.tgz#8a25fb75d092230ecd4457270d80b54e28011171" + integrity sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA== + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: version "1.4.0" @@ -4066,10 +5457,20 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -lower-case@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" - integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= +lower-case@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" + integrity sha512-LiWgfDLLb1dwbFQZsSglpRj+1ctGnayXz3Uv0/WO8n558JycT5fg6zkNcnW0G68Nn0aEldTFeEfmjCfmqry/rQ== + dependencies: + tslib "^1.10.0" + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" lru-cache@^5.1.1: version "5.1.1" @@ -4078,6 +5479,13 @@ lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== + dependencies: + sourcemap-codec "^1.4.4" + make-dir@^2.0.0, make-dir@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" @@ -4086,17 +5494,12 @@ make-dir@^2.0.0, make-dir@^2.1.0: pify "^4.0.1" semver "^5.6.0" -mamacro@^0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/mamacro/-/mamacro-0.0.3.tgz#ad2c9576197c9f1abf308d0787865bd975a3f3e4" - integrity sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA== - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== +make-dir@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" + integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== dependencies: - p-defer "^1.0.0" + semver "^6.0.0" map-cache@^0.2.2: version "0.2.2" @@ -4110,6 +5513,11 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +math-random@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.4.tgz#5dd6943c938548267016d4e34f057583080c514c" + integrity sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -4124,16 +5532,7 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memory-fs@^0.4.0, memory-fs@^0.4.1: +memory-fs@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= @@ -4159,6 +5558,25 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= +micromatch@^2.3.7: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -4208,11 +5626,6 @@ mime@^2.4.4: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== -mimic-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - mini-css-extract-plugin@^0.9.0: version "0.9.0" resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.9.0.tgz#47f2cf07aa165ab35733b1fc97d4c46c0564339e" @@ -4233,18 +5646,30 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@^3.0.4: +"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" +minimatch@^2.0.3: + version "2.0.10" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" + integrity sha1-jQh8OcazjAAbl/ynzm0OHoCvusc= + dependencies: + brace-expansion "^1.0.0" + minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= +minimist@^1.1.0, minimist@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" + integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== + minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -4274,6 +5699,13 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" +mkdirp@^0.5.0, mkdirp@^0.5.3: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" + integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== + dependencies: + minimist "^1.2.5" + mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" @@ -4358,12 +5790,25 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -no-case@^2.2.0: - version "2.3.2" - resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" - integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== +no-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-3.0.3.tgz#c21b434c1ffe48b39087e86cfb4d2582e9df18f8" + integrity sha512-ehY/mVQCf9BL0gKfsJBvFJen+1V//U+0HQMPrWct40ixE4jnv0bfvxDbWtAHL9EcaPEOJHVVYKoQn1TlZUB8Tw== + dependencies: + lower-case "^2.0.1" + tslib "^1.10.0" + +node-dir@0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.8.tgz#55fb8deb699070707fb67f91a460f0448294c77d" + integrity sha1-VfuN62mQcHB/tn+RpGDwRIKUx30= + +node-dir@^0.1.17: + version "0.1.17" + resolved "https://registry.yarnpkg.com/node-dir/-/node-dir-0.1.17.tgz#5f5665d93351335caabef8f1c554516cf5f1e4e5" + integrity sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU= dependencies: - lower-case "^1.1.1" + minimatch "^3.0.2" node-forge@0.9.0: version "0.9.0" @@ -4399,6 +5844,11 @@ node-libs-browser@^2.2.1: util "^0.11.0" vm-browserify "^1.0.1" +node-modules-regexp@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= + node-releases@^1.1.44: version "1.1.45" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.45.tgz#4cf7e9175d71b1317f15ffd68ce63bce1d53e9f2" @@ -4406,21 +5856,32 @@ node-releases@^1.1.44: dependencies: semver "^6.3.0" -node-releases@^1.1.47: - version "1.1.48" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.48.tgz#7f647f0c453a0495bcd64cbd4778c26035c2f03a" - integrity sha512-Hr8BbmUl1ujAST0K0snItzEA5zkJTQup8VNTKNfT6Zw8vTJkIiagUPNfxHmgDOyfFYNfKAul40sD0UEYTvwebw== +node-releases@^1.1.58: + version "1.1.59" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.59.tgz#4d648330641cec704bff10f8e4fe28e453ab8e8e" + integrity sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw== + +node-version@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/node-version/-/node-version-1.2.0.tgz#34fde3ffa8e1149bd323983479dda620e1b5060d" + integrity sha512-ma6oU4Sk0qOoKEAymVoTvk8EdXEobdS7m/mAGhDJ8Rouugho48crHBORAmy5BoOcv8wraPM6xumapQp5hl4iIQ== + +nomnom@^1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" + integrity sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc= dependencies: - semver "^6.3.0" + chalk "~0.4.0" + underscore "~1.6.0" -normalize-path@^2.1.1: +normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" -normalize-path@^3.0.0: +normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== @@ -4518,6 +5979,14 @@ object.getownpropertydescriptors@^2.0.3: define-properties "^1.1.3" es-abstract "^1.17.0-next.1" +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" @@ -4568,30 +6037,37 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-locale@^3.0.0, os-locale@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" + lcid "^1.0.0" -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= +os-tmpdir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= + +output-file-sync@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + integrity sha1-0KM+7+YaIF+suQCS6CZZjVJFznY= + dependencies: + graceful-fs "^4.1.4" + mkdirp "^0.5.1" + object-assign "^4.1.0" p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - p-limit@^2.0.0: version "2.2.2" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" @@ -4599,6 +6075,13 @@ p-limit@^2.0.0: dependencies: p-try "^2.0.0" +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" @@ -4606,6 +6089,13 @@ p-locate@^3.0.0: dependencies: p-limit "^2.0.0" +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + p-map@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" @@ -4637,12 +6127,13 @@ parallel-transform@^1.1.0: inherits "^2.0.3" readable-stream "^2.1.5" -param-case@2.1.x: - version "2.1.1" - resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" - integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= +param-case@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-3.0.3.tgz#4be41f8399eff621c56eebb829a5e451d9801238" + integrity sha512-VWBVyimc1+QrzappRs7waeN2YmoZFCGXWASRYX1/rGHtXqEcrGEIDm+jqIwFa2fRXNgQEwrxaYuIrX0WcAguTA== dependencies: - no-case "^2.2.0" + dot-case "^3.0.3" + tslib "^1.10.0" parse-asn1@^5.0.0: version "5.1.5" @@ -4656,6 +6147,16 @@ parse-asn1@^5.0.0: pbkdf2 "^3.0.3" safe-buffer "^5.1.1" +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -4674,6 +6175,14 @@ parseurl@~1.3.2, parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascal-case@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-3.1.1.tgz#5ac1975133ed619281e88920973d2cd1f279de5f" + integrity sha512-XIeHKqIrsquVTQL2crjq3NfJUxmdLasn3TYOU0VBM+UX2a6ztAWBlJQBePLGY7VHW8+2dRadeIPK5+KImwTxQA== + dependencies: + no-case "^3.0.3" + tslib "^1.10.0" + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -4689,12 +6198,22 @@ path-dirname@^1.0.0: resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= +path-exists@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081" + integrity sha1-1aiZjrce83p0w06w2eum6HjuoIE= + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= -path-is-absolute@^1.0.0: +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= @@ -4730,6 +6249,11 @@ pbkdf2@^3.0.3: safe-buffer "^5.0.1" sha.js "^2.4.8" +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.2.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== + pify@^2.0.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" @@ -4752,6 +6276,13 @@ pinkie@^2.0.0: resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pirates@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" + integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== + dependencies: + node-modules-regexp "^1.0.0" + pkg-dir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" @@ -4759,10 +6290,17 @@ pkg-dir@^3.0.0: dependencies: find-up "^3.0.0" -portfinder@^1.0.25: - version "1.0.25" - resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.25.tgz#254fd337ffba869f4b9d37edc298059cb4d35eca" - integrity sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg== +pkg-dir@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +portfinder@^1.0.26: + version "1.0.26" + resolved "https://registry.yarnpkg.com/portfinder/-/portfinder-1.0.26.tgz#475658d56ca30bed72ac7f1378ed350bd1b64e70" + integrity sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ== dependencies: async "^2.6.2" debug "^3.1.1" @@ -4823,6 +6361,14 @@ postcss-modules-scope@^2.1.1: postcss "^7.0.6" postcss-selector-parser "^6.0.0" +postcss-modules-scope@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz#385cae013cc7743f5a7d7602d1073a89eaae62ee" + integrity sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ== + dependencies: + postcss "^7.0.6" + postcss-selector-parser "^6.0.0" + postcss-modules-values@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz#5b5000d6ebae29b4255301b4a3a54574423e7f10" @@ -4853,6 +6399,11 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.2.tgz#482282c09a42706d1fc9a069b73f44ec08391dc9" integrity sha512-LmeoohTpp/K4UiyQCwuGWlONxXamGzCMtFxLq4W1nZVGIQLYvMCJx3yAF9qyyuFpflABI9yVdtJAqbihOsCsJQ== +postcss-value-parser@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" + integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== + postcss@^5.0.5: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" @@ -4863,7 +6414,7 @@ postcss@^5.0.5: source-map "^0.5.6" supports-color "^3.2.3" -postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.21, postcss@^7.0.23, postcss@^7.0.26, postcss@^7.0.5, postcss@^7.0.6: +postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.21, postcss@^7.0.23, postcss@^7.0.5, postcss@^7.0.6: version "7.0.26" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.26.tgz#5ed615cfcab35ba9bbb82414a4fa88ea10429587" integrity sha512-IY4oRjpXWYshuTDFxMVkJDtWIk2LhsTlu8bZnbEJA4+bYT16Lvpo8Qv6EvDumhYRgzjZl489pmsY3qVgJQ08nA== @@ -4872,12 +6423,26 @@ postcss@^7.0.0, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.21, postcss@^7.0. source-map "^0.6.1" supports-color "^6.1.0" +postcss@^7.0.32: + version "7.0.32" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" + integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== + dependencies: + chalk "^2.4.2" + source-map "^0.6.1" + supports-color "^6.1.0" + prepend-http@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= -pretty-error@^2.0.2: +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= + +pretty-error@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= @@ -4885,7 +6450,7 @@ pretty-error@^2.0.2: renderkid "^2.0.1" utila "~0.4" -private@^0.1.6: +private@^0.1.6, private@^0.1.8, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -4905,6 +6470,11 @@ promise-inflight@^1.0.1: resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= +promise-polyfill@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-6.1.0.tgz#dfa96943ea9c121fca4de9b5868cb39d3472e057" + integrity sha1-36lpQ+qcEh/KTem1hoyznTRy4Fc= + prop-types@^15.6.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" @@ -4927,6 +6497,11 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + public-encrypt@^4.0.0: version "4.0.3" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" @@ -4979,6 +6554,11 @@ punycode@^2.1.0: resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +q@^1.1.2: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= + qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" @@ -5007,6 +6587,15 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== +randomatic@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.1.1.tgz#b776efc59375984e36c537b2f51a1f0aff0da1ed" + integrity sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw== + dependencies: + is-number "^4.0.0" + kind-of "^6.0.0" + math-random "^1.0.1" + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.1.0" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" @@ -5037,25 +6626,25 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -react-dom@^16.12.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.12.0.tgz#0da4b714b8d13c2038c9396b54a92baea633fe11" - integrity sha512-LMxFfAGrcS3kETtQaCkTKjMiifahaMySFDn71fZUNpPHZQEzmk/GiAeIT8JSOrHB23fnuCOMruL2a8NYlw+8Gw== +react-dom@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" + integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" prop-types "^15.6.2" - scheduler "^0.18.0" + scheduler "^0.19.1" react-is@^16.8.1: version "16.12.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== -react@^16.12.0: - version "16.12.0" - resolved "https://registry.yarnpkg.com/react/-/react-16.12.0.tgz#0c0a9c6a142429e3614834d5a778e18aa78a0b83" - integrity sha512-fglqy3k5E+81pA8s+7K0/T3DBCF0ZDOher1elBFzF7O6arXJgzyu/FW+COxFvAWXJoJN9KIZbT2LXlukwphYTA== +react@^16.13.1: + version "16.13.1" + resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" + integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -5092,10 +6681,68 @@ readdirp@^2.2.1: micromatch "^3.1.10" readable-stream "^2.0.2" -regenerate-unicode-properties@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" - integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== +readdirp@~3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.4.0.tgz#9fdccdf9e9155805449221ac645e8303ab5b9ada" + integrity sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ== + dependencies: + picomatch "^2.2.1" + +recast@0.10.33: + version "0.10.33" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.33.tgz#942808f7aa016f1fa7142c461d7e5704aaa8d697" + integrity sha1-lCgI96oBbx+nFCxGHX5XBKqo1pc= + dependencies: + ast-types "0.8.12" + esprima-fb "~15001.1001.0-dev-harmony-fb" + private "~0.1.5" + source-map "~0.5.0" + +recast@^0.10.10: + version "0.10.43" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.10.43.tgz#b95d50f6d60761a5f6252e15d80678168491ce7f" + integrity sha1-uV1Q9tYHYaX2JS4V2AZ4FoSRzn8= + dependencies: + ast-types "0.8.15" + esprima-fb "~15001.1001.0-dev-harmony-fb" + private "~0.1.5" + source-map "~0.5.0" + +recast@^0.11.17: + version "0.11.23" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" + integrity sha1-RR/TAEqx5N+bTktmN2sqIZEkYtM= + dependencies: + ast-types "0.9.6" + esprima "~3.1.0" + private "~0.1.5" + source-map "~0.5.0" + +recast@^0.12.1, recast@^0.12.5: + version "0.12.9" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.12.9.tgz#e8e52bdb9691af462ccbd7c15d5a5113647a15f1" + integrity sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A== + dependencies: + ast-types "0.10.1" + core-js "^2.4.1" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + +recast@^0.16.1: + version "0.16.2" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.16.2.tgz#3796ebad5fe49ed85473b479cd6df554ad725dc2" + integrity sha512-O/7qXi51DPjRVdbrpNzoBQH5dnAPQNbfoOFyRiUwreTMJfIHYOEBzwuH+c0+/BTSJ3CQyKs6ILSWXhESH6Op3A== + dependencies: + ast-types "0.11.7" + esprima "~4.0.0" + private "~0.1.5" + source-map "~0.6.1" + +regenerate-unicode-properties@^8.2.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" + integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== dependencies: regenerate "^1.4.0" @@ -5109,6 +6756,11 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== +regenerator-runtime@^0.13.4: + version "0.13.5" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" + integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== + regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -5118,12 +6770,31 @@ regenerator-transform@^0.10.0: babel-types "^6.19.0" private "^0.1.6" -regenerator-transform@^0.14.0: - version "0.14.1" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.1.tgz#3b2fce4e1ab7732c08f665dfdb314749c7ddd2fb" - integrity sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ== +regenerator-transform@^0.14.2: + version "0.14.5" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.5.tgz#c98da154683671c9c4dcb16ece736517e1b7feb4" + integrity sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw== dependencies: - private "^0.1.6" + "@babel/runtime" "^7.8.4" + +regenerator@0.8.40: + version "0.8.40" + resolved "https://registry.yarnpkg.com/regenerator/-/regenerator-0.8.40.tgz#a0e457c58ebdbae575c9f8cd75127e93756435d8" + integrity sha1-oORXxY69uuV1yfjNdRJ+k3VkNdg= + dependencies: + commoner "~0.10.3" + defs "~1.1.0" + esprima-fb "~15001.1001.0-dev-harmony-fb" + private "~0.1.5" + recast "0.10.33" + through "~2.3.8" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== + dependencies: + is-equal-shallow "^0.1.3" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" @@ -5150,27 +6821,38 @@ regexpu-core@^2.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^4.6.0: - version "4.6.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.6.0.tgz#2037c18b327cfce8a6fea2a4ec441f2432afb8b6" - integrity sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg== +regexpu-core@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" + integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== dependencies: 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" + +regexpu@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/regexpu/-/regexpu-1.3.0.tgz#e534dc991a9e5846050c98de6d7dd4a55c9ea16d" + integrity sha1-5TTcmRqeWEYFDJjebX3UpVyeoW0= + dependencies: + esprima "^2.6.0" + recast "^0.10.10" + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= -regjsgen@^0.5.0: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== +regjsgen@^0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.2.tgz#92ff295fb1deecbf6ecdab2543d207e91aa33733" + integrity sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A== regjsparser@^0.1.4: version "0.1.5" @@ -5179,14 +6861,14 @@ regjsparser@^0.1.4: dependencies: jsesc "~0.5.0" -regjsparser@^0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.2.tgz#fd62c753991467d9d1ffe0a9f67f27a529024b96" - integrity sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q== +regjsparser@^0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" + integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== dependencies: jsesc "~0.5.0" -relateurl@0.2.x: +relateurl@^0.2.7: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= @@ -5212,21 +6894,30 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== -repeat-string@^1.6.1: +repeat-string@^1.5.2, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= +repeating@^1.1.0, repeating@^1.1.2: + version "1.1.3" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-1.1.3.tgz#3d4114218877537494f97f77f9785fab810fa4ac" + integrity sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw= + dependencies: + is-finite "^1.0.0" + +repeating@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= + dependencies: + is-finite "^1.0.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -5262,6 +6953,13 @@ resolve-url@^0.2.1: resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= +resolve@^1.1.6: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + resolve@^1.11.1, resolve@^1.3.2: version "1.14.2" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.14.2.tgz#dbf31d0fa98b1f29aa5169783b9c290cb865fea2" @@ -5279,6 +6977,13 @@ retry@^0.12.0: resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" integrity sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs= +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + dependencies: + align-text "^0.1.1" + rimraf@^2.5.4, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -5286,6 +6991,13 @@ rimraf@^2.5.4, rimraf@^2.6.3: dependencies: glob "^7.1.3" +rimraf@~2.6.2: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -5323,10 +7035,10 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -scheduler@^0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.18.0.tgz#5901ad6659bc1d8f3fdaf36eb7a67b0d6746b1c4" - integrity sha512-agTSHR1Nbfi6ulI0kYNK0203joW2Y5W4po4l+v03tOoiJKpTBbxpNhWDvqc/4IcOw+KLmSiQLTasZ4cab2/UWQ== +scheduler@^0.19.1: + version "0.19.1" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" + integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== dependencies: loose-envify "^1.1.0" object-assign "^4.1.1" @@ -5355,12 +7067,13 @@ schema-utils@^2.6.0: ajv "^6.10.2" ajv-keywords "^3.4.1" -schema-utils@^2.6.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.6.4.tgz#a27efbf6e4e78689d91872ee3ccfa57d7bdd0f53" - integrity sha512-VNjcaUxVnEeun6B2fiiUDjXXBtD4ZSH7pdbfIu1pOFwgptDPLMo/z9jr4sUfsjFVPqDCEin/F7IYlq7/E6yDbQ== +schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" + integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== dependencies: - ajv "^6.10.2" + "@types/json-schema" "^7.0.4" + ajv "^6.12.2" ajv-keywords "^3.4.1" select-hose@^2.0.0: @@ -5385,7 +7098,7 @@ semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== -semver@^6.3.0: +semver@^6.0.0, semver@^6.3.0: version "6.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== @@ -5492,11 +7205,36 @@ signal-exit@^3.0.0: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +signal-exit@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + +simple-fmt@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/simple-fmt/-/simple-fmt-0.1.0.tgz#191bf566a59e6530482cb25ab53b4a8dc85c3a6b" + integrity sha1-GRv1ZqWeZTBILLJatTtKjchcOms= + +simple-is@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/simple-is/-/simple-is-0.2.0.tgz#2abb75aade39deb5cc815ce10e6191164850baf0" + integrity sha1-Krt1qt453rXMgVzhDmGRFkhQuvA= + +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + slash@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== +slide@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -5539,13 +7277,14 @@ sockjs-client@1.4.0: json3 "^3.3.2" url-parse "^1.4.3" -sockjs@0.3.19: - version "0.3.19" - resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.19.tgz#d976bbe800af7bd20ae08598d582393508993c0d" - integrity sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw== +sockjs@0.3.20: + version "0.3.20" + resolved "https://registry.yarnpkg.com/sockjs/-/sockjs-0.3.20.tgz#b26a283ec562ef8b2687b44033a4eeceac75d855" + integrity sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA== dependencies: faye-websocket "^0.10.0" - uuid "^3.0.1" + uuid "^3.4.0" + websocket-driver "0.6.5" sort-keys@^1.0.0: version "1.1.2" @@ -5570,6 +7309,28 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@^0.2.10: + version "0.2.10" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.2.10.tgz#ea5a3900a1c1cb25096a0ae8cc5c2b4b10ded3dc" + integrity sha1-6lo5AKHByyUJagrozFwrSxDe09w= + dependencies: + source-map "0.1.32" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + +source-map-support@^0.5.16: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-support@~0.5.12: version "0.5.16" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" @@ -5583,7 +7344,14 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.0, source-map@^0.5.6: +source-map@0.1.32: + version "0.1.32" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.32.tgz#c8b6c167797ba4740a8ea33252162ff08591b266" + integrity sha1-yLbBZ3l7pHQKjqMyUhYv8IWRsmY= + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -5593,6 +7361,16 @@ source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, source-map@~0.6.1: resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== +source-map@^0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" + integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== + +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== + spdy-transport@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/spdy-transport/-/spdy-transport-3.0.0.tgz#00d4863a6400ad75df93361a1608605e5dcdcf31" @@ -5605,10 +7383,10 @@ spdy-transport@^3.0.0: readable-stream "^3.0.6" wbuf "^1.7.3" -spdy@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.1.tgz#6f12ed1c5db7ea4f24ebb8b89ba58c87c08257f2" - integrity sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA== +spdy@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/spdy/-/spdy-4.0.2.tgz#b74f466203a3eda452c02492b91fb9e84a27677b" + integrity sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA== dependencies: debug "^4.1.0" handle-thing "^2.0.0" @@ -5635,6 +7413,11 @@ ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" +stable@~0.1.3: + version "0.1.8" + resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" + integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -5694,14 +7477,6 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - string-width@^3.0.0, string-width@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" @@ -5741,6 +7516,16 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringmap@~0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stringmap/-/stringmap-0.2.2.tgz#556c137b258f942b8776f5b2ef582aa069d7d1b1" + integrity sha1-VWwTeyWPlCuHdvWy71gqoGnX0bE= + +stringset@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/stringset/-/stringset-0.2.1.tgz#ef259c4e349344377fcd1c913dd2e848c9c042b5" + integrity sha1-7yWcTjSTRDd/zRyRPdLoSMnAQrU= + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -5748,13 +7533,6 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" @@ -5762,6 +7540,11 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" +strip-ansi@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" + integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE= + strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" @@ -5779,20 +7562,13 @@ strip-url-auth@^1.0.0: resolved "https://registry.yarnpkg.com/strip-url-auth/-/strip-url-auth-1.0.1.tgz#22b0fa3a41385b33be3f331551bbb837fa0cd7ae" integrity sha1-IrD6OkE4WzO+PzMVUbu4N/oM164= -style-loader@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.1.3.tgz#9e826e69c683c4d9bf9db924f85e9abb30d5e200" - integrity sha512-rlkH7X/22yuwFYK357fMN/BxYOorfnfq0eD7+vqlemSK4wEcejFF1dg4zxP0euBW8NrYx2WZzZ8PPFevr7D+Kw== - dependencies: - loader-utils "^1.2.3" - schema-utils "^2.6.4" - -supports-color@6.1.0, supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== +style-loader@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-1.2.1.tgz#c5cbbfbf1170d076cfdd86e0109c5bba114baa1a" + integrity sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg== dependencies: - has-flag "^3.0.0" + loader-utils "^2.0.0" + schema-utils "^2.6.6" supports-color@^2.0.0: version "2.0.0" @@ -5813,6 +7589,13 @@ supports-color@^5.3.0: dependencies: has-flag "^3.0.0" +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + supports-color@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" @@ -5825,6 +7608,13 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== +temp@^0.8.1: + version "0.8.4" + resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.4.tgz#8c97a33a4770072e0a05f919396c7665a7dd59f2" + integrity sha512-s0ZZzd0BzYv5tLSptZooSjK8oj6C+c19p7Vqta9+6NPOf7r+fxq0cJe6/oN4LTC79sy5NY8ucOJNgwsKCSbfqg== + dependencies: + rimraf "~2.6.2" + terser-webpack-plugin@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz#5ecaf2dbdc5fb99745fd06791f46fc9ddb1c9a7c" @@ -5849,6 +7639,15 @@ terser@^4.1.2: source-map "~0.6.1" source-map-support "~0.5.12" +terser@^4.6.3: + version "4.8.0" + resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" + integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== + dependencies: + commander "^2.20.0" + source-map "~0.6.1" + source-map-support "~0.5.12" + through2@^2.0.0: version "2.0.5" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" @@ -5857,6 +7656,11 @@ through2@^2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" +through@~2.3.8: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= + thunky@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/thunky/-/thunky-1.1.0.tgz#5abaf714a9405db0504732bbccd2cedd9ef9537d" @@ -5874,7 +7678,7 @@ to-arraybuffer@^1.0.0: resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= -to-fast-properties@^1.0.3: +to-fast-properties@^1.0.0, to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= @@ -5899,6 +7703,13 @@ to-regex-range@^2.1.0: is-number "^3.0.0" repeat-string "^1.6.1" +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + to-regex@^3.0.1, to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" @@ -5914,11 +7725,6 @@ toidentifier@1.0.0: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== -toposort@^1.0.0: - version "1.0.7" - resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.7.tgz#2e68442d9f64ec720b8cc89e6443ac6caa950029" - integrity sha1-LmhELZ9k7HILjMieZEOsbKqVACk= - trim-repeated@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-1.0.0.tgz#e3646a2ea4e891312bf7eace6cfb05380bc01c21" @@ -5926,6 +7732,26 @@ trim-repeated@^1.0.0: dependencies: escape-string-regexp "^1.0.2" +trim-right@^1.0.0, trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + +try-resolve@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/try-resolve/-/try-resolve-1.0.1.tgz#cfde6fabd72d63e5797cfaab873abbe8e700e912" + integrity sha1-z95vq9ctY+V5fPqrhzq76OcA6RI= + +tryor@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b" + integrity sha1-gUXkynyv9ArN48z5Rui4u3W0Fys= + +tslib@^1.10.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" + integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== + tslib@^1.9.0: version "1.10.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" @@ -5949,13 +7775,10 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= -uglify-js@3.4.x: - version "3.4.10" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.10.tgz#9ad9563d8eb3acdfb8d38597d2af1d815f6a755f" - integrity sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw== - dependencies: - commander "~2.19.0" - source-map "~0.6.1" +underscore@~1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" + integrity sha1-izixDKze9jM3uLJOT/htRa6lKag= unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" @@ -5970,10 +7793,10 @@ unicode-match-property-ecmascript@^1.0.4: unicode-canonical-property-names-ecmascript "^1.0.4" unicode-property-aliases-ecmascript "^1.0.4" -unicode-match-property-value-ecmascript@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" - integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== +unicode-match-property-value-ecmascript@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" + integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== unicode-property-aliases-ecmascript@^1.0.4: version "1.0.5" @@ -6014,6 +7837,11 @@ universalify@^0.1.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== +universalify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-1.0.0.tgz#b61a1da173e8435b2fe3c67d29b9adf8594bd16d" + integrity sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -6032,11 +7860,6 @@ upath@^1.1.1: resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== -upper-case@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" - integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= - uri-js@^4.2.2: version "4.2.2" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" @@ -6070,6 +7893,11 @@ use@^3.1.0: resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== +user-home@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + integrity sha1-K1viOjK2Onyd640PKNSFcko98ZA= + util-deprecate@^1.0.1, util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -6107,15 +7935,20 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.3.2: +uuid@^3.3.2: version "3.3.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== -v8-compile-cache@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe" - integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w== +uuid@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745" + integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ== vary@~1.1.2: version "1.1.2" @@ -6127,14 +7960,23 @@ vm-browserify@^1.0.1: resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== -watchpack@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.6.0.tgz#4bc12c2ebe8aa277a71f1d3f14d685c7b446cd00" - integrity sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA== +watchpack-chokidar2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz#9948a1866cbbd6cb824dea13a7ed691f6c8ddff0" + integrity sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.6.1: + version "1.7.2" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.2.tgz#c02e4d4d49913c3e7e122c3325365af9d331e9aa" + integrity sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g== dependencies: - chokidar "^2.0.2" graceful-fs "^4.1.2" neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.0" + watchpack-chokidar2 "^2.0.0" wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" @@ -6143,22 +7985,22 @@ wbuf@^1.1.0, wbuf@^1.7.3: dependencies: minimalistic-assert "^1.0.0" -webpack-cli@^3.3.10: - version "3.3.10" - resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.10.tgz#17b279267e9b4fb549023fae170da8e6e766da13" - integrity sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg== - dependencies: - chalk "2.4.2" - cross-spawn "6.0.5" - enhanced-resolve "4.1.0" - findup-sync "3.0.0" - global-modules "2.0.0" - import-local "2.0.0" - interpret "1.2.0" - loader-utils "1.2.3" - supports-color "6.1.0" - v8-compile-cache "2.0.3" - yargs "13.2.4" +webpack-cli@^3.3.12: + version "3.3.12" + resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a" + integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag== + dependencies: + chalk "^2.4.2" + cross-spawn "^6.0.5" + enhanced-resolve "^4.1.1" + findup-sync "^3.0.0" + global-modules "^2.0.0" + import-local "^2.0.0" + interpret "^1.4.0" + loader-utils "^1.4.0" + supports-color "^6.1.0" + v8-compile-cache "^2.1.1" + yargs "^13.3.2" webpack-dev-middleware@^3.7.2: version "3.7.2" @@ -6171,10 +8013,10 @@ webpack-dev-middleware@^3.7.2: range-parser "^1.2.1" webpack-log "^2.0.0" -webpack-dev-server@^3.10.3: - version "3.10.3" - resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.10.3.tgz#f35945036813e57ef582c2420ef7b470e14d3af0" - integrity sha512-e4nWev8YzEVNdOMcNzNeCN947sWJNd43E5XvsJzbAL08kGc2frm1tQ32hTJslRS+H65LCb/AaUCYU7fjHCpDeQ== +webpack-dev-server@^3.11.0: + version "3.11.0" + resolved "https://registry.yarnpkg.com/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz#8f154a3bce1bcfd1cc618ef4e703278855e7ff8c" + integrity sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg== dependencies: ansi-html "0.0.7" bonjour "^3.5.0" @@ -6184,31 +8026,31 @@ webpack-dev-server@^3.10.3: debug "^4.1.1" del "^4.1.1" express "^4.17.1" - html-entities "^1.2.1" + html-entities "^1.3.1" http-proxy-middleware "0.19.1" import-local "^2.0.0" internal-ip "^4.3.0" ip "^1.1.5" is-absolute-url "^3.0.3" killable "^1.0.1" - loglevel "^1.6.6" + loglevel "^1.6.8" opn "^5.5.0" p-retry "^3.0.1" - portfinder "^1.0.25" + portfinder "^1.0.26" schema-utils "^1.0.0" selfsigned "^1.10.7" semver "^6.3.0" serve-index "^1.9.1" - sockjs "0.3.19" + sockjs "0.3.20" sockjs-client "1.4.0" - spdy "^4.0.1" + spdy "^4.0.2" strip-ansi "^3.0.1" supports-color "^6.1.0" url "^0.11.0" webpack-dev-middleware "^3.7.2" webpack-log "^2.0.0" ws "^6.2.1" - yargs "12.0.5" + yargs "^13.3.2" webpack-log@^2.0.0: version "2.0.0" @@ -6226,16 +8068,16 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack- source-list-map "^2.0.0" source-map "~0.6.1" -webpack@^4.41.5: - version "4.41.5" - resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.41.5.tgz#3210f1886bce5310e62bb97204d18c263341b77c" - integrity sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw== +webpack@^4.43.0: + version "4.43.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.43.0.tgz#c48547b11d563224c561dad1172c8aa0b8a678e6" + integrity sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g== dependencies: - "@webassemblyjs/ast" "1.8.5" - "@webassemblyjs/helper-module-context" "1.8.5" - "@webassemblyjs/wasm-edit" "1.8.5" - "@webassemblyjs/wasm-parser" "1.8.5" - acorn "^6.2.1" + "@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.4.1" ajv "^6.10.2" ajv-keywords "^3.4.1" chrome-trace-event "^1.0.2" @@ -6246,15 +8088,22 @@ webpack@^4.41.5: 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" tapable "^1.1.3" terser-webpack-plugin "^1.4.3" - watchpack "^1.6.0" + watchpack "^1.6.1" webpack-sources "^1.4.1" +websocket-driver@0.6.5: + version "0.6.5" + resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.6.5.tgz#5cb2556ceb85f4373c6d8238aa691c8454e13a36" + integrity sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY= + dependencies: + websocket-extensions ">=0.1.1" + websocket-driver@>=0.5.1: version "0.7.3" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" @@ -6281,6 +8130,16 @@ which@^1.2.14, which@^1.2.9, which@^1.3.1: dependencies: isexe "^2.0.0" +window-size@^0.1.2, window-size@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.4.tgz#f8e1aa1ee5a53ec5bf151ffa09742a6ad7697876" + integrity sha1-+OGqHuWlPsW/FR/6CXQqatdpeHY= + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + worker-farm@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.7.0.tgz#26a94c5391bbca926152002f69b84a4bf772e5a8" @@ -6310,6 +8169,24 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= +write-file-atomic@^1.2.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8= + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + slide "^1.1.5" + +write-file-atomic@^2.3.0: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + ws@^6.2.1: version "6.2.1" resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" @@ -6322,63 +8199,71 @@ xtend@^4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -"y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: +y18n@^3.2.0: + version "3.2.1" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= + +y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + yallist@^3.0.2: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^13.1.0: - version "13.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.1.tgz#d26058532aa06d365fe091f6a1fc06b2f7e5eca0" - integrity sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ== +yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== dependencies: camelcase "^5.0.0" decamelize "^1.2.0" -yargs@12.0.5: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== - dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.0" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1 || ^4.0.0" - yargs-parser "^11.1.1" - -yargs@13.2.4: - version "13.2.4" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" - integrity sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg== +yargs@^13.3.2: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== dependencies: cliui "^5.0.0" find-up "^3.0.0" get-caller-file "^2.0.1" - os-locale "^3.1.0" require-directory "^2.1.1" require-main-filename "^2.0.0" set-blocking "^2.0.0" string-width "^3.0.0" which-module "^2.0.0" y18n "^4.0.0" - yargs-parser "^13.1.0" + yargs-parser "^13.1.2" + +yargs@^3.31.0: + version "3.32.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.32.0.tgz#03088e9ebf9e756b69751611d2a5ef591482c995" + integrity sha1-AwiOnr+edWtpdRYR0qXvWRSCyZU= + dependencies: + camelcase "^2.0.1" + cliui "^3.0.3" + decamelize "^1.1.1" + os-locale "^1.4.0" + string-width "^1.0.1" + window-size "^0.1.4" + y18n "^3.2.0" + +yargs@~3.27.0: + version "3.27.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.27.0.tgz#21205469316e939131d59f2da0c6d7f98221ea40" + integrity sha1-ISBUaTFuk5Ex1Z8toMbX+YIh6kA= + dependencies: + camelcase "^1.2.1" + cliui "^2.1.0" + decamelize "^1.0.0" + os-locale "^1.4.0" + window-size "^0.1.2" + y18n "^3.2.0"