diff --git a/README.md b/README.md index 9b3dc4cc..52bb9393 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ The Most Versatile JavaScript Animated Typing Utility on the Planet * [Usage](#usage) * [API](#api) * [Options](#options) +* [Callback Methods](#callback-methods) * [CodePen Examples](#codepen-examples) * [Contribute](#contribute) * [License](#license) @@ -132,7 +133,13 @@ new TypeIt('.typeit-box', { ``` #### Companion Functions -To control a typewriter effect to the smallest character, pause, speed, or more, there companion functions available. Simply chain them together on an instance of TypeIt, and your chain will execute. You'll be able to create a dynamic, realistic narrative with just a few lines of code. +To control a typewriter effect to the smallest character, pause, speed, or more, there companion functions available. Simply chain them together on an instance of TypeIt, and your chain will execute. You'll be able to create a dynamic, realistic narrative with just a few lines of code that looks something like this: + +```js +new TypeIt('#element', { + speed: 50 +}).type('I want to type this.').pause(500).type('And type some more!'); +``` | Function | Arguments | Description | ------------- | ------------- | ------------- | @@ -215,26 +222,32 @@ if(instance.isComplete) { ``` ## Options -You can modify the options for the plugin by passing in JSON upon instantiation. +You can modify the options for the plugin by passing in JSON upon instantiation. It'll look something like this: + +```js +new TypeIt('#element', { + strings: "Your default string.", // or, ["String #1", "String #2"] + speed: 100 +}) +``` | Option | Description | Default Value | ------------- | ------------- | ------------- | | strings | (string or array) The string(s) to be typed. | 'Your default string.' | | speed | (number in millseconds) The typing speed. | 100 | -| deleteSpeed | (number in millseconds) The deletion speed. If left undefined, will be 1/3 of the type speed. | undefined | +| deleteSpeed | (number in millseconds) The deletion speed. If left null, will be 1/3 of the type speed. | null | | lifeLike | (boolean) Will make the typing pace irregular, as if a real person is doing it. | true | | cursor | (boolean) Show a blinking cursor at the end of the string(s). | true | | cursorSpeed | (number in milliseconds) The blinking speed of the cursor. | 1000 | | cursorChar | (string) The character used for the cursor. HTML works too! | pipe | | breakLines | (boolean) Choose whether you want multiple strings to be printed on top of each other (`breakLines: true`), or if you want each string to be deleted and replaced by the next one (`breakLines: false`). | true | | nextStringDelay | (number in milliseconds or array) The amount of time (milliseconds) between typing the next string when multiple strings are defined. You may either pass a number in milliseconds, or an array of values. The first value will be used as the delay before a new string starts, and the second value will be used as the delay after a string ends. For example, passing `[1000, 2000]` will tell TypeIt to pause 1000ms before typing a new string, and wait 2000ms after a string has just completed. | 750 | -| autoStart | (boolean) Defines if the instance start typing automatically, whatever is the position of the element in the viewport. Turn this option to `false` if you want to tell the instance to start typing only when the element reach the viewport. | true | +| autoStart | (boolean) Determines if the instance will typing automatically on page load, or only when the target element becomes visible in the viewport. If you don't want instances far down on the page to begin until they're visible, set this option to `false.` | true | | startDelete | (boolean) Whether to begin instance by deleting strings inside element, and then typing what strings are defined via JSON or companion functions. | false | | startDelay | (number in milliseconds) The amount of time before the plugin begins typing after initalizing. | 250 | | loop | (boolean) Have your string or strings continuously loop after completing. | false | | loopDelay | (number in milliseconds) The amount of time between looping over a string or set of strings again. | 750 | | html | (boolean) Handle strings as HTML, which will process tags and HTML entities. If 'false,' strings will be typed literally. | true | -| callback | (function) A function that executes after your typing has completed. | nuthin' | #### Changing Option Defaults If you're creating several instances of TypeIt on a page, and don't wish to repeatedly set an option of the same value for each of them, you can redefine the default options beforehand. Change the default value(s) before creating any instances, and you'll be set. @@ -248,6 +261,46 @@ new TypeIt('#id', { }); ``` +## Callback Methods +Along all of these options, there are several callback method options you may use to trigger JavaScript at different points in time. + +```js +new TypeIt('#id', { + strings: 'A string!' + afterString: function(step, queue, instance) { + //-- Execute your code here. + } +}); +``` + +### Passed Arguments + +Most callback methods will be passed the following arguments. + +| Argument | Description +| ------------- | ------------- +| step | Each character, deletion, pause, line break, etc. are "steps" in a queue of actions that are run with each instance. Each step is an array with the method that's called, an argument for the method, and a tag if it's the first or last character in a string that's been queued to be typed. So, a typical step will look something like this: `[Function type, 'm']`. +| queue | This is the rest of the queue that is yet to be typed. Each step in the queue is yet to be typed. Any steps that have already been typed will have been removed at this point. +| instance | The instance of TypeIt itself. + +### Available Methods +Remember, each of these methods is passed as an option into your instance when you create it: + +```js +new TypeIt('#id', { + afterString: function (step, queue, instance) {}, + afterComplete: function (instance) {} +}); +``` + +| Method | Description | Included Arguments +| ------------- | ------------- | ------------- | +| beforeString() | Before a new string is about to be typed. For example, if you pass two strings in an array when you set up TypeIt, this callback method will execute twice. | step, queue, instance | +| beforeStep() | Before each step in the queue is executed (including individual pauses, deletions, and new characters). | step, queue, instance +| afterString() | After a string is typed. | step, queue, instance +| afterStep() | After each step in the queue is executed. | step, queue, instance +| afterComplete() | After the entire instance is complete. This runs when all of the steps in the queue have been executed. So, technically, if you let the instance run out of steps and then add new steps later, this method could run more than once. | instance + ## CodePen Examples I have a few CodePen examples that illustrate how to do some interesting things with TypeIt. diff --git a/dist/typeit.es.js b/dist/typeit.es.js index 52afb826..a3a6cbfb 100644 --- a/dist/typeit.es.js +++ b/dist/typeit.es.js @@ -2,7 +2,7 @@ * * typeit - The most versatile animated typing utility on the planet. * Author: Alex MacArthur (https://macarthur.me) - * Version: v5.5.2 + * Version: v5.6.0 * URL: https://typeitjs.com * License: GPL-2.0 * @@ -10,7 +10,7 @@ window.TypeItDefaults = { strings: [], speed: 100, - deleteSpeed: undefined, + deleteSpeed: null, lifeLike: true, cursor: true, cursorChar: "|", @@ -23,7 +23,12 @@ window.TypeItDefaults = { loopDelay: 750, html: true, autoStart: true, - callback: function callback() {} + callback: false, + beforeString: false, + afterString: false, + beforeStep: false, + afterStep: false, + afterComplete: false }; function isVisible(element) { @@ -60,6 +65,29 @@ function toArray(string) { return Array.isArray(string) ? string.slice(0) : string.split("
"); } +function groupHTMLTags(arr) { + var tPosition = []; + var tag = void 0; + var isEntity = false; + + for (var j = 0; j < arr.length; j++) { + if (arr[j] === "<" || arr[j] === "&") { + tPosition[0] = j; + isEntity = arr[j] === "&"; + } + + if (arr[j] === ">" || arr[j] === ";" && isEntity) { + tPosition[1] = j; + j = 0; + tag = arr.slice(tPosition[0], tPosition[1] + 1).join(""); + arr.splice(tPosition[0], tPosition[1] - tPosition[0] + 1, tag); + isEntity = false; + } + } + + return arr; +} + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { @@ -101,9 +129,10 @@ var createClass = function () { }(); var Instance = function () { - function Instance(element, id, options) { + function Instance(element, id, options, typeit) { classCallCheck(this, Instance); + this.typeit = typeit; this.timeouts = []; this.id = id; this.queue = []; @@ -165,6 +194,7 @@ var Instance = function () { this.cursor(); this.generateQueue(); + this.kickoff(); } }, { @@ -181,16 +211,17 @@ var Instance = function () { this.options.strings.forEach(function (string, index) { _this.queueString(string); - //-- This is not the last string,so insert a pause for between strings. - if (index + 1 < _this.options.strings.length) { - if (_this.options.breakLines) { - _this.queue.push([_this.break]); - _this.insertSplitPause(_this.queue.length); - } else { - _this.queueDeletions(string); - _this.insertSplitPause(_this.queue.length, string.length); - } + //-- This is the last string. Get outta here. + if (index + 1 === _this.options.strings.length) return; + + if (_this.options.breakLines) { + _this.queue.push([_this.break]); + _this.insertSplitPause(_this.queue.length); + return; } + + _this.queueDeletions(string); + _this.insertSplitPause(_this.queue.length, string.length); }); } @@ -248,10 +279,19 @@ var Instance = function () { //-- Shorten it by one character. string.splice(0, 1); + //-- If rake is true, this is the first time we've queued this string. + if (rake) { + this.queue[this.queue.length - 1].push("first-of-string"); + } + //-- If there's more to it, run again until fully printed. if (string.length) { this.queueString(string, false); + return; } + + //-- End of string! + this.queue[this.queue.length - 1].push("last-of-string"); } /** @@ -374,11 +414,11 @@ var Instance = function () { value: function pause() { var _this3 = this; - var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; setTimeout(function () { _this3.next(); - }, time === null ? this.options.nextStringDelay.total : time); + }, time ? time : this.options.nextStringDelay.total); } /* @@ -398,24 +438,7 @@ var Instance = function () { //-- If we're parsing HTML, group tags into their own array items. if (_this4.options.html) { - var tPosition = []; - var tag = void 0; - var isEntity = false; - - for (var j = 0; j < item.length; j++) { - if (item[j] === "<" || item[j] === "&") { - tPosition[0] = j; - isEntity = item[j] === "&"; - } - - if (item[j] === ">" || item[j] === ";" && isEntity) { - tPosition[1] = j; - j = 0; - tag = item.slice(tPosition[0], tPosition[1] + 1).join(""); - item.splice(tPosition[0], tPosition[1] - tPosition[0] + 1, tag); - isEntity = false; - } - } + return groupHTMLTags(item); } return item; @@ -480,7 +503,7 @@ var Instance = function () { key: "setPace", value: function setPace() { var typeSpeed = this.options.speed; - var deleteSpeed = this.options.deleteSpeed !== undefined ? this.options.deleteSpeed : this.options.speed / 3; + var deleteSpeed = this.options.deleteSpeed !== null ? this.options.deleteSpeed : this.options.speed / 3; var typeRange = typeSpeed / 2; var deleteRange = deleteSpeed / 2; @@ -499,6 +522,7 @@ var Instance = function () { var textArray = _this6.elementContainer.innerHTML.split(""); + //-- Cut the array by a character. for (var n = textArray.length - 1; n > -1; n--) { if ((textArray[n] === ">" || textArray[n] === ";") && _this6.options.html) { for (var o = n; o > -1; o--) { @@ -565,7 +589,7 @@ var Instance = function () { } /* - Empty the existing text, clearing it instantly. + * Empty the existing text, clearing it instantly. */ }, { @@ -585,13 +609,38 @@ var Instance = function () { //-- We haven't reached the end of the queue, go again. if (this.queue.length > 0) { - var thisStep = this.queue[0]; - this.queue.shift(); - thisStep[0].call(this, thisStep[1]); + this.step = this.queue.shift(); + + if (this.step[2] === "first-of-string" && this.options.beforeString) { + this.options.beforeString(this.step, this.queue, this.typeit); + } + + if (this.options.beforeStep) { + this.options.beforeStep(this.step, this.queue, this.typeit); + } + + //-- Execute this step! + this.step[0].call(this, this.step[1], this.step[2]); + + if (this.step[2] === "last-of-string" && this.options.afterString) { + this.options.afterString(this.step, this.queue, this.typeit); + } + + if (this.options.afterStep) { + this.options.afterStep(this.step, this.queue, this.typeit); + } + return; } - this.options.callback(); + //-- @todo: Remove in next major release. + if (this.options.callback) { + this.options.callback(); + } + + if (this.options.afterComplete) { + this.options.afterComplete(this.step, this.typeit); + } if (this.options.loop) { this.queueDeletions(this.elementContainer.innerHTML); @@ -600,9 +649,11 @@ var Instance = function () { setTimeout(function () { _this7.next(); }, this.options.loopDelay / 2); - } else { - this.isComplete = true; + + return; } + + this.isComplete = true; } }]); return Instance; @@ -646,7 +697,7 @@ var TypeIt = function () { var _this = this; [].slice.call(this.elements).forEach(function (element) { - _this.instances.push(new Instance(element, _this.id, _this.args)); + _this.instances.push(new Instance(element, _this.id, _this.args, _this)); }); } }, { @@ -766,6 +817,8 @@ var TypeIt = function () { }, { key: "isComplete", get: function get$$1() { + if (!this.instances.length) return false; + return this.instances[0].isComplete; } }]); diff --git a/dist/typeit.js b/dist/typeit.js index 7a291ff7..29ff56b5 100644 --- a/dist/typeit.js +++ b/dist/typeit.js @@ -2,7 +2,7 @@ * * typeit - The most versatile animated typing utility on the planet. * Author: Alex MacArthur (https://macarthur.me) - * Version: v5.5.2 + * Version: v5.6.0 * URL: https://typeitjs.com * License: GPL-2.0 * @@ -16,7 +16,7 @@ window.TypeItDefaults = { strings: [], speed: 100, - deleteSpeed: undefined, + deleteSpeed: null, lifeLike: true, cursor: true, cursorChar: "|", @@ -29,7 +29,12 @@ window.TypeItDefaults = { loopDelay: 750, html: true, autoStart: true, - callback: function callback() {} + callback: false, + beforeString: false, + afterString: false, + beforeStep: false, + afterStep: false, + afterComplete: false }; function isVisible(element) { @@ -66,6 +71,29 @@ function toArray(string) { return Array.isArray(string) ? string.slice(0) : string.split("
"); } +function groupHTMLTags(arr) { + var tPosition = []; + var tag = void 0; + var isEntity = false; + + for (var j = 0; j < arr.length; j++) { + if (arr[j] === "<" || arr[j] === "&") { + tPosition[0] = j; + isEntity = arr[j] === "&"; + } + + if (arr[j] === ">" || arr[j] === ";" && isEntity) { + tPosition[1] = j; + j = 0; + tag = arr.slice(tPosition[0], tPosition[1] + 1).join(""); + arr.splice(tPosition[0], tPosition[1] - tPosition[0] + 1, tag); + isEntity = false; + } + } + + return arr; +} + var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { @@ -107,9 +135,10 @@ var createClass = function () { }(); var Instance = function () { - function Instance(element, id, options) { + function Instance(element, id, options, typeit) { classCallCheck(this, Instance); + this.typeit = typeit; this.timeouts = []; this.id = id; this.queue = []; @@ -171,6 +200,7 @@ var Instance = function () { this.cursor(); this.generateQueue(); + this.kickoff(); } }, { @@ -187,16 +217,17 @@ var Instance = function () { this.options.strings.forEach(function (string, index) { _this.queueString(string); - //-- This is not the last string,so insert a pause for between strings. - if (index + 1 < _this.options.strings.length) { - if (_this.options.breakLines) { - _this.queue.push([_this.break]); - _this.insertSplitPause(_this.queue.length); - } else { - _this.queueDeletions(string); - _this.insertSplitPause(_this.queue.length, string.length); - } + //-- This is the last string. Get outta here. + if (index + 1 === _this.options.strings.length) return; + + if (_this.options.breakLines) { + _this.queue.push([_this.break]); + _this.insertSplitPause(_this.queue.length); + return; } + + _this.queueDeletions(string); + _this.insertSplitPause(_this.queue.length, string.length); }); } @@ -254,10 +285,19 @@ var Instance = function () { //-- Shorten it by one character. string.splice(0, 1); + //-- If rake is true, this is the first time we've queued this string. + if (rake) { + this.queue[this.queue.length - 1].push("first-of-string"); + } + //-- If there's more to it, run again until fully printed. if (string.length) { this.queueString(string, false); + return; } + + //-- End of string! + this.queue[this.queue.length - 1].push("last-of-string"); } /** @@ -380,11 +420,11 @@ var Instance = function () { value: function pause() { var _this3 = this; - var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; + var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; setTimeout(function () { _this3.next(); - }, time === null ? this.options.nextStringDelay.total : time); + }, time ? time : this.options.nextStringDelay.total); } /* @@ -404,24 +444,7 @@ var Instance = function () { //-- If we're parsing HTML, group tags into their own array items. if (_this4.options.html) { - var tPosition = []; - var tag = void 0; - var isEntity = false; - - for (var j = 0; j < item.length; j++) { - if (item[j] === "<" || item[j] === "&") { - tPosition[0] = j; - isEntity = item[j] === "&"; - } - - if (item[j] === ">" || item[j] === ";" && isEntity) { - tPosition[1] = j; - j = 0; - tag = item.slice(tPosition[0], tPosition[1] + 1).join(""); - item.splice(tPosition[0], tPosition[1] - tPosition[0] + 1, tag); - isEntity = false; - } - } + return groupHTMLTags(item); } return item; @@ -486,7 +509,7 @@ var Instance = function () { key: "setPace", value: function setPace() { var typeSpeed = this.options.speed; - var deleteSpeed = this.options.deleteSpeed !== undefined ? this.options.deleteSpeed : this.options.speed / 3; + var deleteSpeed = this.options.deleteSpeed !== null ? this.options.deleteSpeed : this.options.speed / 3; var typeRange = typeSpeed / 2; var deleteRange = deleteSpeed / 2; @@ -505,6 +528,7 @@ var Instance = function () { var textArray = _this6.elementContainer.innerHTML.split(""); + //-- Cut the array by a character. for (var n = textArray.length - 1; n > -1; n--) { if ((textArray[n] === ">" || textArray[n] === ";") && _this6.options.html) { for (var o = n; o > -1; o--) { @@ -571,7 +595,7 @@ var Instance = function () { } /* - Empty the existing text, clearing it instantly. + * Empty the existing text, clearing it instantly. */ }, { @@ -591,13 +615,38 @@ var Instance = function () { //-- We haven't reached the end of the queue, go again. if (this.queue.length > 0) { - var thisStep = this.queue[0]; - this.queue.shift(); - thisStep[0].call(this, thisStep[1]); + this.step = this.queue.shift(); + + if (this.step[2] === "first-of-string" && this.options.beforeString) { + this.options.beforeString(this.step, this.queue, this.typeit); + } + + if (this.options.beforeStep) { + this.options.beforeStep(this.step, this.queue, this.typeit); + } + + //-- Execute this step! + this.step[0].call(this, this.step[1], this.step[2]); + + if (this.step[2] === "last-of-string" && this.options.afterString) { + this.options.afterString(this.step, this.queue, this.typeit); + } + + if (this.options.afterStep) { + this.options.afterStep(this.step, this.queue, this.typeit); + } + return; } - this.options.callback(); + //-- @todo: Remove in next major release. + if (this.options.callback) { + this.options.callback(); + } + + if (this.options.afterComplete) { + this.options.afterComplete(this.step, this.typeit); + } if (this.options.loop) { this.queueDeletions(this.elementContainer.innerHTML); @@ -606,9 +655,11 @@ var Instance = function () { setTimeout(function () { _this7.next(); }, this.options.loopDelay / 2); - } else { - this.isComplete = true; + + return; } + + this.isComplete = true; } }]); return Instance; @@ -652,7 +703,7 @@ var TypeIt = function () { var _this = this; [].slice.call(this.elements).forEach(function (element) { - _this.instances.push(new Instance(element, _this.id, _this.args)); + _this.instances.push(new Instance(element, _this.id, _this.args, _this)); }); } }, { @@ -772,6 +823,8 @@ var TypeIt = function () { }, { key: "isComplete", get: function get$$1() { + if (!this.instances.length) return false; + return this.instances[0].isComplete; } }]); diff --git a/dist/typeit.min.js b/dist/typeit.min.js index 9a24618f..a0233846 100644 --- a/dist/typeit.min.js +++ b/dist/typeit.min.js @@ -2,9 +2,9 @@ * * typeit - The most versatile animated typing utility on the planet. * Author: Alex MacArthur (https://macarthur.me) - * Version: v5.5.2 + * Version: v5.6.0 * URL: https://typeitjs.com * License: GPL-2.0 * */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.TypeIt=t()}(this,function(){"use strict";function e(e){var t=e.getBoundingClientRect();return!(t.right>window.innerWidth||t.bottom>window.innerHeight)&&!(t.top<0||t.left<0)}function t(e,t){return Math.abs(Math.random()*(e+t-(e-t))+(e-t))}function n(e,t){return 0===e.indexOf(t)}function i(e){return Array.isArray(e)?e.slice(0):e.split("
")}window.TypeItDefaults={strings:[],speed:100,deleteSpeed:void 0,lifeLike:!0,cursor:!0,cursorChar:"|",cursorSpeed:1e3,breakLines:!0,startDelay:250,startDelete:!1,nextStringDelay:750,loop:!1,loopDelay:750,html:!0,autoStart:!0,callback:function(){}};var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},r=function(){function e(e,t){for(var n=0;n/g,"")}),this.options.strings.length>=1&&""===this.options.strings[0]||(this.element.innerHTML='\n \n ',this.element.setAttribute("data-typeitid",this.id),this.elementContainer=this.element.querySelector("span"),this.options.startDelete&&(this.insert(this.stringsToDelete),this.queue.push([this.delete]),this.insertSplitPause(1)),this.cursor(),this.generateQueue(),this.kickoff())}},{key:"generateQueue",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;t=null===t?[this.pause,this.options.startDelay]:t,this.queue.push(t),this.options.strings.forEach(function(t,n){e.queueString(t),n+10&&void 0!==arguments[0]?arguments[0]:null,t="string"==typeof e?e.length:e,n=0;n1&&void 0!==arguments[1])||arguments[1];if(e){if(e=i(e),document.implementation.createHTMLDocument("").body.innerHTML=e,t&&(e=(e=this.rake(e))[0]),this.options.html&&n(e[0],"<")&&!n(e[0],"/),o=document.implementation.createHTMLDocument("");o.body.innerHTML="<"+s[1]+">",this.queue.push([this.type,o.body.children[0]])}else this.queue.push([this.type,e[0]]);e.splice(0,1),e.length&&this.queueString(e,!1)}}},{key:"insertSplitPause",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.queue.splice(e,0,[this.pause,this.options.nextStringDelay.before]),this.queue.splice(e-t,0,[this.pause,this.options.nextStringDelay.after])}},{key:"kickoff",value:function(){if(this.options.autoStart)return this.hasStarted=!0,void this.next();if(e(this.element))return this.hasStarted=!0,void this.next();var t=this;window.addEventListener("scroll",function n(i){e(t.element)&&!t.hasStarted&&(t.hasStarted=!0,t.next(),i.currentTarget.removeEventListener(i.type,n))})}},{key:"cursor",value:function(){var e="visibility: hidden;";if(this.options.cursor){var t=document.createElement("style");t.id=this.id;var n="\n @keyframes blink-"+this.id+" {\n 0% {opacity: 0}\n 49% {opacity: 0}\n 50% {opacity: 1}\n }\n\n [data-typeitid='"+this.id+"'] .ti-cursor {\n animation: blink-"+this.id+" "+this.options.cursorSpeed/1e3+"s infinite;\n }\n ";t.appendChild(document.createTextNode(n)),document.head.appendChild(t),e=""}this.element.insertAdjacentHTML("beforeend",''+this.options.cursorChar+"")}},{key:"insert",value:function(e){arguments.length>1&&void 0!==arguments[1]&&arguments[1]?this.elementContainer.lastChild.insertAdjacentHTML("beforeend",e):this.elementContainer.insertAdjacentHTML("beforeend",e),this.elementContainer.innerHTML=this.elementContainer.innerHTML.split("").join("")}},{key:"checkElement",value:function(){var e=this;[].slice.call(this.element.childNodes).forEach(function(t){void 0!==t.classList&&t.classList.contains("ti-container")&&(e.element.innerHTML="")}),!this.options.startDelete&&this.element.innerHTML.length>0?this.options.strings=this.element.innerHTML.trim():this.stringsToDelete=this.element.innerHTML}},{key:"break",value:function(){this.insert("
"),this.next()}},{key:"pause",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;setTimeout(function(){e.next()},null===t?this.options.nextStringDelay.total:t)}},{key:"rake",value:function(e){var t=this;return e.map(function(e){if(e=e.split(""),t.options.html)for(var n=[],i=void 0,s=!1,o=0;o"===e[o]||";"===e[o]&&s)&&(n[1]=o,o=0,i=e.slice(n[0],n[1]+1).join(""),e.splice(n[0],n[1]-n[0]+1,i),s=!1);return e})}},{key:"type",value:function(e){var t=this;this.setPace(),this.timeouts[0]=setTimeout(function(){return"string"!=typeof e?(e.innerHTML="",t.elementContainer.appendChild(e),t.isInTag=!0,void t.next()):n(e,"1&&void 0!==arguments[1]?arguments[1]:null,n=!(arguments.length>2&&void 0!==arguments[2])||arguments[2],i={};for(var s in null===t&&(t=this.options),t)i[s]=t[s];for(var o in e)i[o]=e[o];this.options=i,n&&this.next()}},{key:"setPace",value:function(){var e=this.options.speed,n=void 0!==this.options.deleteSpeed?this.options.deleteSpeed:this.options.speed/3,i=e/2,s=n/2;this.typePace=this.options.lifeLike?t(e,i):e,this.deletePace=this.options.lifeLike?t(n,s):n}},{key:"delete",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;this.timeouts[1]=setTimeout(function(){e.setPace();for(var n=e.elementContainer.innerHTML.split(""),i=n.length-1;i>-1;i--){if(">"!==n[i]&&";"!==n[i]||!e.options.html){n.pop();break}for(var s=i;s>-1;s--){if("
"===n.slice(s-3,s+1).join("")){n.splice(s-3,4);break}if("&"===n[s]){n.splice(s,i-s+1);break}if("<"===n[s]&&">"!==n[s-1]){if(";"===n[s-1])for(var o=s-1;o>-1;o--)if("&"===n[o]){n.splice(o,s-o);break}n.splice(s-1,1);break}}break}if(e.elementContainer.innerHTML.indexOf(">-1)for(var r=e.elementContainer.innerHTML.indexOf(">=0;r--)if("<"===n[r]){n.splice(r,n.length-r);break}e.elementContainer.innerHTML=n.join("").replace(/<[^\/>][^>]*><\/[^>]+>/,""),null===t&&e.queue.unshift([e.delete,n.length]),t>1&&e.queue.unshift([e.delete,t-1]),e.next()},this.deletePace)}},{key:"empty",value:function(){this.elementContainer.innerHTML="",this.next()}},{key:"next",value:function(){var e=this;if(!this.isFrozen){if(this.queue.length>0){var t=this.queue[0];return this.queue.shift(),void t[0].call(this,t[1])}this.options.callback(),this.options.loop?(this.queueDeletions(this.elementContainer.innerHTML),this.generateQueue([this.pause,this.options.loopDelay/2]),setTimeout(function(){e.next()},this.options.loopDelay/2)):this.isComplete=!0}}}]),s}();return function(){function e(t,n){o(this,e),this.id=this.generateHash(),this.instances=[],this.elements=[],this.args=n,"object"===(void 0===t?"undefined":s(t))&&(void 0===t.length?this.elements.push(t):this.elements=t),"string"==typeof t&&(this.elements=document.querySelectorAll(t)),this.createInstances()}return r(e,[{key:"generateHash",value:function(){return Math.random().toString(36).substring(2,15)+Math.random().toString(36).substring(2,15)}},{key:"createInstances",value:function(){var e=this;[].slice.call(this.elements).forEach(function(t){e.instances.push(new u(t,e.id,e.args))})}},{key:"pushAction",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.instances.forEach(function(n){n.queue.push([n[e],t]),!0===n.isComplete&&n.next()})}},{key:"type",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"";return this.instances.forEach(function(t){t.queueString(e),!0===t.isComplete&&t.next()}),this}},{key:"delete",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return this.pushAction("delete",e),this}},{key:"freeze",value:function(){this.instances.forEach(function(e){e.isFrozen=!0})}},{key:"unfreeze",value:function(){this.instances.forEach(function(e){e.isFrozen&&(e.isFrozen=!1,e.next())})}},{key:"pause",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;return this.pushAction("pause",e),this}},{key:"destroy",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0];this.instances.forEach(function(t){t.timeouts=t.timeouts.map(function(e){return clearTimeout(e),null}),e&&t.element.removeChild(t.element.querySelector(".ti-cursor"))}),this.instances=[]}},{key:"empty",value:function(){return this.pushAction("empty"),this}},{key:"break",value:function(){return this.pushAction("break"),this}},{key:"options",value:function(e){return this.pushAction("setOptions",e),this}},{key:"isComplete",get:function(){return this.instances[0].isComplete}}]),e}()}); +!function(t,e){"object"==typeof exports&&"undefined"!=typeof module?module.exports=e():"function"==typeof define&&define.amd?define(e):t.TypeIt=e()}(this,function(){"use strict";function n(t){var e=t.getBoundingClientRect();return!(e.right>window.innerWidth||e.bottom>window.innerHeight)&&!(e.top<0||e.left<0)}function o(t,e){return Math.abs(Math.random()*(t+e-(t-e))+(t-e))}function r(t,e){return 0===t.indexOf(e)}function u(t){return Array.isArray(t)?t.slice(0):t.split("
")}window.TypeItDefaults={strings:[],speed:100,deleteSpeed:null,lifeLike:!0,cursor:!0,cursorChar:"|",cursorSpeed:1e3,breakLines:!0,startDelay:250,startDelete:!1,nextStringDelay:750,loop:!1,loopDelay:750,html:!0,autoStart:!0,callback:!1,beforeString:!1,afterString:!1,beforeStep:!1,afterStep:!1,afterComplete:!1};var s="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},h=function(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")},t=function(){function n(t,e){for(var i=0;i/g,"")}),1<=this.options.strings.length&&""===this.options.strings[0]||(this.element.innerHTML='\n \n ',this.element.setAttribute("data-typeitid",this.id),this.elementContainer=this.element.querySelector("span"),this.options.startDelete&&(this.insert(this.stringsToDelete),this.queue.push([this.delete]),this.insertSplitPause(1)),this.cursor(),this.generateQueue(),this.kickoff())}},{key:"generateQueue",value:function(){var i=this,t=0/),n=document.implementation.createHTMLDocument("");n.body.innerHTML="<"+i[1]+">",this.queue.push([this.type,n.body.children[0]])}else this.queue.push([this.type,t[0]]);t.splice(0,1),e&&this.queue[this.queue.length-1].push("first-of-string"),t.length?this.queueString(t,!1):this.queue[this.queue.length-1].push("last-of-string")}}},{key:"insertSplitPause",value:function(t){var e=1'+this.options.cursorChar+"")}},{key:"insert",value:function(t){1"),this.next()}},{key:"pause",value:function(){var t=this,e=0"===t[s]||";"===t[s]&&n)&&(e[1]=s,s=0,i=t.slice(e[0],e[1]+1).join(""),t.splice(e[0],e[1]-e[0]+1,i),n=!1);return t}(t):t})}},{key:"type",value:function(t){var e=this;this.setPace(),this.timeouts[0]=setTimeout(function(){return"string"!=typeof t?(t.innerHTML="",e.elementContainer.appendChild(t),e.isInTag=!0):r(t,""!==t[e]&&";"!==t[e]||!o.options.html){t.pop();break}for(var i=e;-1"===t.slice(i-3,i+1).join("")){t.splice(i-3,4);break}if("&"===t[i]){t.splice(i,e-i+1);break}if("<"===t[i]&&">"!==t[i-1]){if(";"===t[i-1])for(var n=i-1;-1][^>]*><\/[^>]+>/,""),null===r&&o.queue.unshift([o.delete,t.length]),1 (https://macarthur.me)", "license": "GPL-2.0", @@ -47,5 +47,8 @@ "rollup": "^0.52.0", "rollup-plugin-babel": "^3.0.2", "rollup-plugin-uglify": "^2.0.1" + }, + "dependencies": { + "jest": "^22.4.2" } } diff --git a/src/defaults.js b/src/defaults.js index 92716ccf..232b3211 100644 --- a/src/defaults.js +++ b/src/defaults.js @@ -1,7 +1,7 @@ window.TypeItDefaults = { strings: [], speed: 100, - deleteSpeed: undefined, + deleteSpeed: null, lifeLike: true, cursor: true, cursorChar: "|", @@ -14,5 +14,10 @@ window.TypeItDefaults = { loopDelay: 750, html: true, autoStart: true, - callback: function() {} + callback: false, + beforeString: false, + afterString: false, + beforeStep: false, + afterStep: false, + afterComplete: false }; diff --git a/src/instance.js b/src/instance.js index 20f17d6b..10525475 100644 --- a/src/instance.js +++ b/src/instance.js @@ -1,6 +1,7 @@ import "./defaults.js"; import { isVisible, + groupHTMLTags, randomInRange, removeComments, startsWith, @@ -8,7 +9,8 @@ import { } from "./utilities"; export default class Instance { - constructor(element, id, options) { + constructor(element, id, options, typeit) { + this.typeit = typeit; this.timeouts = []; this.id = id; this.queue = []; @@ -69,6 +71,7 @@ export default class Instance { this.cursor(); this.generateQueue(); + this.kickoff(); } @@ -83,16 +86,17 @@ export default class Instance { this.options.strings.forEach((string, index) => { this.queueString(string); - //-- This is not the last string,so insert a pause for between strings. - if (index + 1 < this.options.strings.length) { - if (this.options.breakLines) { - this.queue.push([this.break]); - this.insertSplitPause(this.queue.length); - } else { - this.queueDeletions(string); - this.insertSplitPause(this.queue.length, string.length); - } + //-- This is the last string. Get outta here. + if (index + 1 === this.options.strings.length) return; + + if (this.options.breakLines) { + this.queue.push([this.break]); + this.insertSplitPause(this.queue.length); + return; } + + this.queueDeletions(string); + this.insertSplitPause(this.queue.length, string.length); }); } @@ -146,10 +150,19 @@ export default class Instance { //-- Shorten it by one character. string.splice(0, 1); + //-- If rake is true, this is the first time we've queued this string. + if (rake) { + this.queue[this.queue.length - 1].push("first-of-string"); + } + //-- If there's more to it, run again until fully printed. if (string.length) { this.queueString(string, false); + return; } + + //-- End of string! + this.queue[this.queue.length - 1].push("last-of-string"); } /** @@ -274,10 +287,10 @@ export default class Instance { this.next(); } - pause(time = null) { + pause(time = false) { setTimeout(() => { this.next(); - }, time === null ? this.options.nextStringDelay.total : time); + }, time ? time : this.options.nextStringDelay.total); } /* @@ -292,24 +305,7 @@ export default class Instance { //-- If we're parsing HTML, group tags into their own array items. if (this.options.html) { - let tPosition = []; - let tag; - let isEntity = false; - - for (let j = 0; j < item.length; j++) { - if (item[j] === "<" || item[j] === "&") { - tPosition[0] = j; - isEntity = item[j] === "&"; - } - - if (item[j] === ">" || (item[j] === ";" && isEntity)) { - tPosition[1] = j; - j = 0; - tag = item.slice(tPosition[0], tPosition[1] + 1).join(""); - item.splice(tPosition[0], tPosition[1] - tPosition[0] + 1, tag); - isEntity = false; - } - } + return groupHTMLTags(item); } return item; @@ -367,7 +363,7 @@ export default class Instance { setPace() { let typeSpeed = this.options.speed; let deleteSpeed = - this.options.deleteSpeed !== undefined + this.options.deleteSpeed !== null ? this.options.deleteSpeed : this.options.speed / 3; let typeRange = typeSpeed / 2; @@ -387,8 +383,6 @@ export default class Instance { let textArray = this.elementContainer.innerHTML.split(""); - let amount = chars + 1; - //-- Cut the array by a character. for (let n = textArray.length - 1; n > -1; n--) { if ( @@ -465,7 +459,7 @@ export default class Instance { } /* - Empty the existing text, clearing it instantly. + * Empty the existing text, clearing it instantly. */ empty() { this.elementContainer.innerHTML = ""; @@ -479,13 +473,38 @@ export default class Instance { //-- We haven't reached the end of the queue, go again. if (this.queue.length > 0) { - let thisStep = this.queue[0]; - this.queue.shift(); - thisStep[0].call(this, thisStep[1]); + this.step = this.queue.shift(); + + if (this.step[2] === "first-of-string" && this.options.beforeString) { + this.options.beforeString(this.step, this.queue, this.typeit); + } + + if (this.options.beforeStep) { + this.options.beforeStep(this.step, this.queue, this.typeit); + } + + //-- Execute this step! + this.step[0].call(this, this.step[1], this.step[2]); + + if (this.step[2] === "last-of-string" && this.options.afterString) { + this.options.afterString(this.step, this.queue, this.typeit); + } + + if (this.options.afterStep) { + this.options.afterStep(this.step, this.queue, this.typeit); + } + return; } - this.options.callback(); + //-- @todo: Remove in next major release. + if (this.options.callback) { + this.options.callback(); + } + + if (this.options.afterComplete) { + this.options.afterComplete(this.step, this.typeit); + } if (this.options.loop) { this.queueDeletions(this.elementContainer.innerHTML); @@ -494,8 +513,10 @@ export default class Instance { setTimeout(() => { this.next(); }, this.options.loopDelay / 2); - } else { - this.isComplete = true; + + return; } + + this.isComplete = true; } } diff --git a/src/typeit.js b/src/typeit.js index aee8a190..06138b3c 100644 --- a/src/typeit.js +++ b/src/typeit.js @@ -26,6 +26,8 @@ export default class TypeIt { } get isComplete() { + if (!this.instances.length) return false; + return this.instances[0].isComplete; } @@ -42,7 +44,7 @@ export default class TypeIt { createInstances() { [].slice.call(this.elements).forEach(element => { - this.instances.push(new Instance(element, this.id, this.args)); + this.instances.push(new Instance(element, this.id, this.args, this)); }); } diff --git a/src/utilities.js b/src/utilities.js index 55c97473..9cc80490 100644 --- a/src/utilities.js +++ b/src/utilities.js @@ -36,3 +36,26 @@ export function startsWith(string, search) { export function toArray(string) { return Array.isArray(string) ? string.slice(0) : string.split("
"); } + +export function groupHTMLTags(arr) { + let tPosition = []; + let tag; + let isEntity = false; + + for (let j = 0; j < arr.length; j++) { + if (arr[j] === "<" || arr[j] === "&") { + tPosition[0] = j; + isEntity = arr[j] === "&"; + } + + if (arr[j] === ">" || (arr[j] === ";" && isEntity)) { + tPosition[1] = j; + j = 0; + tag = arr.slice(tPosition[0], tPosition[1] + 1).join(""); + arr.splice(tPosition[0], tPosition[1] - tPosition[0] + 1, tag); + isEntity = false; + } + } + + return arr; +} diff --git a/tests/base.test.js b/tests/base.test.js index f612ca01..50e843f4 100644 --- a/tests/base.test.js +++ b/tests/base.test.js @@ -78,3 +78,21 @@ test("Redefines defaults correctly.", () => { expect(instance.instances[0].options.speed).toEqual(25); expect(instance.instances[0].options.speed).not.toEqual(26); }); + +test("Typing doesn't end with a break tag.", () => { + jest.useFakeTimers(); + + document.body.innerHTML = `
' + +
`; + + const instance = new TypeIt("#element", { + strings: ["One string.", "Two string", "Three string."] + }); + + jest.runAllTimers(); + + expect( + instance.instances[0].elementContainer.innerHTML.endsWith("
") + ).not.toBe(true); +}); diff --git a/tests/callback.test.js b/tests/callback.test.js new file mode 100644 index 00000000..a1e6c8a0 --- /dev/null +++ b/tests/callback.test.js @@ -0,0 +1,163 @@ +import TypeIt from "../src/typeit"; + +test("beforeString() callback works.", () => { + jest.useFakeTimers(); + + document.body.innerHTML = ` +
+ +
+ `; + + let steps = []; + + const mockCallback = jest.fn(); + + let instance = new TypeIt("#element", { + strings: ["First.", "Second."], + beforeString(step, queue, instance) { + mockCallback(step, queue, instance); + } + }); + + jest.runAllTimers(); + + expect(mockCallback.mock.calls.length).toBe(2); + + expect(mockCallback.mock.calls[0][0][1]).toEqual("F"); + expect(mockCallback.mock.calls[0][0][2]).toEqual("first-of-string"); + expect(typeof mockCallback.mock.calls[0][2]).toEqual("object"); + + expect(mockCallback.mock.calls[1][0][1]).toEqual("S"); + expect(mockCallback.mock.calls[1][0][2]).toEqual("first-of-string"); + expect(typeof mockCallback.mock.calls[1][2]).toEqual("object"); +}); + +test("beforeStep() callback works.", () => { + jest.useFakeTimers(); + + document.body.innerHTML = ` +
+ +
+ `; + + let steps = []; + + const mockCallback = jest.fn(); + + let instance = new TypeIt("#element", { + strings: ["First.", "Second."], + beforeStep(step, queue, instance) { + mockCallback(step, queue, instance); + } + }); + + jest.runAllTimers(); + + expect(mockCallback.mock.calls.length).toBe(17); + + //-- Check the 3rd step. + expect(mockCallback.mock.calls[2][0][1]).toEqual("i"); + expect(mockCallback.mock.calls[2][0][2]).toEqual(undefined); + expect(typeof mockCallback.mock.calls[2][2]).toEqual("object"); + + //-- Check the 7th step. + expect(mockCallback.mock.calls[6][0][1]).toEqual("."); + expect(mockCallback.mock.calls[6][0][2]).toEqual("last-of-string"); + expect(typeof mockCallback.mock.calls[6][2]).toEqual("object"); +}); + +test("afterString() callback works.", () => { + jest.useFakeTimers(); + + document.body.innerHTML = ` +
+ +
+ `; + + let steps = []; + + const mockCallback = jest.fn(); + + let instance = new TypeIt("#element", { + strings: ["First.", "Second."], + afterString(step, queue, instance) { + mockCallback(step, queue, instance); + } + }); + + jest.runAllTimers(); + + expect(mockCallback.mock.calls.length).toBe(2); + + expect(mockCallback.mock.calls[0][0][1]).toEqual("."); + expect(mockCallback.mock.calls[0][0][2]).toEqual("last-of-string"); + expect(typeof mockCallback.mock.calls[0][2]).toEqual("object"); + + expect(mockCallback.mock.calls[1][0][1]).toEqual("."); + expect(mockCallback.mock.calls[1][0][2]).toEqual("last-of-string"); + expect(typeof mockCallback.mock.calls[1][2]).toEqual("object"); +}); + +test("afterStep() callback works.", () => { + jest.useFakeTimers(); + + document.body.innerHTML = ` +
+ +
+ `; + + let steps = []; + + const mockCallback = jest.fn(); + + let instance = new TypeIt("#element", { + strings: ["First.", "Second."], + afterStep(step, queue, instance) { + mockCallback(step, queue, instance); + } + }); + + jest.runAllTimers(); + + expect(mockCallback.mock.calls.length).toBe(17); + + //-- Check the 3rd step. + expect(mockCallback.mock.calls[2][0][1]).toEqual("i"); + expect(mockCallback.mock.calls[2][0][2]).toEqual(undefined); + expect(typeof mockCallback.mock.calls[2][2]).toEqual("object"); + + //-- Check the 7th step. + expect(mockCallback.mock.calls[6][0][1]).toEqual("."); + expect(mockCallback.mock.calls[6][0][2]).toEqual("last-of-string"); + expect(typeof mockCallback.mock.calls[6][2]).toEqual("object"); +}); + +test("afterComplete() callback works.", () => { + jest.useFakeTimers(); + + document.body.innerHTML = ` +
+ +
+ `; + + let steps = []; + + const mockCallback = jest.fn(); + + let instance = new TypeIt("#element", { + strings: ["First.", "Second."], + afterComplete(instance) { + mockCallback(instance); + } + }); + + jest.runAllTimers(); + + expect(mockCallback.mock.calls.length).toBe(1); + expect(typeof mockCallback.mock.calls[0][0]).toBe("object"); +}); diff --git a/yarn.lock b/yarn.lock index c5594bb0..41fcebc1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,7 +2,21 @@ # yarn lockfile v1 -abab@^1.0.3: +"@babel/code-frame@^7.0.0-beta.35": + version "7.0.0-beta.41" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.41.tgz#68845c10a895050ab643e869100bbcf294b64e09" + dependencies: + "@babel/highlight" "7.0.0-beta.41" + +"@babel/highlight@7.0.0-beta.41": + version "7.0.0-beta.41" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.41.tgz#7e1d634de3821e664bc8ad9688f240530d239b95" + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^3.0.0" + +abab@^1.0.3, abab@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" @@ -23,10 +37,20 @@ acorn-globals@^3.1.0: dependencies: acorn "^4.0.4" +acorn-globals@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" + dependencies: + acorn "^5.0.0" + acorn@^4.0.4: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" +acorn@^5.0.0, acorn@^5.3.0: + version "5.5.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" + ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -79,9 +103,9 @@ ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" -ansi-styles@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" dependencies: color-convert "^1.9.0" @@ -157,6 +181,10 @@ astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" +async-limiter@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" @@ -336,6 +364,13 @@ babel-jest@^21.2.0: babel-plugin-istanbul "^4.0.0" babel-preset-jest "^21.2.0" +babel-jest@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-22.4.1.tgz#ff53ebca45957347f27ff4666a31499fbb4c4ddd" + dependencies: + babel-plugin-istanbul "^4.1.5" + babel-preset-jest "^22.4.1" + babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" @@ -354,7 +389,7 @@ babel-plugin-external-helpers@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-istanbul@^4.0.0: +babel-plugin-istanbul@^4.0.0, babel-plugin-istanbul@^4.1.5: version "4.1.5" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.5.tgz#6760cdd977f411d3e175bb064f2bc327d99b2b6e" dependencies: @@ -366,6 +401,10 @@ babel-plugin-jest-hoist@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-21.2.0.tgz#2cef637259bd4b628a6cace039de5fcd14dbb006" +babel-plugin-jest-hoist@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-22.4.1.tgz#d712fe5da8b6965f3191dacddbefdbdf4fb66d63" + babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" @@ -621,6 +660,13 @@ babel-preset-jest@^21.2.0: babel-plugin-jest-hoist "^21.2.0" babel-plugin-syntax-object-rest-spread "^6.13.0" +babel-preset-jest@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-22.4.1.tgz#efa2e5f5334242a9457a068452d7d09735db172a" + dependencies: + babel-plugin-jest-hoist "^22.4.1" + babel-plugin-syntax-object-rest-spread "^6.13.0" + babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" @@ -741,6 +787,10 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" +browser-process-hrtime@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + browser-resolve@^1.11.2: version "1.11.2" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" @@ -781,8 +831,8 @@ camelcase@^4.1.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" caniuse-lite@^1.0.30000792: - version "1.0.30000810" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000810.tgz#47585fffce0e9f3593a6feea4673b945424351d9" + version "1.0.30000813" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000813.tgz#7b25e27fdfb8d133f3c932b01f77452140fcc6c9" caseless@~0.12.0: version "0.12.0" @@ -815,13 +865,13 @@ chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chalk@^2.0.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.1.tgz#523fe2678aec7b04e8041909292fe8b17059b796" +chalk@^2.0.0, chalk@^2.0.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.2.tgz#250dc96b07491bfd601e648d66ddf5f60c7a5c65" dependencies: - ansi-styles "^3.2.0" + ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" - supports-color "^5.2.0" + supports-color "^5.3.0" ci-info@^1.0.0: version "1.1.2" @@ -843,6 +893,14 @@ cliui@^3.2.0: strip-ansi "^3.0.1" wrap-ansi "^2.0.0" +cliui@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" + dependencies: + string-width "^2.1.1" + strip-ansi "^4.0.0" + wrap-ansi "^2.0.0" + co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" @@ -875,6 +933,10 @@ commander@~2.14.1: version "2.14.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" +compare-versions@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.1.0.tgz#43310256a5c555aaed4193c04d8f154cf9c6efd5" + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -900,7 +962,7 @@ content-disposition@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" -content-type-parser@^1.0.1: +content-type-parser@^1.0.1, content-type-parser@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/content-type-parser/-/content-type-parser-1.0.2.tgz#caabe80623e63638b2502fd4c7f12ff4ce2352e7" @@ -998,6 +1060,13 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1028,9 +1097,19 @@ detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" +detect-newline@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-2.1.0.tgz#f41f1c10be4b00e87b5f13da680759f2c5bfd3e2" + diff@^3.2.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + +domexception@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + dependencies: + webidl-conversions "^4.0.2" ecc-jsbn@~0.1.1: version "0.1.1" @@ -1043,8 +1122,8 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" electron-to-chromium@^1.3.30: - version "1.3.34" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.34.tgz#d93498f40391bb0c16a603d8241b9951404157ed" + version "1.3.36" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.36.tgz#0eabf71a9ebea9013fb1cc35a390e068624f27e8" encodeurl@~1.0.1: version "1.0.2" @@ -1062,6 +1141,24 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" +es-abstract@^1.5.1: + version "1.10.0" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -1070,7 +1167,7 @@ escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.2, escape-string-regexp@^ version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" -escodegen@^1.6.1: +escodegen@^1.6.1, escodegen@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.1.tgz#dbae17ef96c8e4bedb1356f4504fa4cc2f7cb7e2" dependencies: @@ -1123,6 +1220,10 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -1146,6 +1247,17 @@ expect@^21.2.1: jest-message-util "^21.2.1" jest-regex-util "^21.2.0" +expect@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-22.4.0.tgz#371edf1ae15b83b5bf5ec34b42f1584660a36c16" + dependencies: + ansi-styles "^3.2.0" + jest-diff "^22.4.0" + jest-get-type "^22.1.0" + jest-matcher-utils "^22.4.0" + jest-message-util "^22.4.0" + jest-regex-util "^22.1.0" + express@^4.16.2: version "4.16.2" resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" @@ -1273,6 +1385,10 @@ for-own@^0.1.4: dependencies: for-in "^1.0.1" +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -1329,6 +1445,10 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: mkdirp ">=0.5 0" rimraf "2" +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -1448,6 +1568,12 @@ has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" +has@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + hawk@3.1.3, hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" @@ -1485,7 +1611,7 @@ hosted-git-info@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" -html-encoding-sniffer@^1.0.1: +html-encoding-sniffer@^1.0.1, html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" dependencies: @@ -1520,6 +1646,13 @@ iconv-lite@0.4.19: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" +import-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-1.0.0.tgz#5e4ffdc03f4fe6c009c6729beb29631c2f8227bc" + dependencies: + pkg-dir "^2.0.0" + resolve-cwd "^2.0.0" + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -1567,12 +1700,20 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + is-ci@^1.0.10: version "1.1.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.1.0.tgz#247e4162e7860cebbdaf30b774d6b0ac7dcfe7a5" dependencies: ci-info "^1.0.0" +is-date-object@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" @@ -1607,6 +1748,10 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" +is-generator-fn@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" + is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" @@ -1633,10 +1778,20 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" +is-regex@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-symbol@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -1679,16 +1834,55 @@ istanbul-api@^1.1.1: mkdirp "^0.5.1" once "^1.4.0" +istanbul-api@^1.1.14: + version "1.3.1" + resolved "https://registry.yarnpkg.com/istanbul-api/-/istanbul-api-1.3.1.tgz#4c3b05d18c0016d1022e079b98dc82c40f488954" + dependencies: + async "^2.1.4" + compare-versions "^3.1.0" + fileset "^2.0.2" + istanbul-lib-coverage "^1.2.0" + istanbul-lib-hook "^1.2.0" + istanbul-lib-instrument "^1.10.1" + istanbul-lib-report "^1.1.4" + istanbul-lib-source-maps "^1.2.4" + istanbul-reports "^1.3.0" + js-yaml "^3.7.0" + mkdirp "^0.5.1" + once "^1.4.0" + istanbul-lib-coverage@^1.0.1, istanbul-lib-coverage@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz#4113c8ff6b7a40a1ef7350b01016331f63afde14" +istanbul-lib-coverage@^1.1.1, istanbul-lib-coverage@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.0.tgz#f7d8f2e42b97e37fe796114cb0f9d68b5e3a4341" + istanbul-lib-hook@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" dependencies: append-transform "^0.4.0" +istanbul-lib-hook@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.2.0.tgz#ae556fd5a41a6e8efa0b1002b1e416dfeaf9816c" + dependencies: + append-transform "^0.4.0" + +istanbul-lib-instrument@^1.10.1, istanbul-lib-instrument@^1.8.0: + version "1.10.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.1.tgz#724b4b6caceba8692d3f1f9d0727e279c401af7b" + dependencies: + babel-generator "^6.18.0" + babel-template "^6.16.0" + babel-traverse "^6.18.0" + babel-types "^6.18.0" + babylon "^6.18.0" + istanbul-lib-coverage "^1.2.0" + semver "^5.3.0" + istanbul-lib-instrument@^1.4.2, istanbul-lib-instrument@^1.7.5, istanbul-lib-instrument@^1.9.2: version "1.9.2" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.2.tgz#84905bf47f7e0b401d6b840da7bad67086b4aab6" @@ -1710,7 +1904,16 @@ istanbul-lib-report@^1.1.3: path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.3: +istanbul-lib-report@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.4.tgz#e886cdf505c4ebbd8e099e4396a90d0a28e2acb5" + dependencies: + istanbul-lib-coverage "^1.2.0" + mkdirp "^0.5.1" + path-parse "^1.0.5" + supports-color "^3.1.2" + +istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.1, istanbul-lib-source-maps@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6" dependencies: @@ -1720,18 +1923,40 @@ istanbul-lib-source-maps@^1.1.0, istanbul-lib-source-maps@^1.2.3: rimraf "^2.6.1" source-map "^0.5.3" +istanbul-lib-source-maps@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.4.tgz#cc7ccad61629f4efff8e2f78adb8c522c9976ec7" + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^1.2.0" + mkdirp "^0.5.1" + rimraf "^2.6.1" + source-map "^0.5.3" + istanbul-reports@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.4.tgz#5ccba5e22b7b5a5d91d5e0a830f89be334bf97bd" dependencies: handlebars "^4.0.3" +istanbul-reports@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.3.0.tgz#2f322e81e1d9520767597dca3c20a0cce89a3554" + dependencies: + handlebars "^4.0.3" + jest-changed-files@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-21.2.0.tgz#5dbeecad42f5d88b482334902ce1cba6d9798d29" dependencies: throat "^4.0.0" +jest-changed-files@^22.2.0: + version "22.2.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-22.2.0.tgz#517610c4a8ca0925bdc88b0ca53bd678aa8d019e" + dependencies: + throat "^4.0.0" + jest-cli@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-21.2.1.tgz#9c528b6629d651911138d228bdb033c157ec8c00" @@ -1766,6 +1991,45 @@ jest-cli@^21.2.1: worker-farm "^1.3.1" yargs "^9.0.0" +jest-cli@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-22.4.2.tgz#e6546dc651e13d164481aa3e76e53ac4f4edab06" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.1" + exit "^0.1.2" + glob "^7.1.2" + graceful-fs "^4.1.11" + import-local "^1.0.0" + is-ci "^1.0.10" + istanbul-api "^1.1.14" + istanbul-lib-coverage "^1.1.1" + istanbul-lib-instrument "^1.8.0" + istanbul-lib-source-maps "^1.2.1" + jest-changed-files "^22.2.0" + jest-config "^22.4.2" + jest-environment-jsdom "^22.4.1" + jest-get-type "^22.1.0" + jest-haste-map "^22.4.2" + jest-message-util "^22.4.0" + jest-regex-util "^22.1.0" + jest-resolve-dependencies "^22.1.0" + jest-runner "^22.4.2" + jest-runtime "^22.4.2" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" + jest-validate "^22.4.2" + jest-worker "^22.2.2" + micromatch "^2.3.11" + node-notifier "^5.2.1" + realpath-native "^1.0.0" + rimraf "^2.5.4" + slash "^1.0.0" + string-length "^2.0.0" + strip-ansi "^4.0.0" + which "^1.2.12" + yargs "^10.0.3" + jest-config@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-21.2.1.tgz#c7586c79ead0bcc1f38c401e55f964f13bf2a480" @@ -1782,6 +2046,22 @@ jest-config@^21.2.1: jest-validate "^21.2.1" pretty-format "^21.2.1" +jest-config@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-22.4.2.tgz#580ba5819bf81a5e48f4fd470e8b81834f45c855" + dependencies: + chalk "^2.0.1" + glob "^7.1.1" + jest-environment-jsdom "^22.4.1" + jest-environment-node "^22.4.1" + jest-get-type "^22.1.0" + jest-jasmine2 "^22.4.2" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.2" + pretty-format "^22.4.0" + jest-diff@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-21.2.1.tgz#46cccb6cab2d02ce98bc314011764bb95b065b4f" @@ -1791,10 +2071,25 @@ jest-diff@^21.2.1: jest-get-type "^21.2.0" pretty-format "^21.2.1" +jest-diff@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-22.4.0.tgz#384c2b78519ca44ca126382df53f134289232525" + dependencies: + chalk "^2.0.1" + diff "^3.2.0" + jest-get-type "^22.1.0" + pretty-format "^22.4.0" + jest-docblock@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-21.2.0.tgz#51529c3b30d5fd159da60c27ceedc195faf8d414" +jest-docblock@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-22.4.0.tgz#dbf1877e2550070cfc4d9b07a55775a0483159b8" + dependencies: + detect-newline "^2.1.0" + jest-environment-jsdom@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-21.2.1.tgz#38d9980c8259b2a608ec232deee6289a60d9d5b4" @@ -1803,6 +2098,14 @@ jest-environment-jsdom@^21.2.1: jest-util "^21.2.1" jsdom "^9.12.0" +jest-environment-jsdom@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-22.4.1.tgz#754f408872441740100d3917e5ec40c74de6447f" + dependencies: + jest-mock "^22.2.0" + jest-util "^22.4.1" + jsdom "^11.5.1" + jest-environment-node@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-21.2.1.tgz#98c67df5663c7fbe20f6e792ac2272c740d3b8c8" @@ -1810,10 +2113,21 @@ jest-environment-node@^21.2.1: jest-mock "^21.2.0" jest-util "^21.2.1" +jest-environment-node@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-22.4.1.tgz#418850eb654596b8d6e36c2021cbedbc23df8e16" + dependencies: + jest-mock "^22.2.0" + jest-util "^22.4.1" + jest-get-type@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-21.2.0.tgz#f6376ab9db4b60d81e39f30749c6c466f40d4a23" +jest-get-type@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-22.1.0.tgz#4e90af298ed6181edc85d2da500dbd2753e0d5a9" + jest-haste-map@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-21.2.0.tgz#1363f0a8bb4338f24f001806571eff7a4b2ff3d8" @@ -1825,6 +2139,18 @@ jest-haste-map@^21.2.0: sane "^2.0.0" worker-farm "^1.3.1" +jest-haste-map@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-22.4.2.tgz#a90178e66146d4378bb076345a949071f3b015b4" + dependencies: + fb-watchman "^2.0.0" + graceful-fs "^4.1.11" + jest-docblock "^22.4.0" + jest-serializer "^22.4.0" + jest-worker "^22.2.2" + micromatch "^2.3.11" + sane "^2.0.0" + jest-jasmine2@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-21.2.1.tgz#9cc6fc108accfa97efebce10c4308548a4ea7592" @@ -1838,6 +2164,28 @@ jest-jasmine2@^21.2.1: jest-snapshot "^21.2.1" p-cancelable "^0.3.0" +jest-jasmine2@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-jasmine2/-/jest-jasmine2-22.4.2.tgz#dfd3d259579ed6f52510d8f1ab692808f0d40691" + dependencies: + chalk "^2.0.1" + co "^4.6.0" + expect "^22.4.0" + graceful-fs "^4.1.11" + is-generator-fn "^1.0.0" + jest-diff "^22.4.0" + jest-matcher-utils "^22.4.0" + jest-message-util "^22.4.0" + jest-snapshot "^22.4.0" + jest-util "^22.4.1" + source-map-support "^0.5.0" + +jest-leak-detector@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-22.4.0.tgz#64da77f05b001c96d2062226e079f89989c4aa2f" + dependencies: + pretty-format "^22.4.0" + jest-matcher-utils@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-21.2.1.tgz#72c826eaba41a093ac2b4565f865eb8475de0f64" @@ -1846,6 +2194,14 @@ jest-matcher-utils@^21.2.1: jest-get-type "^21.2.0" pretty-format "^21.2.1" +jest-matcher-utils@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-22.4.0.tgz#d55f5faf2270462736bdf7c7485ee931c9d4b6a1" + dependencies: + chalk "^2.0.1" + jest-get-type "^22.1.0" + pretty-format "^22.4.0" + jest-message-util@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-21.2.1.tgz#bfe5d4692c84c827d1dcf41823795558f0a1acbe" @@ -1854,20 +2210,44 @@ jest-message-util@^21.2.1: micromatch "^2.3.11" slash "^1.0.0" +jest-message-util@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-22.4.0.tgz#e3d861df16d2fee60cb2bc8feac2188a42579642" + dependencies: + "@babel/code-frame" "^7.0.0-beta.35" + chalk "^2.0.1" + micromatch "^2.3.11" + slash "^1.0.0" + stack-utils "^1.0.1" + jest-mock@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-21.2.0.tgz#7eb0770e7317968165f61ea2a7281131534b3c0f" +jest-mock@^22.2.0: + version "22.2.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-22.2.0.tgz#444b3f9488a7473adae09bc8a77294afded397a7" + jest-regex-util@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-21.2.0.tgz#1b1e33e63143babc3e0f2e6c9b5ba1eb34b2d530" +jest-regex-util@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-22.1.0.tgz#5daf2fe270074b6da63e5d85f1c9acc866768f53" + jest-resolve-dependencies@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-21.2.0.tgz#9e231e371e1a736a1ad4e4b9a843bc72bfe03d09" dependencies: jest-regex-util "^21.2.0" +jest-resolve-dependencies@^22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-22.1.0.tgz#340e4139fb13315cd43abc054e6c06136be51e31" + dependencies: + jest-regex-util "^22.1.0" + jest-resolve@^21.2.0: version "21.2.0" resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-21.2.0.tgz#068913ad2ba6a20218e5fd32471f3874005de3a6" @@ -1876,6 +2256,13 @@ jest-resolve@^21.2.0: chalk "^2.0.1" is-builtin-module "^1.0.0" +jest-resolve@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-22.4.2.tgz#25d88aa4147462c9c1c6a1ba16250d3794c24d00" + dependencies: + browser-resolve "^1.11.2" + chalk "^2.0.1" + jest-runner@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-21.2.1.tgz#194732e3e518bfb3d7cbfc0fd5871246c7e1a467" @@ -1891,6 +2278,22 @@ jest-runner@^21.2.1: throat "^4.0.0" worker-farm "^1.3.1" +jest-runner@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-22.4.2.tgz#19390ea9d99f768973e16f95a1efa351c0017e87" + dependencies: + exit "^0.1.2" + jest-config "^22.4.2" + jest-docblock "^22.4.0" + jest-haste-map "^22.4.2" + jest-jasmine2 "^22.4.2" + jest-leak-detector "^22.4.0" + jest-message-util "^22.4.0" + jest-runtime "^22.4.2" + jest-util "^22.4.1" + jest-worker "^22.2.2" + throat "^4.0.0" + jest-runtime@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-21.2.1.tgz#99dce15309c670442eee2ebe1ff53a3cbdbbb73e" @@ -1913,6 +2316,35 @@ jest-runtime@^21.2.1: write-file-atomic "^2.1.0" yargs "^9.0.0" +jest-runtime@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-22.4.2.tgz#0de0444f65ce15ee4f2e0055133fc7c17b9168f3" + dependencies: + babel-core "^6.0.0" + babel-jest "^22.4.1" + babel-plugin-istanbul "^4.1.5" + chalk "^2.0.1" + convert-source-map "^1.4.0" + exit "^0.1.2" + graceful-fs "^4.1.11" + jest-config "^22.4.2" + jest-haste-map "^22.4.2" + jest-regex-util "^22.1.0" + jest-resolve "^22.4.2" + jest-util "^22.4.1" + jest-validate "^22.4.2" + json-stable-stringify "^1.0.1" + micromatch "^2.3.11" + realpath-native "^1.0.0" + slash "^1.0.0" + strip-bom "3.0.0" + write-file-atomic "^2.1.0" + yargs "^10.0.3" + +jest-serializer@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-22.4.0.tgz#b5d145b98c4b0d2c20ab686609adbb81fe23b566" + jest-snapshot@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-21.2.1.tgz#29e49f16202416e47343e757e5eff948c07fd7b0" @@ -1924,6 +2356,17 @@ jest-snapshot@^21.2.1: natural-compare "^1.4.0" pretty-format "^21.2.1" +jest-snapshot@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-22.4.0.tgz#03d3ce63f8fa7352388afc6a3c8b5ccc3a180ed7" + dependencies: + chalk "^2.0.1" + jest-diff "^22.4.0" + jest-matcher-utils "^22.4.0" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + pretty-format "^22.4.0" + jest-util@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-21.2.1.tgz#a274b2f726b0897494d694a6c3d6a61ab819bb78" @@ -1936,6 +2379,18 @@ jest-util@^21.2.1: jest-validate "^21.2.1" mkdirp "^0.5.1" +jest-util@^22.4.1: + version "22.4.1" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-22.4.1.tgz#dd17c3bdb067f8e90591563ec0c42bf847dc249f" + dependencies: + callsites "^2.0.0" + chalk "^2.0.1" + graceful-fs "^4.1.11" + is-ci "^1.0.10" + jest-message-util "^22.4.0" + mkdirp "^0.5.1" + source-map "^0.6.0" + jest-validate@^21.2.1: version "21.2.1" resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-21.2.1.tgz#cc0cbca653cd54937ba4f2a111796774530dd3c7" @@ -1945,13 +2400,36 @@ jest-validate@^21.2.1: leven "^2.1.0" pretty-format "^21.2.1" +jest-validate@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-22.4.2.tgz#e789a4e056173bf97fe797a2df2d52105c57d4f4" + dependencies: + chalk "^2.0.1" + jest-config "^22.4.2" + jest-get-type "^22.1.0" + leven "^2.1.0" + pretty-format "^22.4.0" + +jest-worker@^22.2.2: + version "22.2.2" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-22.2.2.tgz#c1f5dc39976884b81f68ec50cb8532b2cbab3390" + dependencies: + merge-stream "^1.0.1" + +jest@^22.4.2: + version "22.4.2" + resolved "https://registry.yarnpkg.com/jest/-/jest-22.4.2.tgz#34012834a49bf1bdd3bc783850ab44e4499afc20" + dependencies: + import-local "^1.0.0" + jest-cli "^22.4.2" + js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" js-yaml@^3.7.0: - version "3.10.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + version "3.11.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -1960,6 +2438,37 @@ jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" +jsdom@^11.5.1: + version "11.6.2" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.6.2.tgz#25d1ef332d48adf77fc5221fe2619967923f16bb" + dependencies: + abab "^1.0.4" + acorn "^5.3.0" + acorn-globals "^4.1.0" + array-equal "^1.0.0" + browser-process-hrtime "^0.1.2" + content-type-parser "^1.0.2" + cssom ">= 0.3.2 < 0.4.0" + cssstyle ">= 0.2.37 < 0.3.0" + domexception "^1.0.0" + escodegen "^1.9.0" + html-encoding-sniffer "^1.0.2" + left-pad "^1.2.0" + nwmatcher "^1.4.3" + parse5 "4.0.0" + pn "^1.1.0" + request "^2.83.0" + request-promise-native "^1.0.5" + sax "^1.2.4" + symbol-tree "^3.2.2" + tough-cookie "^2.3.3" + w3c-hr-time "^1.0.1" + webidl-conversions "^4.0.2" + whatwg-encoding "^1.0.3" + whatwg-url "^6.4.0" + ws "^4.0.0" + xml-name-validator "^3.0.0" + jsdom@^9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-9.12.0.tgz#e8c546fffcb06c00d4833ca84410fed7f8a097d4" @@ -2049,6 +2558,10 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" +left-pad@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.2.0.tgz#d30a73c6b8201d8f7d8e7956ba9616087a68e0ee" + leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -2086,7 +2599,11 @@ locate-path@^2.0.0: p-locate "^2.0.0" path-exists "^3.0.0" -lodash@^4.14.0, lodash@^4.17.4, lodash@^4.5.1: +lodash.sortby@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + +lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.5.1: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" @@ -2127,6 +2644,12 @@ merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + dependencies: + readable-stream "^2.0.1" + merge@^1.1.3: version "1.2.0" resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da" @@ -2215,7 +2738,7 @@ node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" -node-notifier@^5.0.2: +node-notifier@^5.0.2, node-notifier@^5.2.1: version "5.2.1" resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.2.1.tgz#fa313dd08f5517db0e2502e5758d664ac69f9dea" dependencies: @@ -2281,7 +2804,7 @@ number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" -"nwmatcher@>= 1.3.9 < 2.0.0": +"nwmatcher@>= 1.3.9 < 2.0.0", nwmatcher@^1.4.3: version "1.4.3" resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" @@ -2293,6 +2816,17 @@ object-assign@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object.getownpropertydescriptors@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.5.1" + object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -2392,6 +2926,10 @@ parse-json@^2.2.0: dependencies: error-ex "^1.2.0" +parse5@4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + parse5@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" @@ -2466,6 +3004,16 @@ pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pkg-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +pn@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -2485,6 +3033,13 @@ pretty-format@^21.2.1: ansi-regex "^3.0.0" ansi-styles "^3.2.0" +pretty-format@^22.4.0: + version "22.4.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-22.4.0.tgz#237b1f7e1c50ed03bc65c03ccc29d7c8bb7beb94" + dependencies: + ansi-regex "^3.0.0" + ansi-styles "^3.2.0" + private@^0.1.6, private@^0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" @@ -2512,6 +3067,10 @@ punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" +punycode@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + qs@6.5.1, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" @@ -2579,9 +3138,9 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.6, readable-stream@^2.1.4: - version "2.3.4" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071" +readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.1.4: + version "2.3.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.5.tgz#b4f85003a938cbb6ecbce2a124fb1012bd1a838d" dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -2591,6 +3150,12 @@ readable-stream@^2.0.6, readable-stream@^2.1.4: string_decoder "~1.0.3" util-deprecate "~1.0.1" +realpath-native@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.0.0.tgz#7885721a83b43bd5327609f0ddecb2482305fdf0" + dependencies: + util.promisify "^1.0.0" + regenerate@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" @@ -2649,6 +3214,20 @@ repeating@^2.0.0: dependencies: is-finite "^1.0.0" +request-promise-core@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + dependencies: + lodash "^4.13.1" + +request-promise-native@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + dependencies: + request-promise-core "1.1.1" + stealthy-require "^1.1.0" + tough-cookie ">=2.3.3" + request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" @@ -2703,6 +3282,33 @@ request@^2.79.0: tunnel-agent "^0.6.0" uuid "^3.1.0" +request@^2.83.0: + version "2.85.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.85.0.tgz#5a03615a47c61420b3eb99b7dba204f83603e1fa" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" @@ -2711,6 +3317,16 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" +resolve-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz#00a9f7387556e27038eae232caa372a6a59b665a" + dependencies: + resolve-from "^3.0.0" + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" @@ -2721,7 +3337,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: +rimraf@2, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: @@ -2772,7 +3388,7 @@ sane@^2.0.0: optionalDependencies: fsevents "^1.1.1" -sax@^1.2.1: +sax@^1.2.1, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -2859,6 +3475,12 @@ source-map-support@^0.4.15: dependencies: source-map "^0.5.6" +source-map-support@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.3.tgz#2b3d5fff298cfa4d1afd7d4352d569e9a0158e76" + dependencies: + source-map "^0.6.0" + source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" @@ -2869,7 +3491,7 @@ source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" -source-map@~0.6.1: +source-map@^0.6.0, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" @@ -2917,6 +3539,10 @@ sshpk@^1.7.0: jsbn "~0.1.0" tweetnacl "~0.14.0" +stack-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + "statuses@>= 1.3.1 < 2": version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" @@ -2925,6 +3551,10 @@ statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" +stealthy-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" @@ -2940,7 +3570,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -string-width@^2.0.0: +string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: @@ -3007,13 +3637,13 @@ supports-color@^3.1.2, supports-color@^3.2.3: dependencies: has-flag "^1.0.0" -supports-color@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.2.0.tgz#b0d5333b1184dd3666cbe5aa0b45c5ac7ac17a4a" +supports-color@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.3.0.tgz#5b24ac15db80fa927cf5227a4a33fd3c4c7676c0" dependencies: has-flag "^3.0.0" -symbol-tree@^3.2.1: +symbol-tree@^3.2.1, symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" @@ -3060,12 +3690,18 @@ to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" -tough-cookie@^2.3.2, tough-cookie@~2.3.0, tough-cookie@~2.3.3: +tough-cookie@>=2.3.3, tough-cookie@^2.3.2, tough-cookie@^2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.4.tgz#ec60cee38ac675063ffc97a5c18970578ee83655" dependencies: punycode "^1.4.1" +tr46@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + dependencies: + punycode "^2.1.0" + tr46@~0.0.3: version "0.0.3" resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" @@ -3111,8 +3747,8 @@ uglify-js@^2.6: uglify-to-browserify "~1.0.0" uglify-js@^3.0.9: - version "3.3.12" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.12.tgz#efd87c16a1f4c674a8a5ede571001ef634dcc883" + version "3.3.13" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.13.tgz#8a1a89eeb16e2d6a66b0db2b04cb871af3c669cf" dependencies: commander "~2.14.1" source-map "~0.6.1" @@ -3133,6 +3769,13 @@ util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" +util.promisify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + dependencies: + define-properties "^1.1.2" + object.getownpropertydescriptors "^2.0.3" + utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" @@ -3160,6 +3803,12 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" +w3c-hr-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + dependencies: + browser-process-hrtime "^0.1.2" + walker@~1.0.5: version "1.0.7" resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.7.tgz#2f7f9b8fd10d677262b18a884e28d19618e028fb" @@ -3177,11 +3826,11 @@ webidl-conversions@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" -webidl-conversions@^4.0.0: +webidl-conversions@^4.0.0, webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" -whatwg-encoding@^1.0.1: +whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" dependencies: @@ -3194,6 +3843,14 @@ whatwg-url@^4.3.0: tr46 "~0.0.3" webidl-conversions "^3.0.0" +whatwg-url@^6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" + dependencies: + lodash.sortby "^4.7.0" + tr46 "^1.0.0" + webidl-conversions "^4.0.1" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -3252,10 +3909,21 @@ write-file-atomic@^2.1.0: imurmurhash "^0.1.4" signal-exit "^3.0.2" +ws@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" + dependencies: + async-limiter "~1.0.0" + safe-buffer "~5.1.0" + xml-name-validator@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" +xml-name-validator@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" @@ -3274,6 +3942,29 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" +yargs-parser@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" + dependencies: + camelcase "^4.1.0" + +yargs@^10.0.3: + version "10.1.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" + dependencies: + cliui "^4.0.0" + decamelize "^1.1.1" + find-up "^2.1.0" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^8.1.0" + yargs@^9.0.0: version "9.0.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c"