├── .editorconfig ├── .gitignore ├── LICENSE ├── README.md ├── build └── cygnus.js ├── package.json ├── src └── cygnus.js └── yarn.lock /.editorconfig: -------------------------------------------------------------------------------- 1 | # This file is for unifying the coding style for different editors and IDEs 2 | # editorconfig.org 3 | 4 | root = true 5 | 6 | [*] 7 | end_of_line = lf 8 | charset = utf-8 9 | insert_final_newline = true 10 | trim_trailing_whitespace = true 11 | indent_style = space 12 | indent_size = 2 13 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # nyc test coverage 18 | .nyc_output 19 | 20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 21 | .grunt 22 | 23 | # node-waf configuration 24 | .lock-wscript 25 | 26 | # Compiled binary addons (http://nodejs.org/api/addons.html) 27 | build/Release 28 | 29 | # Dependency directories 30 | node_modules 31 | jspm_packages 32 | 33 | # Optional npm cache directory 34 | .npm 35 | 36 | # Optional REPL history 37 | .node_repl_history 38 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2016 David Eglin 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Cygnus 2 | 3 | Fast, graceful JS-based page loading for static sites without going full SPA. 4 | 5 | *It takes a lot of work under the surface to look this graceful* 6 | 7 | Cygnus is an NPM module which aims to increase the speed and improve the interactions on static websites by pre-fetching local-domain links found as the user navigates around your site and then loading them via javascript from that cache, rather than relying on requesting each page as a link is clicked. 8 | 9 | The heavy lifting here is handled by a worker script rather than in the main javascript thread, allowing all other interactions to progress smoothly whilst pages are quietly fetched and cached in the background. 10 | 11 | ### Why not just create a Single Page Application (SPA)? 12 | SPAs are notoriously bad for SEO purposes, at least without expending a good deal of effort to make them crawlable by the likes of Google's search bots. They also won't work where javascript is not available, again unless the creator puts in a lot of work to make their website isomorphic, running the same or similar code on both client and server. 13 | 14 | Whilst there is definitely a place for SPAs on the web today, that place shouldn't be for static websites. It seems incredibly pointless to bring a full javascript routing and rendering engine to the party when simple html pages will do, so Cygnus-js provides the best of both worlds – Smoothly-displayed, performant content that is also crawlable and directly-linkable. 15 | 16 | ### Features 17 | 18 | ##### Fully progressively enhanced 19 | Because it isn't a full SPA framework, and still relies on there being actual html pages for your website, Cygnus fully complies with the principals of progressive enhancement. If the browser doesn't support the required features (`promises`, `workers` and the `history` api at the moment), or if JS is disabled for some reason, or even if a given link hasn't been fetched yet, your site will function as normal. 20 | 21 | ##### Framework / Library agnostic 22 | Cygnus isn't tied to or reliant on any specific javascript libraries or frameworks, meaning it should work on pretty much any static site you drop it in to. 23 | 24 | ##### Page transitions, however you would like to do them 25 | Cygnus isn't tied to an animation framework, either, so you can choose to implement page transitions in whatever javascript animation framework you feel most comfortable with. Why only javascript animation, you ask? Because, contrary to popular belief, it is generally more performant than css-based animation, and because it just seems to "fit" better with the philosophy of this script. 26 | 27 | ##### Page fetching happens outside of the main javascript thread 28 | The reason that Cygnus uses a worker to do the heavy lifting is to take the actual work of fetching pages and returning their html off the main javascript thread, leaving that free for whatever else you have going on in your pages. 29 | 30 | ### Installation 31 | 32 | - Install through npm with `npm i cygnus -S` (recommended) 33 | - Or download the script directly from `build` and include as you wish 34 | 35 | ### Usage 36 | 37 | At the most basic level, you simply need to include the following in your js... 38 | 39 | ```javascript 40 | const cygnus = require('cygnus'); 41 | cygnus.init(); 42 | ``` 43 | 44 | That's it! Once included and initialised in your project, Cygnus will start to fetch your pages in the background and serve them up via javascript. 45 | 46 | Cygnus, by default, will look for a container in each of your pages with a class of `wrap` and use that to replace the content within. You can override this selector by passing in an options object to the `init()` method like so: 47 | 48 | ```javascript 49 | cygnus.init({contentWrapper: '.your-selector'}) 50 | ``` 51 | 52 | #### Transitions 53 | 54 | If you want to enable transitions for your pages, you will need to do a little more work. 55 | 56 | ##### Create some animation functions 57 | These functions must each return a promise that resolves once the animation is complete. See example below: 58 | 59 | ```javascript 60 | module.exports = { 61 | intros: { 62 | "default": function() { 63 | return new Promise(function(resolve, reject) { 64 | var animation, shim; 65 | shim = document.querySelector(".shim"); 66 | shim.setAttribute("style", "position: fixed; top: 0; left: 0; width: 100%; height: 100%; background-color: #E45353; line-height: 0; z-index: 5;"); 67 | return animation = anime({ 68 | targets: shim, 69 | height: "0", 70 | duration: 500, 71 | delay: 200, 72 | easing: "easeInQuint", 73 | complete: function() { 74 | shim.parentNode.removeChild(shim); 75 | return resolve(true); 76 | } 77 | }); 78 | }); 79 | } 80 | }, 81 | outros: { 82 | "default": function() { 83 | return new Promise(function(resolve, reject) { 84 | var animation, shim; 85 | shim = document.createElement("div"); 86 | shim.setAttribute("class", "shim"); 87 | shim.setAttribute("style", "position: fixed; bottom: 0; left: 0; width: 100%; height: 0; background-color: #E45353; line-height: 0; z-index: 5;"); 88 | document.body.appendChild(shim); 89 | return animation = anime({ 90 | targets: shim, 91 | height: "100%", 92 | duration: 500, 93 | easing: "easeInQuint", 94 | complete: function() { 95 | return resolve(true); 96 | } 97 | }); 98 | }); 99 | } 100 | } 101 | }; 102 | ``` 103 | 104 | You will see that the animations here are using [Anime.js](http://anime-js.com), but you could equally use GSAP, Velocity or similar should you want to. The important thing is that you structure the animation functions to return a promise. This is how Cygnus knows that each stage of the outro and into animations are complete and to move on to the next thing. 105 | 106 | ##### Reference the animations you want to use on each page 107 | 108 | Once you have these functions, you will need to reference them on the `body` tag of each page (TODO: Add a default animation selector, perhaps? Or the ability to set one in opts?) like so: 109 | 110 | ```html 111 | 112 | ``` 113 | 114 | This allows Cygnus to find the animations you are using for each page. 115 | 116 | #### Custom CSS per page 117 | If you want to include different css files for individual pages, then simply add a `data-rel="page-css"` attribute to the html when you insert them, like this: 118 | 119 | ```html 120 | 121 | ``` 122 | 123 | Cygnus will load all css files referenced in this way when it changes pages, even though it doesn't replace the entire html of the page. 124 | 125 | #### Javascript running on page load 126 | 127 | Because of the way Cygnus interrupts the standard page load model, javscript that would normally fire when a page loads does not behave in the same way. In an effort to get around this, Cygnus fires a custom event every time it loads a page – `cygnusPageLoaded`, which you can attach any code you want to run on each page load like so: 128 | 129 | ```javascript 130 | const initPage = () => { 131 | doSomeStuff(); 132 | } 133 | 134 | window.addEventListener("cygnusPageLoaded", (e) => { 135 | initPage(); 136 | }); 137 | ``` 138 | 139 | This event also exposes some information on the `detail` property of the event object. It carries a property called `page`, which has a value of the `location.pathname` of the loaded page, allowing you to target certain functions to certain pages if needed, like so: 140 | 141 | ```javascript 142 | window.addEventListener("cygnusPageLoaded", (e) => { 143 | console.log(e.detail.page); // Logs out loaded path 144 | }); 145 | ``` 146 | 147 | ### Changelog 148 | `0.5.1`: Fixed a crash when going back in browser history if `scrollTop` wasn't set, by adding a default 149 | 150 | `0.5.0`: Added scroll position tracking and manual scroll position restoration for `popstate` events 151 | 152 | `0.4.0`: Cygnus will now scroll to the top of the page during transition if the page change is triggered from a clicked link (rather than history action) 153 | 154 | `0.3.0`: Added a check to see whether a page is already fetching before dispatching links to worker 155 | 156 | `0.2.0`: Added custom event to fire on every page load 157 | 158 | ### License & Contributing 159 | 160 | Licensed under [MIT](LICENSE) 161 | -------------------------------------------------------------------------------- /build/cygnus.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var _arguments = arguments; 4 | 5 | /* global cygnus, Blob, Worker, XMLHttpRequest */ 6 | 7 | var cygnus = module.exports = { 8 | supportsHistory: !!window.history, 9 | supportsWorkers: !!window.Worker, 10 | supportsPromises: !!Promise, 11 | ready: false, 12 | fetchingPages: [], 13 | pages: {}, 14 | init: function init(opts) { 15 | 16 | var defaults = { 17 | contentWrapper: '.wrap', 18 | makeGlobal: false 19 | }; 20 | 21 | if (!cygnus.ready) { 22 | if ('scrollRestoration' in history) { 23 | // Back off, browser, I got this... 24 | history.scrollRestoration = 'manual'; 25 | } 26 | window.onpopstate = cygnus.handlePopState; 27 | cygnus.options = Object.assign({}, defaults, opts); 28 | if (cygnus.options.makeGlobal) window.cygnus = cygnus; 29 | window.addEventListener("scroll", cygnus.debounce(function () { 30 | var st = window.pageYOffset || document.documentElement.scrollTop; 31 | window.history.replaceState({ url: location.href, scrollTop: st }, '', location.href); 32 | }, 100)); 33 | cygnus.ready = true; 34 | } 35 | 36 | // Exit if history api, workers and promises aren't all supported 37 | if (!cygnus.supportsHistory || !cygnus.supportsWorkers || !cygnus.supportsPromises) { 38 | console.info('[Cygnus]: cygnus is not supported in this browser.'); 39 | return false; 40 | } 41 | 42 | // Start up the worker if it hasn't already been started 43 | if (typeof cygnus.cygnusWorker === 'undefined') { 44 | cygnus.cygnusWorker = new Worker(cygnus.workerBlob); 45 | cygnus.completeInit(); 46 | } else { 47 | cygnus.completeInit(); 48 | } 49 | }, 50 | completeInit: function completeInit() { 51 | // Respond to the worker 52 | cygnus.cygnusWorker.onmessage = function (e) { 53 | cygnus.receivePageData(JSON.parse(e.data)); 54 | }; 55 | 56 | // Add current page without re-fectching it 57 | if (!cygnus.pages[window.location.href]) cygnus.getCurrentPage(); 58 | 59 | // Get list of links and send them off to the worker 60 | var links = cygnus.getLinks(); 61 | links.map(function (current, index, arr) { 62 | return cygnus.dispatchLink(index, arr[index]); 63 | }); 64 | 65 | // Handle clicks on links 66 | cygnus.catchLinks(links); 67 | }, 68 | getCurrentPage: function getCurrentPage() { 69 | console.info("[Cygnus]: Current page isn't in store. Adding from html already loaded in browser."); 70 | // Add the current page's html to the store 71 | cygnus.pages[window.location.href] = cygnus.parseHTML(document.documentElement.outerHTML); 72 | var messageData = { task: 'add', link: window.location.href }; 73 | // Notify the worker that this page doesn't need to be fetched 74 | cygnus.cygnusWorker.postMessage(JSON.stringify(messageData)); 75 | }, 76 | getLinks: function getLinks() { 77 | var documentLinks = document.querySelectorAll('a[href]'); 78 | documentLinks = Array.prototype.slice.call(documentLinks, 0); 79 | return documentLinks.filter(cygnus.filterLinks); 80 | }, 81 | filterLinks: function filterLinks(link) { 82 | return link.hostname === window.location.hostname; 83 | }, 84 | dispatchLink: function dispatchLink(key, link) { 85 | // We don't dispatch the link to the worker if it is already being fetched 86 | if (cygnus.fetchingPages.indexOf(link.href) > -1) { 87 | console.info("[Cygnus]: " + link.href + " is already being fetched. Ignoring."); 88 | return; 89 | } 90 | // We don't dispatch the link to the worker if it has already been fetched 91 | if (!cygnus.pages[link]) { 92 | cygnus.fetchingPages.push(link.href); 93 | var messageData = { task: 'fetch', link: link.href }; 94 | cygnus.cygnusWorker.postMessage(JSON.stringify(messageData)); 95 | } 96 | }, 97 | catchLinks: function catchLinks(links) { 98 | links.forEach(function (link, i) { 99 | // We clone these links in case they already have eventlisteners applied. 100 | // This removes them 101 | var clone = link.cloneNode(true); 102 | link.parentNode.replaceChild(clone, link); 103 | clone.addEventListener('click', function (e) { 104 | e.preventDefault(); 105 | if (this.href !== window.location.href) cygnus.startLoadPage(this.href, true); 106 | }); 107 | }); 108 | }, 109 | handlePopState: function handlePopState(event) { 110 | if ('scrollRestoration' in history) { 111 | history.scrollRestoration = 'manual'; 112 | } 113 | if (cygnus.ready) { 114 | cygnus.startLoadPage(document.location); 115 | return true; 116 | } 117 | }, 118 | startLoadPage: function startLoadPage(href) { 119 | var click = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; 120 | 121 | // Get the page from the store. We use "cygnus" rather than "this" here as 122 | // this method can be called from outside the local scope 123 | var page = cygnus.pages[href]; 124 | 125 | // If the requested page isn't in the store for some reason, navigate as 126 | // normal 127 | if (!page) { 128 | window.location.assign(href); 129 | return false; 130 | } 131 | 132 | // Outro animation... 133 | var outro = page.querySelector('body').getAttribute('data-outro'); 134 | if (outro && !!cygnus.isFunction(outro, window)) { 135 | cygnus.getFunction(outro, window).then(function (response) { 136 | cygnus.completeLoadPage(href, click, page); 137 | }, function () { 138 | console.error('[Cygnus]: Outro animation promise errorred. Broken :('); 139 | }); 140 | } else { 141 | cygnus.completeLoadPage(href, click, page); 142 | } 143 | }, 144 | completeLoadPage: function completeLoadPage(href, click, page) { 145 | 146 | // Set the page title from the stored page 147 | document.title = page.querySelector('title').innerText; 148 | 149 | // Set animation attributes on body tag 150 | var pageBody = page.querySelector('body'); 151 | var docBody = document.body; 152 | var outro = pageBody.getAttribute('data-outro'); 153 | var intro = pageBody.getAttribute('data-intro'); 154 | var bodyClass = pageBody.getAttribute('class'); 155 | if (bodyClass != null) { 156 | docBody.setAttribute('class', bodyClass); 157 | } else { 158 | docBody.removeAttribute('class'); 159 | } 160 | if (outro != null) { 161 | docBody.setAttribute("data-outro", outro); 162 | } else { 163 | docBody.removeAttribute("data-outro"); 164 | } 165 | if (intro != null) { 166 | docBody.setAttribute("data-intro", intro); 167 | } else { 168 | docBody.removeAttribute("data-intro"); 169 | } 170 | 171 | // Remove any per-page css file if needed, and add the new one from the page 172 | // to be loaded if present 173 | var documentStylesheets = document.querySelectorAll("link[data-rel='page-css']"); 174 | for (var i = 0, max = documentStylesheets.length; i < max; i++) { 175 | documentStylesheets[i].parentNode.removeChild(documentStylesheets[i]); 176 | } 177 | 178 | var pageStylesheets = page.querySelectorAll("link[data-rel='page-css']"); 179 | for (var j = 0, max = pageStylesheets.length; j < max; j++) { 180 | document.querySelector('head').appendChild(pageStylesheets[i].cloneNode(true)); 181 | } 182 | 183 | // Replace only the content within our page wrapper, as the stuff outside 184 | // that will remain unchanged 185 | var wrapper = document.querySelector(cygnus.options.contentWrapper); 186 | var pageContent = page.querySelector(cygnus.options.contentWrapper).cloneNode(true).innerHTML; 187 | wrapper.innerHTML = pageContent; 188 | 189 | // Update the history object 190 | if (click) window.history.pushState({ url: href, scrollTop: 0 }, '', href); 191 | 192 | // Scroll to the top of new page if from a clicked link 193 | var scrollTop = 0; 194 | if (history.state && history.state.scrollTop) { 195 | scrollTop = history.state.scrollTop; 196 | } 197 | window.scrollTo(0, scrollTop); 198 | 199 | // Intro animation... 200 | intro = page.querySelector('body').getAttribute('data-intro'); 201 | if (intro && !!cygnus.isFunction(intro, window)) { 202 | cygnus.getFunction(intro, window).then(function (response) { 203 | cygnus.postLoadPage(); 204 | }, function () { 205 | console.error('[Cygnus]: Intro animation promise errorred. Broken :('); 206 | }); 207 | } else { 208 | cygnus.postLoadPage(); 209 | } 210 | }, 211 | postLoadPage: function postLoadPage() { 212 | // Re-run the init method. This time it won't start the worker (it is 213 | // already running). Basically it will just check for new links and dispatch 214 | // them to the worker if needed 215 | cygnus.init(); 216 | 217 | var event = new CustomEvent('cygnusPageLoaded', { "detail": { "page": location.pathname } }); 218 | window.dispatchEvent(event); 219 | }, 220 | receivePageData: function receivePageData(data) { 221 | // Remove page from fetchingPages array 222 | var index = cygnus.fetchingPages.indexOf(data.link); 223 | if (index > -1) { 224 | cygnus.fetchingPages.splice(index, 1); 225 | } 226 | // Add received page to the store 227 | cygnus.pages[data.link] = cygnus.parseHTML(data.html); 228 | }, 229 | 230 | // 231 | // UTILITY FUNCTIONS 232 | // These are internal utility functions that are used elsewhere in the script. 233 | // They aren't really useful externally, and I did have them in a separate 234 | // utils file originally, but if this is ever going to be bundled up for NPM 235 | // usage the script will need to be self contained, so I moved them here. 236 | // 237 | 238 | ajaxPromise: function ajaxPromise(url) { 239 | return new Promise(function (resolve, reject) { 240 | var req = new XMLHttpRequest(); 241 | req.open('GET', url); 242 | 243 | req.onload = function () { 244 | if (req.status === 200) { 245 | resolve(req.response); 246 | } else { 247 | reject(new Error(req.statusText)); 248 | } 249 | }; 250 | 251 | req.onerror = function () { 252 | reject(new Error('Network Error')); 253 | }; 254 | 255 | req.send(); 256 | }); 257 | }, 258 | parseHTML: function parseHTML(string) { 259 | var tmp = document.implementation.createHTMLDocument('temp'); 260 | tmp.documentElement.innerHTML = string; 261 | return tmp.documentElement; 262 | }, 263 | isFunction: function isFunction(functionName, context) { 264 | var namespaces = functionName.split('.'); 265 | var func = namespaces.pop(); 266 | for (var k in namespaces) { 267 | context = context[namespaces[k]]; 268 | } 269 | return typeof context[func] === 'function'; 270 | }, 271 | getFunction: function getFunction(functionName, context) { 272 | var args = [].slice.call(_arguments).splice(2); 273 | var namespaces = functionName.split('.'); 274 | var func = namespaces.pop(); 275 | for (var k in namespaces) { 276 | context = context[namespaces[k]]; 277 | } 278 | if (context[func]) { 279 | return context[func].apply(context, args); 280 | } else { 281 | return false; 282 | } 283 | }, 284 | debounce: function debounce(func, wait, immediate) { 285 | var timeout; 286 | return function () { 287 | var context = this, 288 | args = arguments; 289 | var later = function later() { 290 | timeout = null; 291 | if (!immediate) func.apply(context, args); 292 | }; 293 | var callNow = immediate && !timeout; 294 | clearTimeout(timeout); 295 | timeout = setTimeout(later, wait); 296 | if (callNow) func.apply(context, args); 297 | }; 298 | }, 299 | 300 | workerBlob: URL.createObjectURL(new Blob(['const fetchedPages = [];\n self.onmessage = function (msg) {\n const data = JSON.parse(msg.data);\n\n if (data.task === \'fetch\') {\n console.info("[Cygnus worker]: Fetching " + data.link);\n if (fetchedPages.indexOf(data.link) < 0) {\n getPage(data.link).then(function (response) {\n fetchedPages.push(data.link);\n sendToBrowser({ link: data.link, html: response });\n }, function (error) {\n console.error(\'[Cygnus worker]: Failed!\', error);\n });\n }\n }\n if (data.task === \'add\') {\n console.info("[Cygnus worker]: Adding " + data.link + " to list without fetching.");\n if (fetchedPages.indexOf(data.link) < 0) {\n fetchedPages.push(data.link);\n }\n }\n }\n function getPage(url) {\n return new Promise(function (resolve, reject) {\n const req = new XMLHttpRequest();\n req.open(\'GET\', url);\n\n req.onload = function () {\n if (req.status === 200) {\n resolve(req.response);\n } else {\n reject(new Error(req.statusText));\n }\n };\n\n req.onerror = function () {\n reject(new Error(\'Network Error\'));\n };\n\n req.send();\n });\n }\n function sendToBrowser(data) {\n self.postMessage(JSON.stringify(data));\n }'], { type: 'application/javascript' })) 301 | }; 302 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cygnus", 3 | "description": "Fast, graceful, JS-based page loading without going full SPA", 4 | "version": "0.5.5", 5 | "author": "djeglin", 6 | "bugs": { 7 | "url": "https://github.com/djeglin/cygnus-js/issues" 8 | }, 9 | "devDependencies": { 10 | "babel-cli": "^6.10.1", 11 | "babel-preset-es2015": "^6.24.1", 12 | "snazzy": "^4.0.0", 13 | "standard": "^7.1.2" 14 | }, 15 | "homepage": "https://github.com/djeglin/cygnus-js#readme", 16 | "keywords": [ 17 | "ajax", 18 | "cache", 19 | "cygnus", 20 | "fetch", 21 | "load", 22 | "page", 23 | "pushstate", 24 | "state", 25 | "worker" 26 | ], 27 | "license": "MIT", 28 | "main": "build/cygnus.js", 29 | "repository": { 30 | "type": "git", 31 | "url": "https://github.com/djeglin/cygnus-js.git" 32 | }, 33 | "scripts": { 34 | "lint": "standard | snazzy", 35 | "build": "babel src --presets=es2015 -d build", 36 | "watch": "babel src --presets=es2015 -w -d build" 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/cygnus.js: -------------------------------------------------------------------------------- 1 | var _arguments = arguments; 2 | 3 | /* global cygnus, Blob, Worker, XMLHttpRequest */ 4 | 5 | var cygnus = module.exports = { 6 | supportsHistory: !!window.history, 7 | supportsWorkers: !!window.Worker, 8 | supportsPromises: !!Promise, 9 | ready: false, 10 | fetchingPages: [], 11 | pages: {}, 12 | init: (opts) => { 13 | 14 | const defaults = { 15 | contentWrapper: '.wrap', 16 | makeGlobal: false 17 | } 18 | 19 | if (!cygnus.ready) { 20 | if ('scrollRestoration' in history) { 21 | // Back off, browser, I got this... 22 | history.scrollRestoration = 'manual'; 23 | } 24 | window.onpopstate = cygnus.handlePopState; 25 | cygnus.options = Object.assign({}, defaults, opts); 26 | if (cygnus.options.makeGlobal) window.cygnus = cygnus; 27 | window.addEventListener("scroll", cygnus.debounce(function(){ 28 | var st = window.pageYOffset || document.documentElement.scrollTop; 29 | window.history.replaceState({ url: location.href, scrollTop: st }, '', location.href); 30 | }, 100)); 31 | cygnus.ready = true; 32 | } 33 | 34 | // Exit if history api, workers and promises aren't all supported 35 | if (!cygnus.supportsHistory || !cygnus.supportsWorkers || !cygnus.supportsPromises) { 36 | console.info('[Cygnus]: cygnus is not supported in this browser.'); 37 | return false; 38 | } 39 | 40 | // Start up the worker if it hasn't already been started 41 | if (typeof cygnus.cygnusWorker === 'undefined') { 42 | cygnus.cygnusWorker = new Worker(cygnus.workerBlob); 43 | cygnus.completeInit(); 44 | } else { 45 | cygnus.completeInit(); 46 | } 47 | }, 48 | completeInit: () => { 49 | // Respond to the worker 50 | cygnus.cygnusWorker.onmessage = e => { 51 | cygnus.receivePageData(JSON.parse(e.data)); 52 | }; 53 | 54 | // Add current page without re-fectching it 55 | if (!cygnus.pages[window.location.href]) cygnus.getCurrentPage(); 56 | 57 | // Get list of links and send them off to the worker 58 | let links = cygnus.getLinks(); 59 | links.map((current, index, arr) => cygnus.dispatchLink(index, arr[index]) ); 60 | 61 | // Handle clicks on links 62 | cygnus.catchLinks(links); 63 | }, 64 | getCurrentPage: () => { 65 | console.info("[Cygnus]: Current page isn't in store. Adding from html already loaded in browser."); 66 | // Add the current page's html to the store 67 | cygnus.pages[window.location.href] = cygnus.parseHTML(document.documentElement.outerHTML); 68 | const messageData = { task: 'add', link: window.location.href }; 69 | // Notify the worker that this page doesn't need to be fetched 70 | cygnus.cygnusWorker.postMessage(JSON.stringify(messageData)); 71 | }, 72 | getLinks: () => { 73 | let documentLinks = document.querySelectorAll('a[href]'); 74 | documentLinks = Array.prototype.slice.call(documentLinks, 0); 75 | return documentLinks.filter(cygnus.filterLinks); 76 | }, 77 | filterLinks: link => { 78 | return link.hostname === window.location.hostname; 79 | }, 80 | dispatchLink: (key, link) => { 81 | // We don't dispatch the link to the worker if it is already being fetched 82 | if (cygnus.fetchingPages.indexOf(link.href) > -1) { 83 | console.info("[Cygnus]: " + link.href + " is already being fetched. Ignoring."); 84 | return; 85 | } 86 | // We don't dispatch the link to the worker if it has already been fetched 87 | if (!cygnus.pages[link]) { 88 | cygnus.fetchingPages.push(link.href); 89 | const messageData = { task: 'fetch', link: link.href }; 90 | cygnus.cygnusWorker.postMessage(JSON.stringify(messageData)); 91 | } 92 | }, 93 | catchLinks: links => { 94 | links.forEach((link, i) => { 95 | // We clone these links in case they already have eventlisteners applied. 96 | // This removes them 97 | const clone = link.cloneNode(true); 98 | link.parentNode.replaceChild(clone, link); 99 | clone.addEventListener('click', function (e) { 100 | e.preventDefault(); 101 | if (this.href !== window.location.href) cygnus.startLoadPage(this.href, true); 102 | }); 103 | }); 104 | }, 105 | handlePopState: event => { 106 | if ('scrollRestoration' in history) { 107 | history.scrollRestoration = 'manual'; 108 | } 109 | if (cygnus.ready) { 110 | cygnus.startLoadPage(document.location); 111 | return true; 112 | } 113 | }, 114 | startLoadPage: (href, click = false) => { 115 | // Get the page from the store. We use "cygnus" rather than "this" here as 116 | // this method can be called from outside the local scope 117 | const page = cygnus.pages[href]; 118 | 119 | // If the requested page isn't in the store for some reason, navigate as 120 | // normal 121 | if (!page) { 122 | window.location.assign(href); 123 | return false; 124 | } 125 | 126 | // Outro animation... 127 | const outro = page.querySelector('body').getAttribute('data-outro'); 128 | if (outro && !!cygnus.isFunction(outro, window)) { 129 | cygnus.getFunction(outro, window).then(response => { 130 | cygnus.completeLoadPage(href, click, page); 131 | }, () => { 132 | console.error('[Cygnus]: Outro animation promise errorred. Broken :('); 133 | }); 134 | } else { 135 | cygnus.completeLoadPage(href, click, page); 136 | } 137 | }, 138 | completeLoadPage: (href, click, page) => { 139 | 140 | // Set the page title from the stored page 141 | document.title = page.querySelector('title').innerText; 142 | 143 | // Set animation attributes on body tag 144 | let pageBody = page.querySelector('body'); 145 | let docBody = document.body; 146 | let outro = pageBody.getAttribute('data-outro'); 147 | let intro = pageBody.getAttribute('data-intro'); 148 | let bodyClass = pageBody.getAttribute('class'); 149 | if (bodyClass != null) { 150 | docBody.setAttribute('class', bodyClass); 151 | } else { 152 | docBody.removeAttribute('class'); 153 | } 154 | if (outro != null) { 155 | docBody.setAttribute("data-outro", outro); 156 | } else { 157 | docBody.removeAttribute("data-outro"); 158 | } 159 | if (intro != null) { 160 | docBody.setAttribute("data-intro", intro); 161 | } else { 162 | docBody.removeAttribute("data-intro"); 163 | } 164 | 165 | // Remove any per-page css file if needed, and add the new one from the page 166 | // to be loaded if present 167 | const documentStylesheets = document.querySelectorAll("link[data-rel='page-css']"); 168 | for (var i = 0, max = documentStylesheets.length; i < max; i++) { 169 | documentStylesheets[i].parentNode.removeChild(documentStylesheets[i]); 170 | } 171 | 172 | const pageStylesheets = page.querySelectorAll("link[data-rel='page-css']"); 173 | for (var j = 0, max = pageStylesheets.length; j < max; j++) { 174 | document.querySelector('head').appendChild(pageStylesheets[i].cloneNode(true)); 175 | } 176 | 177 | // Replace only the content within our page wrapper, as the stuff outside 178 | // that will remain unchanged 179 | const wrapper = document.querySelector(cygnus.options.contentWrapper); 180 | const pageContent = page.querySelector(cygnus.options.contentWrapper).cloneNode(true).innerHTML; 181 | wrapper.innerHTML = pageContent; 182 | 183 | // Update the history object 184 | if (click) window.history.pushState({ url: href, scrollTop: 0 }, '', href); 185 | 186 | // Scroll to the top of new page if from a clicked link 187 | var scrollTop = 0; 188 | if (history.state && history.state.scrollTop) { 189 | scrollTop = history.state.scrollTop; 190 | } 191 | window.scrollTo(0, scrollTop); 192 | 193 | // Intro animation... 194 | intro = page.querySelector('body').getAttribute('data-intro'); 195 | if (intro && !!cygnus.isFunction(intro, window)) { 196 | cygnus.getFunction(intro, window).then(response => { 197 | cygnus.postLoadPage(); 198 | }, () => { 199 | console.error('[Cygnus]: Intro animation promise errorred. Broken :('); 200 | }); 201 | } else { 202 | cygnus.postLoadPage(); 203 | } 204 | }, 205 | postLoadPage: () => { 206 | // Re-run the init method. This time it won't start the worker (it is 207 | // already running). Basically it will just check for new links and dispatch 208 | // them to the worker if needed 209 | cygnus.init(); 210 | 211 | const event = new CustomEvent('cygnusPageLoaded', { "detail": { "page" : location.pathname } }); 212 | window.dispatchEvent(event); 213 | }, 214 | receivePageData: data => { 215 | // Remove page from fetchingPages array 216 | var index = cygnus.fetchingPages.indexOf(data.link); 217 | if (index > -1) { 218 | cygnus.fetchingPages.splice(index, 1); 219 | } 220 | // Add received page to the store 221 | cygnus.pages[data.link] = cygnus.parseHTML(data.html); 222 | }, 223 | 224 | // 225 | // UTILITY FUNCTIONS 226 | // These are internal utility functions that are used elsewhere in the script. 227 | // They aren't really useful externally, and I did have them in a separate 228 | // utils file originally, but if this is ever going to be bundled up for NPM 229 | // usage the script will need to be self contained, so I moved them here. 230 | // 231 | 232 | ajaxPromise: url => { 233 | return new Promise((resolve, reject) => { 234 | const req = new XMLHttpRequest(); 235 | req.open('GET', url); 236 | 237 | req.onload = () => { 238 | if (req.status === 200) { 239 | resolve(req.response); 240 | } else { 241 | reject(new Error(req.statusText)); 242 | } 243 | }; 244 | 245 | req.onerror = () => { 246 | reject(new Error('Network Error')); 247 | }; 248 | 249 | req.send(); 250 | }); 251 | }, 252 | parseHTML: string => { 253 | const tmp = document.implementation.createHTMLDocument('temp'); 254 | tmp.documentElement.innerHTML = string; 255 | return tmp.documentElement; 256 | }, 257 | isFunction: (functionName, context) => { 258 | let namespaces = functionName.split('.'); 259 | const func = namespaces.pop(); 260 | for (let k in namespaces) { 261 | context = context[namespaces[k]]; 262 | } 263 | return typeof context[func] === 'function'; 264 | }, 265 | getFunction: (functionName, context) => { 266 | const args = [].slice.call(_arguments).splice(2); 267 | const namespaces = functionName.split('.'); 268 | const func = namespaces.pop(); 269 | for (const k in namespaces) { 270 | context = context[namespaces[k]]; 271 | } 272 | if (context[func]) { 273 | return context[func].apply(context, args); 274 | } else { 275 | return false; 276 | } 277 | }, 278 | debounce: function debounce(func, wait, immediate) { 279 | var timeout; 280 | return function() { 281 | var context = this, args = arguments; 282 | var later = function() { 283 | timeout = null; 284 | if (!immediate) func.apply(context, args); 285 | }; 286 | var callNow = immediate && !timeout; 287 | clearTimeout(timeout); 288 | timeout = setTimeout(later, wait); 289 | if (callNow) func.apply(context, args); 290 | }; 291 | }, 292 | 293 | workerBlob: URL.createObjectURL( new Blob([ 294 | `const fetchedPages = []; 295 | self.onmessage = function (msg) { 296 | const data = JSON.parse(msg.data); 297 | 298 | if (data.task === 'fetch') { 299 | console.info("[Cygnus worker]: Fetching " + data.link); 300 | if (fetchedPages.indexOf(data.link) < 0) { 301 | getPage(data.link).then(function (response) { 302 | fetchedPages.push(data.link); 303 | sendToBrowser({ link: data.link, html: response }); 304 | }, function (error) { 305 | console.error('[Cygnus worker]: Failed!', error); 306 | }); 307 | } 308 | } 309 | if (data.task === 'add') { 310 | console.info("[Cygnus worker]: Adding " + data.link + " to list without fetching."); 311 | if (fetchedPages.indexOf(data.link) < 0) { 312 | fetchedPages.push(data.link); 313 | } 314 | } 315 | } 316 | function getPage(url) { 317 | return new Promise(function (resolve, reject) { 318 | const req = new XMLHttpRequest(); 319 | req.open('GET', url); 320 | 321 | req.onload = function () { 322 | if (req.status === 200) { 323 | resolve(req.response); 324 | } else { 325 | reject(new Error(req.statusText)); 326 | } 327 | }; 328 | 329 | req.onerror = function () { 330 | reject(new Error('Network Error')); 331 | }; 332 | 333 | req.send(); 334 | }); 335 | } 336 | function sendToBrowser(data) { 337 | self.postMessage(JSON.stringify(data)); 338 | }` 339 | ], {type: 'application/javascript'} )) 340 | };     341 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | abbrev@1: 6 | version "1.1.1" 7 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 8 | 9 | acorn-jsx@^3.0.0: 10 | version "3.0.1" 11 | resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" 12 | dependencies: 13 | acorn "^3.0.4" 14 | 15 | acorn@^3.0.4, acorn@^3.1.0: 16 | version "3.3.0" 17 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" 18 | 19 | ajv-keywords@^1.0.0: 20 | version "1.5.1" 21 | resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" 22 | 23 | ajv@^4.7.0: 24 | version "4.11.8" 25 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" 26 | dependencies: 27 | co "^4.6.0" 28 | json-stable-stringify "^1.0.1" 29 | 30 | ansi-escapes@^1.1.0: 31 | version "1.4.0" 32 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" 33 | 34 | ansi-regex@^2.0.0: 35 | version "2.1.1" 36 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 37 | 38 | ansi-regex@^3.0.0: 39 | version "3.0.0" 40 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 41 | 42 | ansi-styles@^2.2.1: 43 | version "2.2.1" 44 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" 45 | 46 | anymatch@^1.3.0: 47 | version "1.3.2" 48 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" 49 | dependencies: 50 | micromatch "^2.1.5" 51 | normalize-path "^2.0.0" 52 | 53 | aproba@^1.0.3: 54 | version "1.2.0" 55 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 56 | 57 | are-we-there-yet@~1.1.2: 58 | version "1.1.5" 59 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" 60 | dependencies: 61 | delegates "^1.0.0" 62 | readable-stream "^2.0.6" 63 | 64 | argparse@^1.0.7: 65 | version "1.0.10" 66 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 67 | dependencies: 68 | sprintf-js "~1.0.2" 69 | 70 | arr-diff@^2.0.0: 71 | version "2.0.0" 72 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 73 | dependencies: 74 | arr-flatten "^1.0.1" 75 | 76 | arr-flatten@^1.0.1: 77 | version "1.1.0" 78 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 79 | 80 | array-union@^1.0.1: 81 | version "1.0.2" 82 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" 83 | dependencies: 84 | array-uniq "^1.0.1" 85 | 86 | array-uniq@^1.0.1: 87 | version "1.0.3" 88 | resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" 89 | 90 | array-unique@^0.2.1: 91 | version "0.2.1" 92 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 93 | 94 | arrify@^1.0.0: 95 | version "1.0.1" 96 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" 97 | 98 | async-each@^1.0.0: 99 | version "1.0.1" 100 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 101 | 102 | babel-cli@^6.10.1: 103 | version "6.26.0" 104 | resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" 105 | dependencies: 106 | babel-core "^6.26.0" 107 | babel-polyfill "^6.26.0" 108 | babel-register "^6.26.0" 109 | babel-runtime "^6.26.0" 110 | commander "^2.11.0" 111 | convert-source-map "^1.5.0" 112 | fs-readdir-recursive "^1.0.0" 113 | glob "^7.1.2" 114 | lodash "^4.17.4" 115 | output-file-sync "^1.1.2" 116 | path-is-absolute "^1.0.1" 117 | slash "^1.0.0" 118 | source-map "^0.5.6" 119 | v8flags "^2.1.1" 120 | optionalDependencies: 121 | chokidar "^1.6.1" 122 | 123 | babel-code-frame@^6.26.0: 124 | version "6.26.0" 125 | resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" 126 | dependencies: 127 | chalk "^1.1.3" 128 | esutils "^2.0.2" 129 | js-tokens "^3.0.2" 130 | 131 | babel-core@^6.26.0: 132 | version "6.26.3" 133 | resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" 134 | dependencies: 135 | babel-code-frame "^6.26.0" 136 | babel-generator "^6.26.0" 137 | babel-helpers "^6.24.1" 138 | babel-messages "^6.23.0" 139 | babel-register "^6.26.0" 140 | babel-runtime "^6.26.0" 141 | babel-template "^6.26.0" 142 | babel-traverse "^6.26.0" 143 | babel-types "^6.26.0" 144 | babylon "^6.18.0" 145 | convert-source-map "^1.5.1" 146 | debug "^2.6.9" 147 | json5 "^0.5.1" 148 | lodash "^4.17.4" 149 | minimatch "^3.0.4" 150 | path-is-absolute "^1.0.1" 151 | private "^0.1.8" 152 | slash "^1.0.0" 153 | source-map "^0.5.7" 154 | 155 | babel-generator@^6.26.0: 156 | version "6.26.1" 157 | resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" 158 | dependencies: 159 | babel-messages "^6.23.0" 160 | babel-runtime "^6.26.0" 161 | babel-types "^6.26.0" 162 | detect-indent "^4.0.0" 163 | jsesc "^1.3.0" 164 | lodash "^4.17.4" 165 | source-map "^0.5.7" 166 | trim-right "^1.0.1" 167 | 168 | babel-helper-call-delegate@^6.24.1: 169 | version "6.24.1" 170 | resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" 171 | dependencies: 172 | babel-helper-hoist-variables "^6.24.1" 173 | babel-runtime "^6.22.0" 174 | babel-traverse "^6.24.1" 175 | babel-types "^6.24.1" 176 | 177 | babel-helper-define-map@^6.24.1: 178 | version "6.26.0" 179 | resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" 180 | dependencies: 181 | babel-helper-function-name "^6.24.1" 182 | babel-runtime "^6.26.0" 183 | babel-types "^6.26.0" 184 | lodash "^4.17.4" 185 | 186 | babel-helper-function-name@^6.24.1: 187 | version "6.24.1" 188 | resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" 189 | dependencies: 190 | babel-helper-get-function-arity "^6.24.1" 191 | babel-runtime "^6.22.0" 192 | babel-template "^6.24.1" 193 | babel-traverse "^6.24.1" 194 | babel-types "^6.24.1" 195 | 196 | babel-helper-get-function-arity@^6.24.1: 197 | version "6.24.1" 198 | resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" 199 | dependencies: 200 | babel-runtime "^6.22.0" 201 | babel-types "^6.24.1" 202 | 203 | babel-helper-hoist-variables@^6.24.1: 204 | version "6.24.1" 205 | resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" 206 | dependencies: 207 | babel-runtime "^6.22.0" 208 | babel-types "^6.24.1" 209 | 210 | babel-helper-optimise-call-expression@^6.24.1: 211 | version "6.24.1" 212 | resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" 213 | dependencies: 214 | babel-runtime "^6.22.0" 215 | babel-types "^6.24.1" 216 | 217 | babel-helper-regex@^6.24.1: 218 | version "6.26.0" 219 | resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" 220 | dependencies: 221 | babel-runtime "^6.26.0" 222 | babel-types "^6.26.0" 223 | lodash "^4.17.4" 224 | 225 | babel-helper-replace-supers@^6.24.1: 226 | version "6.24.1" 227 | resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" 228 | dependencies: 229 | babel-helper-optimise-call-expression "^6.24.1" 230 | babel-messages "^6.23.0" 231 | babel-runtime "^6.22.0" 232 | babel-template "^6.24.1" 233 | babel-traverse "^6.24.1" 234 | babel-types "^6.24.1" 235 | 236 | babel-helpers@^6.24.1: 237 | version "6.24.1" 238 | resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" 239 | dependencies: 240 | babel-runtime "^6.22.0" 241 | babel-template "^6.24.1" 242 | 243 | babel-messages@^6.23.0: 244 | version "6.23.0" 245 | resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" 246 | dependencies: 247 | babel-runtime "^6.22.0" 248 | 249 | babel-plugin-check-es2015-constants@^6.22.0: 250 | version "6.22.0" 251 | resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" 252 | dependencies: 253 | babel-runtime "^6.22.0" 254 | 255 | babel-plugin-transform-es2015-arrow-functions@^6.22.0: 256 | version "6.22.0" 257 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" 258 | dependencies: 259 | babel-runtime "^6.22.0" 260 | 261 | babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: 262 | version "6.22.0" 263 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" 264 | dependencies: 265 | babel-runtime "^6.22.0" 266 | 267 | babel-plugin-transform-es2015-block-scoping@^6.24.1: 268 | version "6.26.0" 269 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" 270 | dependencies: 271 | babel-runtime "^6.26.0" 272 | babel-template "^6.26.0" 273 | babel-traverse "^6.26.0" 274 | babel-types "^6.26.0" 275 | lodash "^4.17.4" 276 | 277 | babel-plugin-transform-es2015-classes@^6.24.1: 278 | version "6.24.1" 279 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" 280 | dependencies: 281 | babel-helper-define-map "^6.24.1" 282 | babel-helper-function-name "^6.24.1" 283 | babel-helper-optimise-call-expression "^6.24.1" 284 | babel-helper-replace-supers "^6.24.1" 285 | babel-messages "^6.23.0" 286 | babel-runtime "^6.22.0" 287 | babel-template "^6.24.1" 288 | babel-traverse "^6.24.1" 289 | babel-types "^6.24.1" 290 | 291 | babel-plugin-transform-es2015-computed-properties@^6.24.1: 292 | version "6.24.1" 293 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" 294 | dependencies: 295 | babel-runtime "^6.22.0" 296 | babel-template "^6.24.1" 297 | 298 | babel-plugin-transform-es2015-destructuring@^6.22.0: 299 | version "6.23.0" 300 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" 301 | dependencies: 302 | babel-runtime "^6.22.0" 303 | 304 | babel-plugin-transform-es2015-duplicate-keys@^6.24.1: 305 | version "6.24.1" 306 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" 307 | dependencies: 308 | babel-runtime "^6.22.0" 309 | babel-types "^6.24.1" 310 | 311 | babel-plugin-transform-es2015-for-of@^6.22.0: 312 | version "6.23.0" 313 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" 314 | dependencies: 315 | babel-runtime "^6.22.0" 316 | 317 | babel-plugin-transform-es2015-function-name@^6.24.1: 318 | version "6.24.1" 319 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" 320 | dependencies: 321 | babel-helper-function-name "^6.24.1" 322 | babel-runtime "^6.22.0" 323 | babel-types "^6.24.1" 324 | 325 | babel-plugin-transform-es2015-literals@^6.22.0: 326 | version "6.22.0" 327 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" 328 | dependencies: 329 | babel-runtime "^6.22.0" 330 | 331 | babel-plugin-transform-es2015-modules-amd@^6.24.1: 332 | version "6.24.1" 333 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" 334 | dependencies: 335 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 336 | babel-runtime "^6.22.0" 337 | babel-template "^6.24.1" 338 | 339 | babel-plugin-transform-es2015-modules-commonjs@^6.24.1: 340 | version "6.26.2" 341 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.2.tgz#58a793863a9e7ca870bdc5a881117ffac27db6f3" 342 | dependencies: 343 | babel-plugin-transform-strict-mode "^6.24.1" 344 | babel-runtime "^6.26.0" 345 | babel-template "^6.26.0" 346 | babel-types "^6.26.0" 347 | 348 | babel-plugin-transform-es2015-modules-systemjs@^6.24.1: 349 | version "6.24.1" 350 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" 351 | dependencies: 352 | babel-helper-hoist-variables "^6.24.1" 353 | babel-runtime "^6.22.0" 354 | babel-template "^6.24.1" 355 | 356 | babel-plugin-transform-es2015-modules-umd@^6.24.1: 357 | version "6.24.1" 358 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" 359 | dependencies: 360 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 361 | babel-runtime "^6.22.0" 362 | babel-template "^6.24.1" 363 | 364 | babel-plugin-transform-es2015-object-super@^6.24.1: 365 | version "6.24.1" 366 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" 367 | dependencies: 368 | babel-helper-replace-supers "^6.24.1" 369 | babel-runtime "^6.22.0" 370 | 371 | babel-plugin-transform-es2015-parameters@^6.24.1: 372 | version "6.24.1" 373 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" 374 | dependencies: 375 | babel-helper-call-delegate "^6.24.1" 376 | babel-helper-get-function-arity "^6.24.1" 377 | babel-runtime "^6.22.0" 378 | babel-template "^6.24.1" 379 | babel-traverse "^6.24.1" 380 | babel-types "^6.24.1" 381 | 382 | babel-plugin-transform-es2015-shorthand-properties@^6.24.1: 383 | version "6.24.1" 384 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" 385 | dependencies: 386 | babel-runtime "^6.22.0" 387 | babel-types "^6.24.1" 388 | 389 | babel-plugin-transform-es2015-spread@^6.22.0: 390 | version "6.22.0" 391 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" 392 | dependencies: 393 | babel-runtime "^6.22.0" 394 | 395 | babel-plugin-transform-es2015-sticky-regex@^6.24.1: 396 | version "6.24.1" 397 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" 398 | dependencies: 399 | babel-helper-regex "^6.24.1" 400 | babel-runtime "^6.22.0" 401 | babel-types "^6.24.1" 402 | 403 | babel-plugin-transform-es2015-template-literals@^6.22.0: 404 | version "6.22.0" 405 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" 406 | dependencies: 407 | babel-runtime "^6.22.0" 408 | 409 | babel-plugin-transform-es2015-typeof-symbol@^6.22.0: 410 | version "6.23.0" 411 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" 412 | dependencies: 413 | babel-runtime "^6.22.0" 414 | 415 | babel-plugin-transform-es2015-unicode-regex@^6.24.1: 416 | version "6.24.1" 417 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" 418 | dependencies: 419 | babel-helper-regex "^6.24.1" 420 | babel-runtime "^6.22.0" 421 | regexpu-core "^2.0.0" 422 | 423 | babel-plugin-transform-regenerator@^6.24.1: 424 | version "6.26.0" 425 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" 426 | dependencies: 427 | regenerator-transform "^0.10.0" 428 | 429 | babel-plugin-transform-strict-mode@^6.24.1: 430 | version "6.24.1" 431 | resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" 432 | dependencies: 433 | babel-runtime "^6.22.0" 434 | babel-types "^6.24.1" 435 | 436 | babel-polyfill@^6.26.0: 437 | version "6.26.0" 438 | resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" 439 | dependencies: 440 | babel-runtime "^6.26.0" 441 | core-js "^2.5.0" 442 | regenerator-runtime "^0.10.5" 443 | 444 | babel-preset-es2015@^6.24.1: 445 | version "6.24.1" 446 | resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" 447 | dependencies: 448 | babel-plugin-check-es2015-constants "^6.22.0" 449 | babel-plugin-transform-es2015-arrow-functions "^6.22.0" 450 | babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" 451 | babel-plugin-transform-es2015-block-scoping "^6.24.1" 452 | babel-plugin-transform-es2015-classes "^6.24.1" 453 | babel-plugin-transform-es2015-computed-properties "^6.24.1" 454 | babel-plugin-transform-es2015-destructuring "^6.22.0" 455 | babel-plugin-transform-es2015-duplicate-keys "^6.24.1" 456 | babel-plugin-transform-es2015-for-of "^6.22.0" 457 | babel-plugin-transform-es2015-function-name "^6.24.1" 458 | babel-plugin-transform-es2015-literals "^6.22.0" 459 | babel-plugin-transform-es2015-modules-amd "^6.24.1" 460 | babel-plugin-transform-es2015-modules-commonjs "^6.24.1" 461 | babel-plugin-transform-es2015-modules-systemjs "^6.24.1" 462 | babel-plugin-transform-es2015-modules-umd "^6.24.1" 463 | babel-plugin-transform-es2015-object-super "^6.24.1" 464 | babel-plugin-transform-es2015-parameters "^6.24.1" 465 | babel-plugin-transform-es2015-shorthand-properties "^6.24.1" 466 | babel-plugin-transform-es2015-spread "^6.22.0" 467 | babel-plugin-transform-es2015-sticky-regex "^6.24.1" 468 | babel-plugin-transform-es2015-template-literals "^6.22.0" 469 | babel-plugin-transform-es2015-typeof-symbol "^6.22.0" 470 | babel-plugin-transform-es2015-unicode-regex "^6.24.1" 471 | babel-plugin-transform-regenerator "^6.24.1" 472 | 473 | babel-register@^6.26.0: 474 | version "6.26.0" 475 | resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" 476 | dependencies: 477 | babel-core "^6.26.0" 478 | babel-runtime "^6.26.0" 479 | core-js "^2.5.0" 480 | home-or-tmp "^2.0.0" 481 | lodash "^4.17.4" 482 | mkdirp "^0.5.1" 483 | source-map-support "^0.4.15" 484 | 485 | babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: 486 | version "6.26.0" 487 | resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" 488 | dependencies: 489 | core-js "^2.4.0" 490 | regenerator-runtime "^0.11.0" 491 | 492 | babel-template@^6.24.1, babel-template@^6.26.0: 493 | version "6.26.0" 494 | resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" 495 | dependencies: 496 | babel-runtime "^6.26.0" 497 | babel-traverse "^6.26.0" 498 | babel-types "^6.26.0" 499 | babylon "^6.18.0" 500 | lodash "^4.17.4" 501 | 502 | babel-traverse@^6.24.1, babel-traverse@^6.26.0: 503 | version "6.26.0" 504 | resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" 505 | dependencies: 506 | babel-code-frame "^6.26.0" 507 | babel-messages "^6.23.0" 508 | babel-runtime "^6.26.0" 509 | babel-types "^6.26.0" 510 | babylon "^6.18.0" 511 | debug "^2.6.8" 512 | globals "^9.18.0" 513 | invariant "^2.2.2" 514 | lodash "^4.17.4" 515 | 516 | babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: 517 | version "6.26.0" 518 | resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" 519 | dependencies: 520 | babel-runtime "^6.26.0" 521 | esutils "^2.0.2" 522 | lodash "^4.17.4" 523 | to-fast-properties "^1.0.3" 524 | 525 | babylon@^6.18.0: 526 | version "6.18.0" 527 | resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" 528 | 529 | balanced-match@^1.0.0: 530 | version "1.0.0" 531 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 532 | 533 | binary-extensions@^1.0.0: 534 | version "1.11.0" 535 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" 536 | 537 | brace-expansion@^1.1.7: 538 | version "1.1.11" 539 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 540 | dependencies: 541 | balanced-match "^1.0.0" 542 | concat-map "0.0.1" 543 | 544 | braces@^1.8.2: 545 | version "1.8.5" 546 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 547 | dependencies: 548 | expand-range "^1.8.1" 549 | preserve "^0.2.0" 550 | repeat-element "^1.1.2" 551 | 552 | buffer-from@^1.0.0: 553 | version "1.1.1" 554 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" 555 | 556 | caller-path@^0.1.0: 557 | version "0.1.0" 558 | resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" 559 | dependencies: 560 | callsites "^0.2.0" 561 | 562 | callsites@^0.2.0: 563 | version "0.2.0" 564 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" 565 | 566 | chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: 567 | version "1.1.3" 568 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" 569 | dependencies: 570 | ansi-styles "^2.2.1" 571 | escape-string-regexp "^1.0.2" 572 | has-ansi "^2.0.0" 573 | strip-ansi "^3.0.0" 574 | supports-color "^2.0.0" 575 | 576 | chokidar@^1.6.1: 577 | version "1.7.0" 578 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" 579 | dependencies: 580 | anymatch "^1.3.0" 581 | async-each "^1.0.0" 582 | glob-parent "^2.0.0" 583 | inherits "^2.0.1" 584 | is-binary-path "^1.0.0" 585 | is-glob "^2.0.0" 586 | path-is-absolute "^1.0.0" 587 | readdirp "^2.0.0" 588 | optionalDependencies: 589 | fsevents "^1.0.0" 590 | 591 | chownr@^1.0.1: 592 | version "1.0.1" 593 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" 594 | 595 | circular-json@^0.3.1: 596 | version "0.3.3" 597 | resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" 598 | 599 | cli-cursor@^1.0.1: 600 | version "1.0.2" 601 | resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" 602 | dependencies: 603 | restore-cursor "^1.0.1" 604 | 605 | cli-width@^2.0.0: 606 | version "2.2.0" 607 | resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" 608 | 609 | clone@^1.0.2: 610 | version "1.0.4" 611 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" 612 | 613 | co@^4.6.0: 614 | version "4.6.0" 615 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 616 | 617 | code-point-at@^1.0.0: 618 | version "1.1.0" 619 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 620 | 621 | commander@^2.11.0: 622 | version "2.17.0" 623 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.0.tgz#9d07b25e2a6f198b76d8b756a0e8a9604a6a1a60" 624 | 625 | concat-map@0.0.1: 626 | version "0.0.1" 627 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 628 | 629 | concat-stream@^1.4.6, concat-stream@^1.5.0: 630 | version "1.6.2" 631 | resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" 632 | dependencies: 633 | buffer-from "^1.0.0" 634 | inherits "^2.0.3" 635 | readable-stream "^2.2.2" 636 | typedarray "^0.0.6" 637 | 638 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 639 | version "1.1.0" 640 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 641 | 642 | convert-source-map@^1.5.0, convert-source-map@^1.5.1: 643 | version "1.5.1" 644 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" 645 | 646 | core-js@^2.4.0, core-js@^2.5.0: 647 | version "2.5.7" 648 | resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e" 649 | 650 | core-util-is@~1.0.0: 651 | version "1.0.2" 652 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 653 | 654 | d@1: 655 | version "1.0.0" 656 | resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" 657 | dependencies: 658 | es5-ext "^0.10.9" 659 | 660 | debug-log@^1.0.0: 661 | version "1.0.1" 662 | resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" 663 | 664 | debug@^2.1.1, debug@^2.1.2, debug@^2.6.8, debug@^2.6.9: 665 | version "2.6.9" 666 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 667 | dependencies: 668 | ms "2.0.0" 669 | 670 | deep-extend@^0.6.0: 671 | version "0.6.0" 672 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 673 | 674 | deep-is@~0.1.3: 675 | version "0.1.3" 676 | resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" 677 | 678 | defaults@^1.0.2: 679 | version "1.0.3" 680 | resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.3.tgz#c656051e9817d9ff08ed881477f3fe4019f3ef7d" 681 | dependencies: 682 | clone "^1.0.2" 683 | 684 | deglob@^1.0.0: 685 | version "1.1.2" 686 | resolved "https://registry.yarnpkg.com/deglob/-/deglob-1.1.2.tgz#76d577c25fe3f7329412a2b59eadea57ac500e3f" 687 | dependencies: 688 | find-root "^1.0.0" 689 | glob "^7.0.5" 690 | ignore "^3.0.9" 691 | pkg-config "^1.1.0" 692 | run-parallel "^1.1.2" 693 | uniq "^1.0.1" 694 | xtend "^4.0.0" 695 | 696 | del@^2.0.2: 697 | version "2.2.2" 698 | resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" 699 | dependencies: 700 | globby "^5.0.0" 701 | is-path-cwd "^1.0.0" 702 | is-path-in-cwd "^1.0.0" 703 | object-assign "^4.0.1" 704 | pify "^2.0.0" 705 | pinkie-promise "^2.0.0" 706 | rimraf "^2.2.8" 707 | 708 | delegates@^1.0.0: 709 | version "1.0.0" 710 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 711 | 712 | detect-indent@^4.0.0: 713 | version "4.0.0" 714 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" 715 | dependencies: 716 | repeating "^2.0.0" 717 | 718 | detect-libc@^1.0.2: 719 | version "1.0.3" 720 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 721 | 722 | doctrine@^1.2.1, doctrine@^1.2.2: 723 | version "1.5.0" 724 | resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" 725 | dependencies: 726 | esutils "^2.0.2" 727 | isarray "^1.0.0" 728 | 729 | es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: 730 | version "0.10.45" 731 | resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.45.tgz#0bfdf7b473da5919d5adf3bd25ceb754fccc3653" 732 | dependencies: 733 | es6-iterator "~2.0.3" 734 | es6-symbol "~3.1.1" 735 | next-tick "1" 736 | 737 | es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: 738 | version "2.0.3" 739 | resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" 740 | dependencies: 741 | d "1" 742 | es5-ext "^0.10.35" 743 | es6-symbol "^3.1.1" 744 | 745 | es6-map@^0.1.3: 746 | version "0.1.5" 747 | resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" 748 | dependencies: 749 | d "1" 750 | es5-ext "~0.10.14" 751 | es6-iterator "~2.0.1" 752 | es6-set "~0.1.5" 753 | es6-symbol "~3.1.1" 754 | event-emitter "~0.3.5" 755 | 756 | es6-set@~0.1.5: 757 | version "0.1.5" 758 | resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" 759 | dependencies: 760 | d "1" 761 | es5-ext "~0.10.14" 762 | es6-iterator "~2.0.1" 763 | es6-symbol "3.1.1" 764 | event-emitter "~0.3.5" 765 | 766 | es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: 767 | version "3.1.1" 768 | resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" 769 | dependencies: 770 | d "1" 771 | es5-ext "~0.10.14" 772 | 773 | es6-weak-map@^2.0.1: 774 | version "2.0.2" 775 | resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" 776 | dependencies: 777 | d "1" 778 | es5-ext "^0.10.14" 779 | es6-iterator "^2.0.1" 780 | es6-symbol "^3.1.1" 781 | 782 | escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: 783 | version "1.0.5" 784 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 785 | 786 | escope@^3.6.0: 787 | version "3.6.0" 788 | resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" 789 | dependencies: 790 | es6-map "^0.1.3" 791 | es6-weak-map "^2.0.1" 792 | esrecurse "^4.1.0" 793 | estraverse "^4.1.1" 794 | 795 | eslint-config-standard-jsx@1.2.1: 796 | version "1.2.1" 797 | resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-1.2.1.tgz#0d19b1705f0ad48363ef2a8bbfa71df012d989b3" 798 | 799 | eslint-config-standard@5.3.1: 800 | version "5.3.1" 801 | resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-5.3.1.tgz#591c969151744132f561d3b915a812ea413fe490" 802 | 803 | eslint-plugin-promise@^1.0.8: 804 | version "1.3.2" 805 | resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-1.3.2.tgz#fce332d6f5ff523200a537704863ec3c2422ba7c" 806 | 807 | eslint-plugin-react@^5.0.1: 808 | version "5.2.2" 809 | resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-5.2.2.tgz#7db068e1f5487f6871e4deef36a381c303eac161" 810 | dependencies: 811 | doctrine "^1.2.2" 812 | jsx-ast-utils "^1.2.1" 813 | 814 | eslint-plugin-standard@^1.3.1: 815 | version "1.3.3" 816 | resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-1.3.3.tgz#a3085451523431e76f409c70cb8f94e32bf0ec7f" 817 | 818 | eslint@~2.10.2: 819 | version "2.10.2" 820 | resolved "https://registry.yarnpkg.com/eslint/-/eslint-2.10.2.tgz#b2309482fef043d3203365a321285e6cce01c3d7" 821 | dependencies: 822 | chalk "^1.1.3" 823 | concat-stream "^1.4.6" 824 | debug "^2.1.1" 825 | doctrine "^1.2.1" 826 | es6-map "^0.1.3" 827 | escope "^3.6.0" 828 | espree "3.1.4" 829 | estraverse "^4.2.0" 830 | esutils "^2.0.2" 831 | file-entry-cache "^1.1.1" 832 | glob "^7.0.3" 833 | globals "^9.2.0" 834 | ignore "^3.1.2" 835 | imurmurhash "^0.1.4" 836 | inquirer "^0.12.0" 837 | is-my-json-valid "^2.10.0" 838 | is-resolvable "^1.0.0" 839 | js-yaml "^3.5.1" 840 | json-stable-stringify "^1.0.0" 841 | lodash "^4.0.0" 842 | mkdirp "^0.5.0" 843 | optionator "^0.8.1" 844 | path-is-absolute "^1.0.0" 845 | path-is-inside "^1.0.1" 846 | pluralize "^1.2.1" 847 | progress "^1.1.8" 848 | require-uncached "^1.0.2" 849 | shelljs "^0.6.0" 850 | strip-json-comments "~1.0.1" 851 | table "^3.7.8" 852 | text-table "~0.2.0" 853 | user-home "^2.0.0" 854 | 855 | espree@3.1.4: 856 | version "3.1.4" 857 | resolved "https://registry.yarnpkg.com/espree/-/espree-3.1.4.tgz#0726d7ac83af97a7c8498da9b363a3609d2a68a1" 858 | dependencies: 859 | acorn "^3.1.0" 860 | acorn-jsx "^3.0.0" 861 | 862 | esprima@^4.0.0: 863 | version "4.0.1" 864 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 865 | 866 | esrecurse@^4.1.0: 867 | version "4.2.1" 868 | resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" 869 | dependencies: 870 | estraverse "^4.1.0" 871 | 872 | estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: 873 | version "4.2.0" 874 | resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" 875 | 876 | esutils@^2.0.2: 877 | version "2.0.2" 878 | resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" 879 | 880 | event-emitter@~0.3.5: 881 | version "0.3.5" 882 | resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" 883 | dependencies: 884 | d "1" 885 | es5-ext "~0.10.14" 886 | 887 | exit-hook@^1.0.0: 888 | version "1.1.1" 889 | resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" 890 | 891 | expand-brackets@^0.1.4: 892 | version "0.1.5" 893 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 894 | dependencies: 895 | is-posix-bracket "^0.1.0" 896 | 897 | expand-range@^1.8.1: 898 | version "1.8.2" 899 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 900 | dependencies: 901 | fill-range "^2.1.0" 902 | 903 | extglob@^0.3.1: 904 | version "0.3.2" 905 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 906 | dependencies: 907 | is-extglob "^1.0.0" 908 | 909 | fast-levenshtein@~2.0.4: 910 | version "2.0.6" 911 | resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" 912 | 913 | figures@^1.3.5: 914 | version "1.7.0" 915 | resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" 916 | dependencies: 917 | escape-string-regexp "^1.0.5" 918 | object-assign "^4.1.0" 919 | 920 | file-entry-cache@^1.1.1: 921 | version "1.3.1" 922 | resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-1.3.1.tgz#44c61ea607ae4be9c1402f41f44270cbfe334ff8" 923 | dependencies: 924 | flat-cache "^1.2.1" 925 | object-assign "^4.0.1" 926 | 927 | filename-regex@^2.0.0: 928 | version "2.0.1" 929 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 930 | 931 | fill-range@^2.1.0: 932 | version "2.2.4" 933 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.4.tgz#eb1e773abb056dcd8df2bfdf6af59b8b3a936565" 934 | dependencies: 935 | is-number "^2.1.0" 936 | isobject "^2.0.0" 937 | randomatic "^3.0.0" 938 | repeat-element "^1.1.2" 939 | repeat-string "^1.5.2" 940 | 941 | find-root@^1.0.0: 942 | version "1.1.0" 943 | resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" 944 | 945 | flat-cache@^1.2.1: 946 | version "1.3.0" 947 | resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" 948 | dependencies: 949 | circular-json "^0.3.1" 950 | del "^2.0.2" 951 | graceful-fs "^4.1.2" 952 | write "^0.2.1" 953 | 954 | for-in@^1.0.1: 955 | version "1.0.2" 956 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 957 | 958 | for-own@^0.1.4: 959 | version "0.1.5" 960 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 961 | dependencies: 962 | for-in "^1.0.1" 963 | 964 | fs-minipass@^1.2.5: 965 | version "1.2.5" 966 | resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" 967 | dependencies: 968 | minipass "^2.2.1" 969 | 970 | fs-readdir-recursive@^1.0.0: 971 | version "1.1.0" 972 | resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" 973 | 974 | fs.realpath@^1.0.0: 975 | version "1.0.0" 976 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 977 | 978 | fsevents@^1.0.0: 979 | version "1.2.4" 980 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" 981 | dependencies: 982 | nan "^2.9.2" 983 | node-pre-gyp "^0.10.0" 984 | 985 | gauge@~2.7.3: 986 | version "2.7.4" 987 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 988 | dependencies: 989 | aproba "^1.0.3" 990 | console-control-strings "^1.0.0" 991 | has-unicode "^2.0.0" 992 | object-assign "^4.1.0" 993 | signal-exit "^3.0.0" 994 | string-width "^1.0.1" 995 | strip-ansi "^3.0.1" 996 | wide-align "^1.1.0" 997 | 998 | generate-function@^2.0.0: 999 | version "2.0.0" 1000 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" 1001 | 1002 | generate-object-property@^1.1.0: 1003 | version "1.2.0" 1004 | resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" 1005 | dependencies: 1006 | is-property "^1.0.0" 1007 | 1008 | get-stdin@^4.0.1: 1009 | version "4.0.1" 1010 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" 1011 | 1012 | get-stdin@^5.0.1: 1013 | version "5.0.1" 1014 | resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" 1015 | 1016 | glob-base@^0.3.0: 1017 | version "0.3.0" 1018 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 1019 | dependencies: 1020 | glob-parent "^2.0.0" 1021 | is-glob "^2.0.0" 1022 | 1023 | glob-parent@^2.0.0: 1024 | version "2.0.0" 1025 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 1026 | dependencies: 1027 | is-glob "^2.0.0" 1028 | 1029 | glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: 1030 | version "7.1.2" 1031 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 1032 | dependencies: 1033 | fs.realpath "^1.0.0" 1034 | inflight "^1.0.4" 1035 | inherits "2" 1036 | minimatch "^3.0.4" 1037 | once "^1.3.0" 1038 | path-is-absolute "^1.0.0" 1039 | 1040 | globals@^9.18.0, globals@^9.2.0: 1041 | version "9.18.0" 1042 | resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" 1043 | 1044 | globby@^5.0.0: 1045 | version "5.0.0" 1046 | resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" 1047 | dependencies: 1048 | array-union "^1.0.1" 1049 | arrify "^1.0.0" 1050 | glob "^7.0.3" 1051 | object-assign "^4.0.1" 1052 | pify "^2.0.0" 1053 | pinkie-promise "^2.0.0" 1054 | 1055 | graceful-fs@^4.1.2, graceful-fs@^4.1.4: 1056 | version "4.1.11" 1057 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 1058 | 1059 | has-ansi@^2.0.0: 1060 | version "2.0.0" 1061 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" 1062 | dependencies: 1063 | ansi-regex "^2.0.0" 1064 | 1065 | has-unicode@^2.0.0: 1066 | version "2.0.1" 1067 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 1068 | 1069 | home-or-tmp@^2.0.0: 1070 | version "2.0.0" 1071 | resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" 1072 | dependencies: 1073 | os-homedir "^1.0.0" 1074 | os-tmpdir "^1.0.1" 1075 | 1076 | iconv-lite@^0.4.4: 1077 | version "0.4.23" 1078 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" 1079 | dependencies: 1080 | safer-buffer ">= 2.1.2 < 3" 1081 | 1082 | ignore-walk@^3.0.1: 1083 | version "3.0.1" 1084 | resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" 1085 | dependencies: 1086 | minimatch "^3.0.4" 1087 | 1088 | ignore@^3.0.9, ignore@^3.1.2: 1089 | version "3.3.10" 1090 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043" 1091 | 1092 | imurmurhash@^0.1.4: 1093 | version "0.1.4" 1094 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1095 | 1096 | inflight@^1.0.4: 1097 | version "1.0.6" 1098 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1099 | dependencies: 1100 | once "^1.3.0" 1101 | wrappy "1" 1102 | 1103 | inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.3: 1104 | version "2.0.3" 1105 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 1106 | 1107 | ini@~1.3.0: 1108 | version "1.3.5" 1109 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 1110 | 1111 | inquirer@^0.12.0: 1112 | version "0.12.0" 1113 | resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" 1114 | dependencies: 1115 | ansi-escapes "^1.1.0" 1116 | ansi-regex "^2.0.0" 1117 | chalk "^1.0.0" 1118 | cli-cursor "^1.0.1" 1119 | cli-width "^2.0.0" 1120 | figures "^1.3.5" 1121 | lodash "^4.3.0" 1122 | readline2 "^1.0.1" 1123 | run-async "^0.1.0" 1124 | rx-lite "^3.1.2" 1125 | string-width "^1.0.1" 1126 | strip-ansi "^3.0.0" 1127 | through "^2.3.6" 1128 | 1129 | invariant@^2.2.2: 1130 | version "2.2.4" 1131 | resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" 1132 | dependencies: 1133 | loose-envify "^1.0.0" 1134 | 1135 | is-binary-path@^1.0.0: 1136 | version "1.0.1" 1137 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 1138 | dependencies: 1139 | binary-extensions "^1.0.0" 1140 | 1141 | is-buffer@^1.1.5: 1142 | version "1.1.6" 1143 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 1144 | 1145 | is-dotfile@^1.0.0: 1146 | version "1.0.3" 1147 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" 1148 | 1149 | is-equal-shallow@^0.1.3: 1150 | version "0.1.3" 1151 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 1152 | dependencies: 1153 | is-primitive "^2.0.0" 1154 | 1155 | is-extendable@^0.1.1: 1156 | version "0.1.1" 1157 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 1158 | 1159 | is-extglob@^1.0.0: 1160 | version "1.0.0" 1161 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 1162 | 1163 | is-finite@^1.0.0: 1164 | version "1.0.2" 1165 | resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" 1166 | dependencies: 1167 | number-is-nan "^1.0.0" 1168 | 1169 | is-fullwidth-code-point@^1.0.0: 1170 | version "1.0.0" 1171 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 1172 | dependencies: 1173 | number-is-nan "^1.0.0" 1174 | 1175 | is-fullwidth-code-point@^2.0.0: 1176 | version "2.0.0" 1177 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 1178 | 1179 | is-glob@^2.0.0, is-glob@^2.0.1: 1180 | version "2.0.1" 1181 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 1182 | dependencies: 1183 | is-extglob "^1.0.0" 1184 | 1185 | is-my-ip-valid@^1.0.0: 1186 | version "1.0.0" 1187 | resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" 1188 | 1189 | is-my-json-valid@^2.10.0: 1190 | version "2.17.2" 1191 | resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" 1192 | dependencies: 1193 | generate-function "^2.0.0" 1194 | generate-object-property "^1.1.0" 1195 | is-my-ip-valid "^1.0.0" 1196 | jsonpointer "^4.0.0" 1197 | xtend "^4.0.0" 1198 | 1199 | is-number@^2.1.0: 1200 | version "2.1.0" 1201 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 1202 | dependencies: 1203 | kind-of "^3.0.2" 1204 | 1205 | is-number@^4.0.0: 1206 | version "4.0.0" 1207 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" 1208 | 1209 | is-path-cwd@^1.0.0: 1210 | version "1.0.0" 1211 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" 1212 | 1213 | is-path-in-cwd@^1.0.0: 1214 | version "1.0.1" 1215 | resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz#5ac48b345ef675339bd6c7a48a912110b241cf52" 1216 | dependencies: 1217 | is-path-inside "^1.0.0" 1218 | 1219 | is-path-inside@^1.0.0: 1220 | version "1.0.1" 1221 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" 1222 | dependencies: 1223 | path-is-inside "^1.0.1" 1224 | 1225 | is-posix-bracket@^0.1.0: 1226 | version "0.1.1" 1227 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 1228 | 1229 | is-primitive@^2.0.0: 1230 | version "2.0.0" 1231 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 1232 | 1233 | is-property@^1.0.0: 1234 | version "1.0.2" 1235 | resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" 1236 | 1237 | is-resolvable@^1.0.0: 1238 | version "1.1.0" 1239 | resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" 1240 | 1241 | isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: 1242 | version "1.0.0" 1243 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1244 | 1245 | isobject@^2.0.0: 1246 | version "2.1.0" 1247 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1248 | dependencies: 1249 | isarray "1.0.0" 1250 | 1251 | "js-tokens@^3.0.0 || ^4.0.0": 1252 | version "4.0.0" 1253 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 1254 | 1255 | js-tokens@^3.0.2: 1256 | version "3.0.2" 1257 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" 1258 | 1259 | js-yaml@^3.5.1: 1260 | version "3.12.0" 1261 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" 1262 | dependencies: 1263 | argparse "^1.0.7" 1264 | esprima "^4.0.0" 1265 | 1266 | jsesc@^1.3.0: 1267 | version "1.3.0" 1268 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" 1269 | 1270 | jsesc@~0.5.0: 1271 | version "0.5.0" 1272 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" 1273 | 1274 | json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: 1275 | version "1.0.1" 1276 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 1277 | dependencies: 1278 | jsonify "~0.0.0" 1279 | 1280 | json5@^0.5.1: 1281 | version "0.5.1" 1282 | resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" 1283 | 1284 | jsonify@~0.0.0: 1285 | version "0.0.0" 1286 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1287 | 1288 | jsonpointer@^4.0.0: 1289 | version "4.0.1" 1290 | resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" 1291 | 1292 | jsx-ast-utils@^1.2.1: 1293 | version "1.4.1" 1294 | resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" 1295 | 1296 | kind-of@^3.0.2: 1297 | version "3.2.2" 1298 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1299 | dependencies: 1300 | is-buffer "^1.1.5" 1301 | 1302 | kind-of@^6.0.0: 1303 | version "6.0.2" 1304 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" 1305 | 1306 | levn@~0.3.0: 1307 | version "0.3.0" 1308 | resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" 1309 | dependencies: 1310 | prelude-ls "~1.1.2" 1311 | type-check "~0.3.2" 1312 | 1313 | lodash@^4.0.0, lodash@^4.17.4, lodash@^4.3.0: 1314 | version "4.17.10" 1315 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" 1316 | 1317 | loose-envify@^1.0.0: 1318 | version "1.4.0" 1319 | resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" 1320 | dependencies: 1321 | js-tokens "^3.0.0 || ^4.0.0" 1322 | 1323 | math-random@^1.0.1: 1324 | version "1.0.1" 1325 | resolved "https://registry.yarnpkg.com/math-random/-/math-random-1.0.1.tgz#8b3aac588b8a66e4975e3cdea67f7bb329601fac" 1326 | 1327 | micromatch@^2.1.5: 1328 | version "2.3.11" 1329 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 1330 | dependencies: 1331 | arr-diff "^2.0.0" 1332 | array-unique "^0.2.1" 1333 | braces "^1.8.2" 1334 | expand-brackets "^0.1.4" 1335 | extglob "^0.3.1" 1336 | filename-regex "^2.0.0" 1337 | is-extglob "^1.0.0" 1338 | is-glob "^2.0.1" 1339 | kind-of "^3.0.2" 1340 | normalize-path "^2.0.1" 1341 | object.omit "^2.0.0" 1342 | parse-glob "^3.0.4" 1343 | regex-cache "^0.4.2" 1344 | 1345 | minimatch@^3.0.2, minimatch@^3.0.4: 1346 | version "3.0.4" 1347 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1348 | dependencies: 1349 | brace-expansion "^1.1.7" 1350 | 1351 | minimist@0.0.8: 1352 | version "0.0.8" 1353 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1354 | 1355 | minimist@^1.1.0, minimist@^1.1.1, minimist@^1.2.0: 1356 | version "1.2.0" 1357 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1358 | 1359 | minipass@^2.2.1, minipass@^2.3.3: 1360 | version "2.3.3" 1361 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" 1362 | dependencies: 1363 | safe-buffer "^5.1.2" 1364 | yallist "^3.0.0" 1365 | 1366 | minizlib@^1.1.0: 1367 | version "1.1.0" 1368 | resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" 1369 | dependencies: 1370 | minipass "^2.2.1" 1371 | 1372 | mkdirp@^0.5.0, mkdirp@^0.5.1: 1373 | version "0.5.1" 1374 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1375 | dependencies: 1376 | minimist "0.0.8" 1377 | 1378 | ms@2.0.0: 1379 | version "2.0.0" 1380 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1381 | 1382 | multiline@^1.0.2: 1383 | version "1.0.2" 1384 | resolved "https://registry.yarnpkg.com/multiline/-/multiline-1.0.2.tgz#69b1f25ff074d2828904f244ddd06b7d96ef6c93" 1385 | dependencies: 1386 | strip-indent "^1.0.0" 1387 | 1388 | mute-stream@0.0.5: 1389 | version "0.0.5" 1390 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" 1391 | 1392 | nan@^2.9.2: 1393 | version "2.10.0" 1394 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" 1395 | 1396 | needle@^2.2.1: 1397 | version "2.2.1" 1398 | resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" 1399 | dependencies: 1400 | debug "^2.1.2" 1401 | iconv-lite "^0.4.4" 1402 | sax "^1.2.4" 1403 | 1404 | next-tick@1: 1405 | version "1.0.0" 1406 | resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" 1407 | 1408 | node-pre-gyp@^0.10.0: 1409 | version "0.10.3" 1410 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" 1411 | dependencies: 1412 | detect-libc "^1.0.2" 1413 | mkdirp "^0.5.1" 1414 | needle "^2.2.1" 1415 | nopt "^4.0.1" 1416 | npm-packlist "^1.1.6" 1417 | npmlog "^4.0.2" 1418 | rc "^1.2.7" 1419 | rimraf "^2.6.1" 1420 | semver "^5.3.0" 1421 | tar "^4" 1422 | 1423 | nopt@^4.0.1: 1424 | version "4.0.1" 1425 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 1426 | dependencies: 1427 | abbrev "1" 1428 | osenv "^0.1.4" 1429 | 1430 | normalize-path@^2.0.0, normalize-path@^2.0.1: 1431 | version "2.1.1" 1432 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1433 | dependencies: 1434 | remove-trailing-separator "^1.0.1" 1435 | 1436 | npm-bundled@^1.0.1: 1437 | version "1.0.3" 1438 | resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" 1439 | 1440 | npm-packlist@^1.1.6: 1441 | version "1.1.11" 1442 | resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" 1443 | dependencies: 1444 | ignore-walk "^3.0.1" 1445 | npm-bundled "^1.0.1" 1446 | 1447 | npmlog@^4.0.2: 1448 | version "4.1.2" 1449 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1450 | dependencies: 1451 | are-we-there-yet "~1.1.2" 1452 | console-control-strings "~1.1.0" 1453 | gauge "~2.7.3" 1454 | set-blocking "~2.0.0" 1455 | 1456 | number-is-nan@^1.0.0: 1457 | version "1.0.1" 1458 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1459 | 1460 | object-assign@^4.0.1, object-assign@^4.1.0: 1461 | version "4.1.1" 1462 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1463 | 1464 | object.omit@^2.0.0: 1465 | version "2.0.1" 1466 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 1467 | dependencies: 1468 | for-own "^0.1.4" 1469 | is-extendable "^0.1.1" 1470 | 1471 | once@^1.3.0: 1472 | version "1.4.0" 1473 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1474 | dependencies: 1475 | wrappy "1" 1476 | 1477 | onetime@^1.0.0: 1478 | version "1.1.0" 1479 | resolved "http://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" 1480 | 1481 | optionator@^0.8.1: 1482 | version "0.8.2" 1483 | resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" 1484 | dependencies: 1485 | deep-is "~0.1.3" 1486 | fast-levenshtein "~2.0.4" 1487 | levn "~0.3.0" 1488 | prelude-ls "~1.1.2" 1489 | type-check "~0.3.2" 1490 | wordwrap "~1.0.0" 1491 | 1492 | os-homedir@^1.0.0: 1493 | version "1.0.2" 1494 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1495 | 1496 | os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: 1497 | version "1.0.2" 1498 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1499 | 1500 | osenv@^0.1.4: 1501 | version "0.1.5" 1502 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" 1503 | dependencies: 1504 | os-homedir "^1.0.0" 1505 | os-tmpdir "^1.0.0" 1506 | 1507 | output-file-sync@^1.1.2: 1508 | version "1.1.2" 1509 | resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" 1510 | dependencies: 1511 | graceful-fs "^4.1.4" 1512 | mkdirp "^0.5.1" 1513 | object-assign "^4.1.0" 1514 | 1515 | parse-glob@^3.0.4: 1516 | version "3.0.4" 1517 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 1518 | dependencies: 1519 | glob-base "^0.3.0" 1520 | is-dotfile "^1.0.0" 1521 | is-extglob "^1.0.0" 1522 | is-glob "^2.0.0" 1523 | 1524 | path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: 1525 | version "1.0.1" 1526 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1527 | 1528 | path-is-inside@^1.0.1: 1529 | version "1.0.2" 1530 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1531 | 1532 | pify@^2.0.0: 1533 | version "2.3.0" 1534 | resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" 1535 | 1536 | pinkie-promise@^2.0.0: 1537 | version "2.0.1" 1538 | resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" 1539 | dependencies: 1540 | pinkie "^2.0.0" 1541 | 1542 | pinkie@^2.0.0: 1543 | version "2.0.4" 1544 | resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" 1545 | 1546 | pkg-config@^1.0.1, pkg-config@^1.1.0: 1547 | version "1.1.1" 1548 | resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4" 1549 | dependencies: 1550 | debug-log "^1.0.0" 1551 | find-root "^1.0.0" 1552 | xtend "^4.0.1" 1553 | 1554 | pluralize@^1.2.1: 1555 | version "1.2.1" 1556 | resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" 1557 | 1558 | prelude-ls@~1.1.2: 1559 | version "1.1.2" 1560 | resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" 1561 | 1562 | preserve@^0.2.0: 1563 | version "0.2.0" 1564 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 1565 | 1566 | private@^0.1.6, private@^0.1.8: 1567 | version "0.1.8" 1568 | resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" 1569 | 1570 | process-nextick-args@~2.0.0: 1571 | version "2.0.0" 1572 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" 1573 | 1574 | progress@^1.1.8: 1575 | version "1.1.8" 1576 | resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" 1577 | 1578 | randomatic@^3.0.0: 1579 | version "3.0.0" 1580 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-3.0.0.tgz#d35490030eb4f7578de292ce6dfb04a91a128923" 1581 | dependencies: 1582 | is-number "^4.0.0" 1583 | kind-of "^6.0.0" 1584 | math-random "^1.0.1" 1585 | 1586 | rc@^1.2.7: 1587 | version "1.2.8" 1588 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1589 | dependencies: 1590 | deep-extend "^0.6.0" 1591 | ini "~1.3.0" 1592 | minimist "^1.2.0" 1593 | strip-json-comments "~2.0.1" 1594 | 1595 | readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.2.2: 1596 | version "2.3.6" 1597 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" 1598 | dependencies: 1599 | core-util-is "~1.0.0" 1600 | inherits "~2.0.3" 1601 | isarray "~1.0.0" 1602 | process-nextick-args "~2.0.0" 1603 | safe-buffer "~5.1.1" 1604 | string_decoder "~1.1.1" 1605 | util-deprecate "~1.0.1" 1606 | 1607 | readdirp@^2.0.0: 1608 | version "2.1.0" 1609 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 1610 | dependencies: 1611 | graceful-fs "^4.1.2" 1612 | minimatch "^3.0.2" 1613 | readable-stream "^2.0.2" 1614 | set-immediate-shim "^1.0.1" 1615 | 1616 | readline2@^1.0.1: 1617 | version "1.0.1" 1618 | resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" 1619 | dependencies: 1620 | code-point-at "^1.0.0" 1621 | is-fullwidth-code-point "^1.0.0" 1622 | mute-stream "0.0.5" 1623 | 1624 | regenerate@^1.2.1: 1625 | version "1.4.0" 1626 | resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" 1627 | 1628 | regenerator-runtime@^0.10.5: 1629 | version "0.10.5" 1630 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" 1631 | 1632 | regenerator-runtime@^0.11.0: 1633 | version "0.11.1" 1634 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" 1635 | 1636 | regenerator-transform@^0.10.0: 1637 | version "0.10.1" 1638 | resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" 1639 | dependencies: 1640 | babel-runtime "^6.18.0" 1641 | babel-types "^6.19.0" 1642 | private "^0.1.6" 1643 | 1644 | regex-cache@^0.4.2: 1645 | version "0.4.4" 1646 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" 1647 | dependencies: 1648 | is-equal-shallow "^0.1.3" 1649 | 1650 | regexpu-core@^2.0.0: 1651 | version "2.0.0" 1652 | resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" 1653 | dependencies: 1654 | regenerate "^1.2.1" 1655 | regjsgen "^0.2.0" 1656 | regjsparser "^0.1.4" 1657 | 1658 | regjsgen@^0.2.0: 1659 | version "0.2.0" 1660 | resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" 1661 | 1662 | regjsparser@^0.1.4: 1663 | version "0.1.5" 1664 | resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" 1665 | dependencies: 1666 | jsesc "~0.5.0" 1667 | 1668 | remove-trailing-separator@^1.0.1: 1669 | version "1.1.0" 1670 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 1671 | 1672 | repeat-element@^1.1.2: 1673 | version "1.1.2" 1674 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 1675 | 1676 | repeat-string@^1.5.2: 1677 | version "1.6.1" 1678 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1679 | 1680 | repeating@^2.0.0: 1681 | version "2.0.1" 1682 | resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" 1683 | dependencies: 1684 | is-finite "^1.0.0" 1685 | 1686 | require-uncached@^1.0.2: 1687 | version "1.0.3" 1688 | resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" 1689 | dependencies: 1690 | caller-path "^0.1.0" 1691 | resolve-from "^1.0.0" 1692 | 1693 | resolve-from@^1.0.0: 1694 | version "1.0.1" 1695 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" 1696 | 1697 | restore-cursor@^1.0.1: 1698 | version "1.0.1" 1699 | resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" 1700 | dependencies: 1701 | exit-hook "^1.0.0" 1702 | onetime "^1.0.0" 1703 | 1704 | rimraf@^2.2.8, rimraf@^2.6.1: 1705 | version "2.6.2" 1706 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 1707 | dependencies: 1708 | glob "^7.0.5" 1709 | 1710 | run-async@^0.1.0: 1711 | version "0.1.0" 1712 | resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" 1713 | dependencies: 1714 | once "^1.3.0" 1715 | 1716 | run-parallel@^1.1.2: 1717 | version "1.1.9" 1718 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.9.tgz#c9dd3a7cf9f4b2c4b6244e173a6ed866e61dd679" 1719 | 1720 | rx-lite@^3.1.2: 1721 | version "3.1.2" 1722 | resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" 1723 | 1724 | safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1725 | version "5.1.2" 1726 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1727 | 1728 | "safer-buffer@>= 2.1.2 < 3": 1729 | version "2.1.2" 1730 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1731 | 1732 | sax@^1.2.4: 1733 | version "1.2.4" 1734 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" 1735 | 1736 | semver@^5.3.0: 1737 | version "5.5.0" 1738 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" 1739 | 1740 | set-blocking@~2.0.0: 1741 | version "2.0.0" 1742 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1743 | 1744 | set-immediate-shim@^1.0.1: 1745 | version "1.0.1" 1746 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 1747 | 1748 | shelljs@^0.6.0: 1749 | version "0.6.1" 1750 | resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.6.1.tgz#ec6211bed1920442088fe0f70b2837232ed2c8a8" 1751 | 1752 | signal-exit@^3.0.0: 1753 | version "3.0.2" 1754 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1755 | 1756 | slash@^1.0.0: 1757 | version "1.0.0" 1758 | resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" 1759 | 1760 | slice-ansi@0.0.4: 1761 | version "0.0.4" 1762 | resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" 1763 | 1764 | snazzy@^4.0.0: 1765 | version "4.0.1" 1766 | resolved "https://registry.yarnpkg.com/snazzy/-/snazzy-4.0.1.tgz#9e81974ceff52650c76fd1be9d9764afb89cc466" 1767 | dependencies: 1768 | chalk "^1.1.0" 1769 | inherits "^2.0.1" 1770 | minimist "^1.1.1" 1771 | readable-stream "^2.0.6" 1772 | standard "^7.0.0" 1773 | standard-json "^1.0.0" 1774 | text-table "^0.2.0" 1775 | 1776 | source-map-support@^0.4.15: 1777 | version "0.4.18" 1778 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" 1779 | dependencies: 1780 | source-map "^0.5.6" 1781 | 1782 | source-map@^0.5.6, source-map@^0.5.7: 1783 | version "0.5.7" 1784 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" 1785 | 1786 | sprintf-js@~1.0.2: 1787 | version "1.0.3" 1788 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 1789 | 1790 | standard-engine@^4.0.0: 1791 | version "4.1.3" 1792 | resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-4.1.3.tgz#7a31aad54f03d9f39355f43389ce0694f4094155" 1793 | dependencies: 1794 | defaults "^1.0.2" 1795 | deglob "^1.0.0" 1796 | find-root "^1.0.0" 1797 | get-stdin "^5.0.1" 1798 | minimist "^1.1.0" 1799 | multiline "^1.0.2" 1800 | pkg-config "^1.0.1" 1801 | xtend "^4.0.0" 1802 | 1803 | standard-json@^1.0.0: 1804 | version "1.0.3" 1805 | resolved "https://registry.yarnpkg.com/standard-json/-/standard-json-1.0.3.tgz#5b5b21d9418810dc5644c113d5163541dcd8faa6" 1806 | dependencies: 1807 | concat-stream "^1.5.0" 1808 | 1809 | standard@^7.0.0, standard@^7.1.2: 1810 | version "7.1.2" 1811 | resolved "https://registry.yarnpkg.com/standard/-/standard-7.1.2.tgz#40166eeec2405065d1a4f0e3f15babc6e274607e" 1812 | dependencies: 1813 | eslint "~2.10.2" 1814 | eslint-config-standard "5.3.1" 1815 | eslint-config-standard-jsx "1.2.1" 1816 | eslint-plugin-promise "^1.0.8" 1817 | eslint-plugin-react "^5.0.1" 1818 | eslint-plugin-standard "^1.3.1" 1819 | standard-engine "^4.0.0" 1820 | 1821 | string-width@^1.0.1: 1822 | version "1.0.2" 1823 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1824 | dependencies: 1825 | code-point-at "^1.0.0" 1826 | is-fullwidth-code-point "^1.0.0" 1827 | strip-ansi "^3.0.0" 1828 | 1829 | "string-width@^1.0.2 || 2", string-width@^2.0.0: 1830 | version "2.1.1" 1831 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1832 | dependencies: 1833 | is-fullwidth-code-point "^2.0.0" 1834 | strip-ansi "^4.0.0" 1835 | 1836 | string_decoder@~1.1.1: 1837 | version "1.1.1" 1838 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1839 | dependencies: 1840 | safe-buffer "~5.1.0" 1841 | 1842 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1843 | version "3.0.1" 1844 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1845 | dependencies: 1846 | ansi-regex "^2.0.0" 1847 | 1848 | strip-ansi@^4.0.0: 1849 | version "4.0.0" 1850 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1851 | dependencies: 1852 | ansi-regex "^3.0.0" 1853 | 1854 | strip-indent@^1.0.0: 1855 | version "1.0.1" 1856 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" 1857 | dependencies: 1858 | get-stdin "^4.0.1" 1859 | 1860 | strip-json-comments@~1.0.1: 1861 | version "1.0.4" 1862 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" 1863 | 1864 | strip-json-comments@~2.0.1: 1865 | version "2.0.1" 1866 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1867 | 1868 | supports-color@^2.0.0: 1869 | version "2.0.0" 1870 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" 1871 | 1872 | table@^3.7.8: 1873 | version "3.8.3" 1874 | resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" 1875 | dependencies: 1876 | ajv "^4.7.0" 1877 | ajv-keywords "^1.0.0" 1878 | chalk "^1.1.1" 1879 | lodash "^4.0.0" 1880 | slice-ansi "0.0.4" 1881 | string-width "^2.0.0" 1882 | 1883 | tar@^4: 1884 | version "4.4.6" 1885 | resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" 1886 | dependencies: 1887 | chownr "^1.0.1" 1888 | fs-minipass "^1.2.5" 1889 | minipass "^2.3.3" 1890 | minizlib "^1.1.0" 1891 | mkdirp "^0.5.0" 1892 | safe-buffer "^5.1.2" 1893 | yallist "^3.0.2" 1894 | 1895 | text-table@^0.2.0, text-table@~0.2.0: 1896 | version "0.2.0" 1897 | resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" 1898 | 1899 | through@^2.3.6: 1900 | version "2.3.8" 1901 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 1902 | 1903 | to-fast-properties@^1.0.3: 1904 | version "1.0.3" 1905 | resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" 1906 | 1907 | trim-right@^1.0.1: 1908 | version "1.0.1" 1909 | resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" 1910 | 1911 | type-check@~0.3.2: 1912 | version "0.3.2" 1913 | resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" 1914 | dependencies: 1915 | prelude-ls "~1.1.2" 1916 | 1917 | typedarray@^0.0.6: 1918 | version "0.0.6" 1919 | resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" 1920 | 1921 | uniq@^1.0.1: 1922 | version "1.0.1" 1923 | resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" 1924 | 1925 | user-home@^1.1.1: 1926 | version "1.1.1" 1927 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" 1928 | 1929 | user-home@^2.0.0: 1930 | version "2.0.0" 1931 | resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" 1932 | dependencies: 1933 | os-homedir "^1.0.0" 1934 | 1935 | util-deprecate@~1.0.1: 1936 | version "1.0.2" 1937 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1938 | 1939 | v8flags@^2.1.1: 1940 | version "2.1.1" 1941 | resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" 1942 | dependencies: 1943 | user-home "^1.1.1" 1944 | 1945 | wide-align@^1.1.0: 1946 | version "1.1.3" 1947 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" 1948 | dependencies: 1949 | string-width "^1.0.2 || 2" 1950 | 1951 | wordwrap@~1.0.0: 1952 | version "1.0.0" 1953 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 1954 | 1955 | wrappy@1: 1956 | version "1.0.2" 1957 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1958 | 1959 | write@^0.2.1: 1960 | version "0.2.1" 1961 | resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" 1962 | dependencies: 1963 | mkdirp "^0.5.1" 1964 | 1965 | xtend@^4.0.0, xtend@^4.0.1: 1966 | version "4.0.1" 1967 | resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" 1968 | 1969 | yallist@^3.0.0, yallist@^3.0.2: 1970 | version "3.0.2" 1971 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" 1972 | --------------------------------------------------------------------------------