diff --git a/.tmp/site-assets/main.css b/.tmp/site-assets/main.css new file mode 100644 index 0000000000..fa7270a86c --- /dev/null +++ b/.tmp/site-assets/main.css @@ -0,0 +1,434 @@ +html, +body { + margin: 0; + padding: 0; +} + +body { + font: 16px 'Helvetica Neue', Helvetica, Arial; + font-weight: 300; + line-height: 1.5; + width: auto; + background: #fafafa; + color: #353535; + font-smoothing: antialiased; +} +body.learn-page{ + max-width: 1600px; + margin: 0 auto; +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-weight: 400; + line-height: 1.2; + color: #000; +} + +h2 { + margin: 10px 0; + font-size: 24px; +} + +a, +.link { + color: #9f3c3c; + font-weight: 500; + cursor: pointer; +} + + +a:hover, +.link:hover { + color: #431919; + text-decoration: underline; +} + +p { + font-size: 16px; + line-height: 1.5; + font-weight: 300; +} + +var { + font-style: normal; +} + +header p { + font-size: 30px; + line-height: 1.2; + margin-top: 10px; +} + +header nav { + margin-top: 20px; + font-size: 20px; +} + +header nav a { + font-weight: 200; +} + +header nav a:not(:last-child) { + margin-right: 5px; + margin-bottom: 5px; +} + +.logo { + margin-top: 70px; +} + +.logo-icon { + display: none; +} + +.row { + margin-top: 20px; + margin-bottom: 20px; +} + +.screenshot { + width: 100%; + height: auto; + max-width: 558px; + margin-top: 12px; + float: right; +} + +.tagline2 { + font-size: 21px; + font-style: italic; + margin-top: 40px; +} + +.container { + margin-top: 10px; + margin-bottom: 20px; +} + +.whats-new li { + position: relative; + margin: 15px 0; + list-style: none; +} + +.whats-new li:before { + content: '✔'; + position: absolute; + left: -20px; +} + +.app-lists { + overflow: hidden; +} + +.applist { + list-style: none; + margin: 0; + padding: 0; + font-size: 17px; + display: -ms-flexbox; + display: flex; + -ms-flex-wrap: wrap; + flex-wrap: wrap; +} + +.applist li { + padding: 10px 0; + width: 160px; +} + +.applist a { + position: relative; /* popover */ +} + +.applist-intro { + margin: 10px 0 10px; + font-style: italic; +} + +.applist .routing::after, +.applist .label, +.legend .label { + content: 'R'; + position: relative; + top: -3px; + font-size: 9px; + padding: 1px 3px 1px; + background-color: rgba(0, 0, 0, .1); + border-radius: 3px; + font-weight: bold; + line-height: 13px; + color: #777; + vertical-align: middle; + white-space: nowrap; + text-shadow: 0 -1px 0 rgba(255, 255, 255, 0.25); +} + +.applist .labs a, +.labs-example { + color: #582C42; +} + +.applist a:hover .label { + text-decoration: none !important; + color: red; +} + +.legend { + margin-top: 20px; + margin-left: 0; + padding: 0; + list-style-type: none; +} + +.legend li { + margin-bottom: 0.5em; +} + +.legend li:last-child { + margin-bottom: 0; +} + +.collapsed { + overflow: hidden; + max-height: 0; + transition: max-height 0.7s ease-out; +} + +#news-expander { + display: none; +} + +#news-expander:checked ~ .collapsed { + max-height: 999px; + transition: max-height 0.7s ease-in; +} + +.credit { + text-align: center; +} + +.credit a { + margin: 5px; + white-space: nowrap; +} + +.credit a img { + border-radius: 3px; + margin-right: 5px; +} + +.popover { + margin: 0; + cursor: default; + color: #333; + white-space: normal; + z-index: 999; +} + +.popover-title { + padding: 9px 70px 9px 15px; +} + +.popover-title a { + font-size: 13px; + position: absolute; + right: 20px; +} + +.quote { + border: none; + margin: 20px 0 70px 0; +} + +.quote p { + font-size: 17px; + line-height: 1.3; + font-style: italic; +} + +.quote p:before { + content: '“'; + font-size: 50px; + opacity: .15; + position: absolute; + top: -20px; + left: 3px; +} + +.quote p:after { + content: '”'; + font-size: 50px; + opacity: .15; + position: absolute; + bottom: -42px; + right: 3px; +} + +.quote footer { + position: absolute; + bottom: -60px; + left: 12px; +} + +.quote footer img { + border-radius: 3px; +} + +.quote footer a { + margin-left: 5px; + vertical-align: middle; +} + +.speech-bubble { + position: relative; + padding: 10px; + background: rgba(0, 0, 0, .04); + border-radius: 5px; +} + +.speech-bubble:after { + content: ''; + position: absolute; + top: 100%; + left: 20px; + border: 13px solid transparent; + border-top-color: rgba(0, 0, 0, .04); +} + +.zocial.red { + background-color: #b12d2b; +} + +.zocial.gray { + background-color: rgba(0, 0, 0, .5); +} + +.zocial.ltgray { + color: inherit; + text-shadow: none; +} + +.zocial.ltgray strong { + color: #B83F45; +} + +.zocial.small { + font-size: 12px; + padding: 2px 10px; +} + +.zocial, +a.zocial { + background: #f4f4f4; + border: 1px solid #777; + border-color: rgba(0, 0, 0, 0.2); + border-bottom-color: #333; + border-bottom-color: rgba(0, 0, 0, 0.4); + color: white; + cursor: pointer; + display: inline-block; + padding: 6px 10px; + text-align: center; + text-decoration: none; + text-shadow: 0 1px 0 rgba(0, 0, 0, 0.5); + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + position: relative; + border-radius: .3em; +} + +@media (max-width: 480px) { + .credit a { + display: block; + } +} + +@media (max-width: 770px) { + h2 { + margin-top: 20px; + } + + .row, + .credit { + margin-left: 10px; + margin-right: 10px; + } + + .logo { + max-width: 100%; + margin-top: 0; + } + + .container { + margin: auto; + } +} + +@media (min-width: 992px) { + .logo-icon { + display: block; + } +} + +hr { + margin: 20px 0; + border: 0; + border-top: 1px dashed #c5c5c5; + border-bottom: 1px dashed #f7f7f7; +} + +/* Learn page specifics*/ +.learn-page > .learn { + position: fixed; + height: 100%; + width: 272px; + top: 0px; + left: -300px; + overflow-y: auto; + padding: 0px; + background-color: rgba(255, 255, 255, .6); + transition-property: left; + transition-duration: 500ms; + line-height: 36px; + text-indent: 20px; +} +.learn-page nav a { + display: block; +} + +.learn nav a:hover, .learn-page nav a.selected { + background-color: #b83f45; + color: #ffffff; +} + +.learn .content { + padding: 15px; +} +.learn-page header { + width: 100%; +} + +div.learn { + margin: 50px 20px 20px 20px; + padding: 20px; + background: #eee; +} + +@media (min-width: 899px) { + .learn-page { + width: auto; + padding-left: 300px; + } + + .learn-page > .learn { + left: 8px; + } +} \ No newline at end of file diff --git a/.travis.yml b/.travis.yml index 9306173d18..8dc2c15092 100644 --- a/.travis.yml +++ b/.travis.yml @@ -284,6 +284,10 @@ jobs: env: - CYPRESS_framework=typescript-react <<: *defaults + - stage: test + env: + - CYPRESS_framework=twobirds-es6 + <<: *defaults - stage: test env: - CYPRESS_framework=vanilla-es6 diff --git a/examples/twobirds-es6/.gitignore b/examples/twobirds-es6/.gitignore new file mode 100644 index 0000000000..ad3758381c --- /dev/null +++ b/examples/twobirds-es6/.gitignore @@ -0,0 +1,3 @@ +node_modules +!node_modules/todomvc-app-css/index.css +!node_modules/todomvc-common/base.css diff --git a/examples/twobirds-es6/README.md b/examples/twobirds-es6/README.md new file mode 100644 index 0000000000..dd9a924728 --- /dev/null +++ b/examples/twobirds-es6/README.md @@ -0,0 +1,29 @@ +# twoBirds ES6 • [TodoMVC](http://todomvc.com) + +> A twoBirds version of the todoMVC app. + +## Installation + +To get started with this example, navigate into the example folder and install the NPM modules. +```bash +cd todomvc/examples/twobirds-es6 +npm install +``` + +## Compiling ES6 to ES5 + +After NPM modules have been installed, use the pre-defined Babel script to convert the `src` files. Browserify is also used so that `module.exports` and `require()` can be run in your browser. + +```bash +npm run compile +``` + +## Support + +- [twitter](http://twitter.com/FrankieThu) + +*Let us [know](https://github.com/tastejs/todomvc/issues) if you discover anything worth sharing.* + +## Credit + +Created by [Frank Thuerigen](mailto://fthuerigen@googlemail.com) diff --git a/examples/twobirds-es6/dist/bundle.js b/examples/twobirds-es6/dist/bundle.js new file mode 100644 index 0000000000..cbf59a6c8b --- /dev/null +++ b/examples/twobirds-es6/dist/bundle.js @@ -0,0 +1,6883 @@ +/*! todoMVC twobirds ES6 - v1.0.0 - 2018-05-14 */ + +/*! twobirds-core - v8.1.14 - 2018-05-11 */ + +/** + twoBirds V8 core functionality + + @author frank.thuerigen + @copyright copyright (c) 2006- Frank Thürigen + @license GNU LGPL v3 - read LICENSE.txt + + */ + +// temporary vars + +// POLYFILLS + +// matches polyfill +this.Element && (function(ElementPrototype){ + ElementPrototype.matches = ElementPrototype.matches || + ElementPrototype.matchesSelector || + ElementPrototype.webkitMatchesSelector || + ElementPrototype.msMatchesSelector || + function(selector) { + var node = this, + nodes = (node.parentNode || node.document).querySelectorAll(selector), i = -1; + while (nodes[++i] && nodes[i] !== node){} + return !!nodes[i]; + }; +})(Element.prototype); // jshint ignore:line + +// closest polyfill +this.Element && (function(ElementPrototype){ + ElementPrototype.closest = ElementPrototype.closest || + function(selector) { + var el = this; + while (el.matches && !el.matches(selector)) { + el = el.parentNode; + } + return el.matches ? el : null; + }; +})(Element.prototype); // jshint ignore:line + +// twoBirds + +tb = (function(){ + + var internaltb; + + /** + @class tb.Selector + @constructor + @extends tb + + @param {function|string|object|array} pSelector + @param {domNode} [pDomNode] - optional, the DOM node in which to search + + @returns {object} - the twoBirds instance you just created + + twoBirds selector constructor + + CAUTION: you may use this class directly if you know what you are doing, + but the correct syntax for call is simply: + + @example + + tb( pSelector ) + .whateverChainedMethod(); // etc. + + HINT: tb() works as a selector, new tb() instanciates a twoBirds instance from a class. + + @example + + // get tB instances from DOM by css query selector + tb( 'div' ) // any tbInstance that sits in a div dom node + + // get tB instances from DOM by constructor + tb( app.sampleConstructor ) // any tbInstance in DOM that is instanceof sampleConstructor + + // get tB instances from DOM by regEx + tb( /myRegEx/ ) // any tbInstance in DOM that has a namespace property that fits the regEx + + // get tB instances from DOM by array of selectors + tb( [ 'body', /myRegEx/ ] ) // any combination of selectors in an array, result is additive, flat and unique + + */ + function TbSelector( pSelector, pDomNode ){ + var that = this; + + that.length = 0; + + if ( !pSelector || pSelector instanceof tb.Selector ){ + return that; + } else if( pSelector instanceof tb ){ + [].push.call( that, pSelector ); + return that; + } + + switch (typeof pSelector) { + + // selection by dom selector string + case 'string': + + tb.dom( pSelector+'[data-tb]', pDomNode || window ) + .forEach( + function ( pThisNode ) { + if ( !!pThisNode.tb ){ + Object + .keys( pThisNode.tb ) + .forEach( + function( pKey ){ + [].push.call( that, pThisNode.tb[ pKey ] ); // push dom object to tb selector content + } + ); + } + } + ); + break; + + case 'object': // either regEx or nodeType + + if ( pSelector instanceof tb ){ // it is a twoBirds object + + [].push.call( that, pSelector ); + return that; + + } + + if ( pSelector instanceof RegExp ){ // it is a regular expression + tb.dom( '[data-tb]', pDomNode || window ) + .forEach( + function ( pDomNode ) { + Object + .keys( pDomNode.tb ) + .forEach( + function( pKey ){ + var tbElement = pDomNode.tb[ pKey ]; + + if ( tbElement instanceof tb + && !!tbElement['namespace'] + && !!tbElement.namespace.match( pSelector ) + ){ + [].push.call( that, tbElement ); + } + } + ); + } + ); + + } else if ( !!pSelector['nodeType'] && !!pSelector['tb'] ){ // it is a dom node containing tb elements + Object + .keys( pSelector.tb ) + .forEach( + function( pKey ){ + [].push.call( that, pSelector.tb[ pKey ] ); + } + ); + + } else if ( pSelector.constructor === Array || !!pSelector['length'] + && !!pSelector['0'] && !(pSelector instanceof Array) + ){ + // it is an array || array like object + [].forEach.call( + pSelector, + function( pThisSelector ){ + var thisResult = tb( pThisSelector ); + [].forEach.call( + thisResult, + function( pTbElement ){ + if ( -1 === [].indexOf.call( that, pTbElement ) ){ + [].push.call( that, pTbElement ); + } + } + ); + } + ); + } + + break; + + // selection by constructor: get all tb instances from DOM, + // check whether their prototype matches constructor prototype + case 'function': + + tb.dom( '[data-tb]', pDomNode || window ) + .map( + function ( pDomNode ) { + Object + .keys( pDomNode.tb ) + .forEach( + function( pKey ){ + var tbElement = pDomNode.tb[ pKey ]; + + if ( !!tbElement + && tbElement instanceof tb + && tbElement instanceof pSelector + ){ + [].push.call( that, tbElement ); + } + } + ); + } + ); + + break; + } + + return that; + + } + + // empty class def for temporary handler storage, needed for on(), one(), off() and trigger() + function Nop(){} + Nop.prototype = { namespace: 'Nop' }; + + // HINT: TbSelector (class) prototype definition after Tb prototype definition + + /** + @class tb + @constructor + + @param {object} pOptions + @param pOptions.pClass - class Namespace as string or class + @param [pOptions.pConfig] - optional configuration, any type, preferrably object + @param [pOptions.pTarget] - target to put object in, DOM node or any other object + + @returns {object} - the twoBirds instance you just created + + twoBirds constructor + + @example + + // put Instance into DOM node + new tb( + app.myConstructor, // any constructor you want to have an instance of + { ... }, // the config object you hand over to the constructor + target.appendChild( document.createElement( 'span' ) ) // DOM node to insert the object item + ); + + // put Instance anywhere + new tb( + app.myConstructor, // any constructor you want to have an instance of + { ... }, // the config object you hand over to the constructor + anotherTbInstance // any other object you want to put the tb instance in + ); + + // if a namespace STRING is given, requirement loading is done in case the class isnt present yet + new tb( + 'app.myConstructor', // namespace string for the constructor you want to have an instance of + { ... }, // the config object you hand over to the constructor + anotherTbInstance // any other object you want to put the tb instance in + ); + + */ + function tb() { + var that = this; + + // merge handlers from temp instance into target object + function mergeHandlers( pSourceTb , pTargetTb ){ + for ( var i in pSourceTb.handlers ) { + if ( !pTargetTb.handlers[i] ){ + pTargetTb.handlers[i] = []; + } + for ( var j = 0, l = pSourceTb.handlers[i].length; j < l; j++ ){ + pTargetTb.handlers[i].push( pSourceTb.handlers[i][j] ); // copy handler + } + } + } + + // instanciate tb instance OR return tb.Selector result set + if ( that instanceof tb ) { // called as constructor, create and return tb object instance + var args = Array.from(arguments), + isNamespace = typeof args[0] === 'string', + isRootedNamespace = isNamespace && args[0].substr(0,1) === "/", + fileName = isNamespace ? '/' + args[0].replace( /\./g, '/' ).replace( /^\//, '') + '.js' : '', + tbClass = isNamespace ? tb.namespace( args[0].replace( /^\//), '' ).get() : args[0], + tbInstance, + tempInstance; // empty tb object, used as handler store + + // namespace is a string and corresponding class doesnt exist in repo + // -> do requirement loading + // -> return temporary instance ( = instanceof Nop ) + if ( isNamespace && !tbClass ){ + tempInstance = new tb( Nop, args[1] || {}, args[2] || false ); // construct temp tb instance from empty constructor -> temp handler store + + tb.require( + fileName + ).then( + (function( args ){ + return function(){ + + var thisTb = new tb( + args[0], + args[1] || {}, + args[2] || false + ); + + if ( !!tempInstance ){ + + // copy properties from tempInstance, always shallow copy + for ( var i in tempInstance ) { + if ( + (['handlers', 'target']).indexOf(i) === -1 + && tempInstance.hasOwnProperty(i) + ){ + thisTb[i] = tempInstance[i]; + } + } + + mergeHandlers( tempInstance, thisTb ); + + } + + }; + })( args ) + ); + + return tempInstance; // return temp instance so handlers can be attached + } + + // it is a constructor call, like "new tb(...)" + if ( typeof tbClass === 'function' ){ + + // prepare + if ( !tbClass.__tb__ ){ + Object.setPrototypeOf( tbClass.prototype, tb.prototype ); + tbClass.__tb__ = 'V8'; + } + + // make a new instance of given constructor + tbInstance = new tbClass( args[1] || {}, args[2] ); // hidden parameter target + + // prepare .namespace property of tb object + if ( !tbInstance.namespace + && !( tbInstance instanceof Nop ) + ){ + tbInstance.namespace = typeof args[0] === 'string' + ? args[0] + : args[0].namespace || tb.getId(); // if nothing helps, a unique id + } + + // prepare .target property of tb object + tbInstance.target = tbInstance['target'] || args[2] || false; // preset + + // if target was not set in constructor, try third parameter + if ( !tbInstance.target ){ + + if ( !!args[2] ){ + + // get first element of an array-like selector return object + if ( !args[2]['nodeType'] + && !!args[2][0] + && !!args[2][0]['nodeType'] + ){ + args[2] = args[2][0]; // jshint ignore:line + } + + tbInstance.target = args[2]; + } + + } + + // if target is a DOM element + // - add class to DOM data + // - if not already there add namespace to target data-tb attribute + if ( !!tbInstance.target + && !!tbInstance.target['nodeType'] + && !( tbInstance instanceof Nop ) + ){ + + // put tb instance in dom node + tbInstance.target.tb = tbInstance.target['tb'] || {}; + tbInstance.target.tb[tbInstance.namespace] = tbInstance; + + // if element does not reside in the DOM add class + var dom = tb.dom( tbInstance.target ); + if ( tbInstance.target.nodeName !== 'head' + && dom.parents().toArray().indexOf( document.head ) === -1 + && !!tbInstance['namespace'] + && tbInstance.namespace.replace(/\./g, '-').toUpperCase() !== tbInstance.target.tagName + ){ + dom.addClass( tbInstance.namespace.replace( /\./g, '-').toLowerCase() ); + } + + // add namespace to DOM "data-tb" attribute + if ( !!tbInstance.target && !!tbInstance.target['nodeType'] ){ + var dataTb = tbInstance.target.getAttribute( 'data-tb' ); + if ( !!dataTb && !!dataTb.length && -1 === dataTb.split(' ').indexOf( tbInstance.namespace ) ){ + tbInstance.target.setAttribute( 'data-tb', dataTb + ' ' + tbInstance.namespace ); + } else { + tbInstance.target.setAttribute( 'data-tb', tbInstance.namespace ); + } + } + } + + // create handlers array if necessary + if ( !tbInstance.handlers ){ + tbInstance.handlers = []; + } else { + // if there are single named event handler functions, + // convert them to array of functions + for ( var i in tbInstance.handlers ) { + if ( typeof tbInstance.handlers[i] === 'function' ){ + tbInstance.handlers[i] = [ tbInstance.handlers[i] ]; + } else if ( !( tbInstance.handlers[i] instanceof Array ) ){ + delete tbInstance.handlers[i]; + } + } + } + + if ( !( tbInstance instanceof Nop ) ){ + + var parentReadyHandler = function(ev){ + tbInstance + .parent() + .trigger('ready'); + }; + + tbInstance.on( + 'ready', + parentReadyHandler, + true + ); + + var parent = !!tbInstance.parent()[0] ? tbInstance.parent()[0] : false, + childReady = function(ev){ + ev.stopImmediatePropagation(); + }; + + childReady.once = true; + + if ( parent ){ + if ( !parent.handlers ){ + parent.handlers = { ready: [] }; + } else if ( !parent.handlers.ready ){ + parent.handlers.ready = []; + } + parent.handlers.ready.unshift(childReady); + } + + tbInstance.trigger( 'init' ); + tbInstance.trigger( 'ready' ); + + } + + return tbInstance; + + } + + } else { // arguments[0] is string or regex, return selector result + + return new TbSelector( + !!arguments[0] ? arguments[0] : undefined, + !!arguments[1] ? arguments[1] : undefined + ); + + } + + } + + /** + - takes any number of objects as parameters + - merges content into the first parameter object + - always a deep copy + + @memberof tb + @static + @method tb.extend + + @param {object} pObj - object to extend + @param {...object} [pObj] any number of other objects to merge in + + @return {object} - extended object + + */ + tb.extend = function( pObj ){ // any number of arguments may be given + var cp; + + function walk(pKey) { + if ( cp.hasOwnProperty(pKey) && + cp[pKey] instanceof Object && + (cp[pKey]).constructor === Object + ){ // native Object + pObj[pKey] = tb.extend( pObj[pKey] instanceof Object ? pObj[pKey] : {}, cp[pKey] ); // deep copy + } else if ( cp.hasOwnProperty(pKey) && + cp[pKey] instanceof Object && + (cp[pKey]).constructor === Array + ){ // native Array + pObj[pKey] = Array.from(cp[pKey]); // flat copy + } else { // copy primitive or reference + pObj[pKey] = cp[pKey]; + } + } + + while ( arguments[1] ){ + cp = arguments[1]; + + Object + .keys(cp) + .forEach( + walk + ); + + [].splice.call( arguments, 1, 1 ); // remove object that is done + } + + return pObj; + }; + + /** + + - will replace all matching {namespace1.namespace2.etc} occurrences with values from pParse object + - if typeof pWhat is object or array, it will be done with all strings contained therein and the original pWhat returned + + @memberof tb + @static + @method tb.parse + + @param {(string|object|array)} pWhat string, object or array to parse recursively + @param {...object} pParse any number of hash objects containing replacement key/value pairs + + @return {(string|object|array)} pWhat parsed + + @example + + tb.parse( "{a} test test", { a: 'done' } ) + // "done test test" + + @example + + tb.parse( [ "{a} test test" ], { a: 'done' } ) + // ["done test test"] + + @example + + tb.parse( [ "{a} test test", "{b} test test" ], { a: 'done', b: 'processed' } ) + // ["done test test", "processed test test"] + + @example + + tb.parse( [ "{a} test test", "{b} test test", { g: "another {silly} test" } ], { a: 'done', b: 'processed', silly: 'not so silly' } ) + // ["done test test", "processed test test", Object { g="another not so silly test"}] + + @example + + tb.parse( { a: "{a} test test", b: "{b} test test", c: [ "another {silly} test" ] }, { a: 'done', b: 'processed', silly: 'not so silly' } ) + // Object { a="done test test", b="processed test test", c=[ "another not so silly test" ] } + + @example + + // multiple hash objects: + tb.parse( + "{a} {b}", + { a: 'done1' }, + { b: 'done2' } + ); + // "done1 done2" + + */ + tb.parse = function( pWhat, pParse ){ + var args = Array.prototype.slice.call(arguments); + + if (!args.length){ + console.error('no arguments give to parse'); + return; + } + + if (args.length === 1){ + return args[1]; + } else if (args.length > 2) { + while (args.length > 1){ + args[0] = tb.parse( args[0], args[1]); + args.splice(1, 1); + } + return args[0]; + } + + // implicit else: exactly 2 arguments + if ( typeof pWhat === 'string' ){ + var vars = pWhat.match( /\{[^\{\}]*\}/g ); + + if ( !!vars ) { + vars + .forEach( + function (pPropname) { + var propname = pPropname.substr(1, pPropname.length - 2), + value = tb.namespace( propname, pParse ).get(); + + if ( typeof value !== 'undefined' ){ + pWhat = pWhat.replace( pPropname, value ); + } + } + ); + } + } else if ( !!pWhat.constructor ){ + switch ( pWhat.constructor ){ + case Object: + Object + .keys( pWhat ) + .forEach( + function( pKey ){ + if ( pWhat.hasOwnProperty( pKey ) ){ + pWhat[ pKey ] = tb.parse( pWhat[ pKey ], pParse ); + } + } + ); + break; + case Array: + pWhat + .forEach( + function( pValue, pKey ){ + pWhat[ pKey ] = tb.parse( pWhat[ pKey ], pParse ); + } + ); + break; + } + } + + return pWhat; + }; + + /** + debounce function wrapper + + @memberof tb + @static + @method tb.debounce + + @param {function} pFunction - callback function to execute + @param {number} pMilliseconds - milliseconds to wait before callback is executed + + @example + // expect that to be this tb instance + // append a debounced handler to the 'myEvent' event + that.on( + 'myEvent', + tb.debounce( + function(){ + // that = tb instance + console.log('debounced "myEvent" handler inside', that); + }, + 500 // milliseconds + ) + ); + */ + tb.debounce = function( pFunction, pMilliseconds ){ + var timeout; + return function(){ + + var that = this, + args = arguments; + + clearTimeout( timeout ); + + timeout = setTimeout( + function(){ + pFunction.apply( that, args ); + }, + pMilliseconds + ); + }; + }; + + /** + store function + + @memberof tb + @static + @method tb.store + + @param {object} pObj - object to put the store in + @param {string} pName - property name of store + @param {string} pConfig - the initial set of properties in a hash object + + @return {object} - the store instance + + the returned store has one method, .observe( myCallbackFunction ) + + you can use this method to react on changes in the store + + CAVEAT: the store .observe is debounced to accomodate for bulk changes! + + @example + + // + // EXAMPLE 1: using late binding + // + + tb.store( + + that, // the instance + 'store', // the property name -> that.store + $( 'form', that.target ).values() // initial values + + ).bind( // assuming there are some {placeholder}s in that DOM node descendants attributes or text nodes + + that.target + + ); + + // any change in the store from now on will update the {placeholder}s + + // change complete store: + that.store = { + somePlaceHolder: 'someStringValue' + }; + + // or a property within the store: + that.store.somePlaceholder = 'someOtherStringValue'; + + + + + // + // EXAMPLE 2: using the observe function + // expect that to be a tbInstance containing a form + // + + + tb.store( + + that, // the instance + 'store', // the property name -> that.store + $( 'form', that.target ).values() // initial values + + ).observe( + + // 1 way data flow + function( pStoreValues ){ + + // do something with the store values + // e.g. update some part of the DOM + + console.log( Object.assign( {}, pStoreValues ) ); // convert to plain object + + // other than that you can extract properties like so: + + var a = pStoreValues.myProperty; + + } + + ); + + // update the store whenever the form values change + // 2 way data binding + + $( 'form', that.target ) + on( + 'change select', + function(ev){ + tb.extend( + that.store, + $( 'form', that.target ).values() + ); + ev.stopPropagation(); + } + ); + + */ + tb.store = (function(){ + + function Store( pConfig ){ + + var that = this, + observable = Symbol('observable'), + onChange = Symbol('onChange'), + config = pConfig || {}; + + // make anonymous property + that[observable] = tb.observable(false); + + // must be debounced for looped property changes like + // ... tb.extend( store, $('form').values() ); + that[onChange] = tb.debounce( + function(){ + that[observable]( tb.extend( {}, that ) ); + }, + 0 + ); + + tb.extend( that, config ); + + } + + // these are prototypal methods, since the prototype is a Proxy instance + Store.methods = { + + observe: function( pCallback, pOnce ){ + + var that = this; + + that[Object.getOwnPropertySymbols(that)[0]].observe( pCallback, pOnce ); + + }, + + bind: function( pDomNode ){ + var that = this; + + function walk( pDomNode ){ + + if ( !!pDomNode['nodeType'] && pDomNode.nodeType === 3 ){ // text node + var placeholders = pDomNode.nodeValue.match( /\{[^\{\}]*\}/g ); + + if (!!placeholders){ + + var f=(function( pTemplate ){ + return function( pValues ){ + var t, + changed = false; + placeholders.forEach(function(pKey){ + if ( f.values[pKey] !== pValues[pKey] ){ + f.values[pKey] = pValues[pKey]; + changed = true; + } + }); + if (changed){ // only reflow if changed + t = pTemplate; + pDomNode.nodeValue = tb.parse( + t, + f.values + ); + } + }; + })( pDomNode.nodeValue ); + + f.values = {}; + placeholders = Array.from( placeholders ).map((pKey) => pKey.substr(1,pKey.length-2)); + placeholders.forEach(function(pKey){ + f.values[pKey] = ""; + }); + + that[Object.getOwnPropertySymbols(that)[0]].observe(f); + + } + } + + if ( !!pDomNode['nodeType'] && pDomNode.nodeType === 1 ){ // HTML element + + Array.from( pDomNode.attributes ) + .forEach( + function( pAttributeNode ){ + + var placeholders = pAttributeNode.value.match( /\{[^\{\}]*\}/g ); + + if (!!placeholders){ + + var f=(function( pTemplate ){ + return function( pValues ){ + var t, + changed = false; + placeholders.forEach(function(pKey){ + if ( f.values[pKey] !== pValues[pKey] ){ + f.values[pKey] = pValues[pKey]; + changed = true; + } + }); + if (changed){ // only reflow if changed + t = pTemplate; + tb.dom(pDomNode).attr( + pAttributeNode.nodeName, + tb.parse( + t, + f.values + ) + ); + } + }; + })( pAttributeNode.value ); + + f.values = {}; + placeholders = Array.from( placeholders ).map((pKey) => pKey.substr(1,pKey.length-2)); + placeholders.forEach(function(pKey){ + f.values[pKey] = ""; + }); + + that[Object.getOwnPropertySymbols(that)[0]].observe(f); + + } + } + ); + + Array.from( pDomNode.childNodes ) + .forEach(function( pChildNode ){ + walk( pChildNode ); + }); + + that[Object.getOwnPropertySymbols(that)[0]].notify(); + + } + } + + walk( pDomNode ); + + } + + }; + + // prototype is a proxy + Store.prototype = new Proxy( + Store.methods, + { + + get: function(pObj, pProp, pReceiver) { + + if (Store.methods[pProp]){ + return Store.methods[pProp]; + } + + if ( pProp in pReceiver === false && pProp in pObj === false ){ + + var value = new tb.Store(); // internal value + + Object.defineProperty( + pReceiver, + pProp, + { + enumerable: true, + get: function(){ + return value; + }, + set: function( pValue ){ + if ( !!pValue + && typeof pValue === 'object' + && !!pValue.constructor + && pValue.constructor === Object + ){ + if ( value instanceof Store ){ + for ( var key in value ){ + delete value[ key ]; + } + tb.extend( value, pValue ); + } else { + value = new Store( pValue ); + } + } else { + value = pValue; + } + + setTimeout(function(){ + if(!!Object.getOwnPropertySymbols(pReceiver)[1]){ + pReceiver[Object.getOwnPropertySymbols(pReceiver)[1]](); // onChange debounced function + } + }, 0); + + return value; + } + } + ); + + } + + return pReceiver[pProp]; + }, + + set: function(pObj, pProp, pValue, pReceiver){ + + var ret, + args = Array.from(arguments); + + if ( typeof pValue === 'object' + && pValue.constructor === Object + && pValue.constructor.prototype === Object.prototype + ){ + + if ( pReceiver[pProp] instanceof Store ){ + for ( var key in pReceiver[pProp] ){ + delete pReceiver[pProp][ key ]; + } + tb.extend( Store, pValue ); + } else { + args[0] = pReceiver; + args[2] = new Store( pValue ); + } + + } + + setTimeout(function(){ + if(!!Object.getOwnPropertySymbols(pReceiver)[1]){ + pReceiver[Object.getOwnPropertySymbols(pReceiver)[1]](); // onChange debounced function + } + }, 0); + + ret = Reflect.set(...args); + + return ret; + } + + } + ); + + tb.Store = Store; + + function makeStore( pObj, pName, pConfig ){ + + var value = new Store( pConfig ); + + // insert store into target object + Object.defineProperty( + pObj, + pName, + { + enumerable: true, + writeable: true, + get: function(){ + return value; + }, + set: function( pValue ){ + for ( var key in value ){ + delete value[ key ]; + } + tb.extend( value, pValue ); + return value; + } + } + ); + + return pObj[pName]; + } + + makeStore.Store = Store; + + return makeStore; + + })(); + + /** + tb.observable()) function + - creates a function to set/get the inner value + - initializes the inner value with the parameter given + - returns this function + + @memberof tb + @static + @method tb.observable + @chainable + + @param {*} [pStartValue] initial content of observable + + @return {function} - observableFunction + + @example + + // observable data IS NOT an object + var o = tb.observable( 0 ); // numeric + + o.observe( + function( pValue ){ // callback will be triggered when observable value changes + console.log( pValue ); + }, + true // true indicates callback will be called only once + ); + + o( 5 ); // change observable value + + @example + + // observable data IS an object + var o = tb.observable( { a: 5 } ); // object + + o.observe( + function( pValue ){ // callback will be triggered when observable value changes + console.log( pValue ); + }, + false // false or no parameter indicates callback will always be called + // when the data changes, true will trigger it only once + ); + + // get data: + o( 'a' ); // => 5 + o(); // => { a: 5 } + + // each of these will trigger the callback since the data changed + // also they return the observable itself for chaining purposes, NOT THE VALUE + o( 'a', 6 ); // => { a: 6 } + o( { c: 42 } ); // => { c: 42 } + o( 'b', { c: 42 } ); // => { a: 6, b: { c: 42 } } + + + */ + tb.observable = function( pStartValue ){ + + var observedValue = pStartValue, + enableNotify = true; + + // make observable function to return in the end + var observableFunction = function( p1, p2 ){ + + function notify(){ + if ( !enableNotify ) { + return; + } + observableFunction.lastChanged = (new Date()).getTime(); // needed for tb.idle() + return observableFunction.notify(); + } + + if ( typeof p1 !== 'undefined' ){ + if( observedValue.constructor === Object ) { + if ( typeof p1 === 'string' ) { + if (typeof p2 !== 'undefined') { + // value has changed, p1 must be key or namespace ( key1.key2 etc ) for object property + if ( p1.indexOf('.') > -1 ){ // its a namespace + tb.namespace( p1, observedValue ).set( p2 ); + } else { // it is a simple property + observedValue[p1] = p2; + } + notify(); + } else { // it is a getter + return tb.namespace( p1, observedValue ).get(); + } + } else if ( typeof p1 === 'object' && typeof p2 === 'undefined' ){ + observedValue = p1; + notify(); + } else { + console.warn('tb.observable() set value: parameter 1 should be a string or object if observed data is an object!'); + } + } else { + if ( typeof p1 !== 'undefined' ){ + // value has changed + observedValue = p1; + notify(); + } else { // it is a getter + return observedValue; + } + } + } else { + return observedValue; + } + + // it was a setter functionality, so return the observable itself for chaining + // getters return the value directly (see above) + return observableFunction; + }; + + observableFunction.lastChanged = (new Date()).getTime(); // needed for tb.idle() + + // list of all callbacks to trigger on observedValue change + observableFunction.notifiers = []; + + // function used to execute all callbacks + observableFunction.notify = function(){ + + // execute all callbacks + observableFunction.notifiers.forEach( + function( func, key ){ + if ( typeof func === 'function' ){ + func( observedValue ); + if ( func.once ){ + observableFunction.notifiers.splice(key,1); + } + } else { + observableFunction.notifiers.splice(key,1); + } + } + ); + + return observableFunction; // chaining + }; + + // enable/disable notifications + observableFunction.enableNotify = function( pEnableNotify ){ + enableNotify = pEnableNotify === false ? false : true; + + return observableFunction; // chaining + }; + + // function used to add a callbacks + observableFunction.observe = function( pFunction, pOnce ){ + + if ( typeof pFunction === 'function' ){ + pFunction.once = pOnce || false; + observableFunction.notifiers.push( pFunction ); + } + + return observableFunction; // chaining + }; + + return observableFunction; + }; + + internaltb = tb; + + tb.Selector = TbSelector; // make official, e.g. for events + + /** + walk all pSelector tb objects, call pMethodName on them + return a UNIQUE TbSelector result set containing all single results + + @function walkSelector + @private + + @param {object} pSelectorObject - instanceOf TbSelector + @param {string} pMethodName - name of method to call + @param {*} [pArguments] - arguments + + @return {object} instance of TbSelector + */ + function walkSelector( pSelectorObject, pMethodName, pArguments ){ + var that = this, + instances = Array.from( pSelectorObject ), + args = Array.from( pArguments ), + ret = tb(); // empty tb selector object + + //console.log('pSelectorObject', pSelectorObject); + if ( pSelectorObject instanceof TbSelector ) { + //console.log('-> Array', Array.from(pSelectorObject) ); + instances + .forEach( function walkSelectorEach( pInstance ) { + var result = pInstance[pMethodName]( ...args ); + if ( result instanceof TbSelector ) { + Array + .from(result) + .forEach(function(pResultInstance){ + if ( [].indexOf.call( ret, pResultInstance ) === -1 ){ + [].push.call( ret, pResultInstance ); + } + }); + } + }); + + } + //console.log('<- result', Array.from(ret) ); + return ret; + } + + function _mapArrayMethod( pMethodName ){ + var method = [][pMethodName]; + + if ( -1 < ([ 'pop', 'push', 'unshift', 'shift', 'splice' ]).indexOf( pMethodName ) ){ // self-muting methods + return function(){ + var that = this, + ret = method.apply( that, arguments ); + + return !!ret ? ( ret instanceof Array ? tb( ret ) : ret ) : that; + }; + } else { + return function(){ + var that = this, + ret = method.apply( that.toArray(), arguments ); + + if ( ret instanceof Array ){ + return that.flush().add( ret ); + } + + return ret; + }; + } + + } + + tb.methods = (function(){ + // private static + + return { + // public methods and properties + + /** + @method trigger + @chainable + + @param {string} pEvent - name of event OR tb.Event instance (in this case the only parameter) + @param [pEventData] - event data, usally an object + @param {string} [pBubble=l] - bubbling indicator : 'l' = local, 'u' = up, 'd' = down - or any combination + + @return {object} - tb.Selector instance or tB instance - for chaining + + trigger method + + triggers an asynchronous twoBirds event, optionally with data and bubble indicator + + */ + trigger: function( pEvent, pEventData, pBubble ){ + var that = this, + tbEvent; + + if( tb.stop() ){ // @todo rethink this + return; + } + + // construct event if necessary + tbEvent = pEvent instanceof tb.Event ? pEvent : new tb.Event( pEvent, pEventData, pBubble ); + + // if event __stopped__ , handling is cancelled + if ( tbEvent.__stopped__ || tbEvent.__immediateStopped__ ) { + return that; + } + + // execute local handlers + if ( that instanceof TbSelector && !!that['length'] ) { + + [].forEach.call( + that, + function( tbInstance ){ + if ( !!tbInstance + && tbInstance instanceof tb + && !tbEvent.__immediateStopped__ + ){ + tbInstance.trigger( tbEvent ); + } + } + ); + + } else if ( that instanceof tb ) { // it must be a native tb object + + if ( that instanceof Nop + && tbEvent.name !== 'init' + ){ + // its an object that was not loaded yet + that.one( + 'init', + function lazyHandler(){ + var that = this; + + that.trigger( tbEvent ); + } + ); + return that; + } + + // local handlers + if ( that instanceof tb + && !!that.handlers + && !!that.handlers[tbEvent.name] + && tbEvent.bubble.indexOf( 'l' ) > -1 + ){ + + that.handlers[tbEvent.name] = that.handlers[tbEvent.name] + .reduce(function( pHandlers, pHandler ){ + if ( tbEvent.bubble.indexOf('l') > -1 + && !!pHandler + ){ + try{ + if (!tbEvent.__immediateStopped__){ + pHandler.apply(that, [tbEvent]); + } else { + pHandlers.push( pHandler ); + } + } catch (e){ + console.error(e); + } + + if ( !pHandler.once && !tbEvent.__immediateStopped__ ) { + pHandlers.push( pHandler ); + } } + return pHandlers; + }, []); + + if (!that.handlers[tbEvent.name].length){ + delete that.handlers[tbEvent.name]; + } + } + + // if event __stopped__ , handling is cancelled + if ( !!tbEvent.__stopped__ ) { + return that; + } + + setTimeout( + function(){ + + // bubble up + if ( tbEvent.bubble.indexOf('u') > -1 ){ + that + .parent() + .trigger( + new tb.Event( + tbEvent.name, + tbEvent.data, + 'lu' + )); + } + + // bubble down + if ( tbEvent.bubble.indexOf('d') > -1 ){ + [].forEach.call( + that.children(), + function( tbObject ){ + tbObject.trigger( + new tb.Event( + tbEvent.name, + tbEvent.data, + 'ld' + ) + ); + } + ); + } + + }, + 0 + ); + + } + + return that; + + }, + + /** + @method on + @chainable + + @param {string} pEventName - name of the handler function + @param {function} pHandler - the function to be added to the handler array + @param {boolean} [pOnce=false] - true = remove handler after first call, false = keep handler + + @return {object} - tb.Selector instance or tB instance - for chaining + + .on() method + + adds a handler to a twoBirds instance or a tb.Selector result set + */ + on: function( pEventName, pHandler, pOnce ){ + + var that = this, + eventNames; + + //console.log( 'on', pEventName, pHandler, pOnce ); + + if ( that instanceof TbSelector ) { + + walkSelector( that, 'on', Array.from(arguments) ); + + } else if ( that instanceof tb ) { // either a toplevel or an internal tb object + + if ( -1 < pEventName.indexOf(' ') ){ + eventNames = pEventName.split(' '); + } else { + eventNames = [ pEventName ]; + } + pHandler.once = !!pHandler.once || !!pOnce; + + eventNames.forEach( + function(pThisEventName){ + + if ( !Reflect.get( that, 'handlers' ) ){ + that.handlers = {}; + } + + if ( !Reflect.get( that.handlers, pThisEventName ) ){ + that.handlers[ pThisEventName ] = [ pHandler ]; + } else { + that.handlers[ pThisEventName ].push( pHandler ); + } + + } + ); + + } + + return that; + + }, + + /** + @method one + @chainable + + @param {string} pEventName - name of the handler function + @param {function} pHandler - the function to be added to the handler array + + @return {object} - tb.Selector instance or tB instance - for chaining + + .one() method + + adds a handler to a twoBirds instance or a tb.Selector result set, + to be called only once when the event fires + afterwards the handler is deleted from the event handler list + */ + one: function( pEventName, pHandler ){ + + var that = this; + + that.on( pEventName, pHandler, true ); // add event handler that will be deleted after first execution + + return that; + + }, + + /** + @method off + @chainable + + @param {string} pEventName - name of the handler function + @param {function} pHandler - the function to be added to the handler array + + @return {object} - tb.Selector instance or tB instance - for chaining + + .off() method + + removes a handler from a twoBirds instance or a tb.Selector result set + afterwards the handler is deleted from the event handler list + */ + off: function( pEventName, pHandler ){ + + var that = this, + index, + eventNames; + + if ( typeof pEventName === 'undefined' ){ + return that; + } + + if ( that instanceof TbSelector ) { + + walkSelector( that, 'off', arguments ); + + } else if ( that instanceof tb ) { // either a toplevel or an internal tb object + + if ( -1 < pEventName.indexOf(' ') ){ + eventNames = pEventName.split(' '); + } else { + eventNames = [ pEventName ]; + } + + //console.log( 'off', that instanceof tb, that, eventNames, pHandler ); + + eventNames + .forEach( + + function(pThisEventName){ + + if ( !!that.handlers[ pThisEventName ] ){ + if ( typeof pHandler !== 'undefined' ){ + index = that.handlers[ pThisEventName ].indexOf( pHandler ); + + while ( index > -1 ){ + that.handlers[ pThisEventName ].splice( index, 1 ); + + index = that.handlers[ pThisEventName ].indexOf( pHandler ); + + if ( that.handlers[ pThisEventName ].length === 0 ){ // remove array if empty + that.handlers[ pThisEventName ] = null; + delete that.handlers[ pThisEventName ]; + } + + } + } else { // remove all handlers + that.handlers[ pThisEventName ] = null; + delete that.handlers[ pThisEventName ]; + } + } + } + ); + + } + + return that; + + }, + + /** + @method parents + @chainable + + @param [pSelector] - any type of tb.Selector parameter + + @return {object} - tb.Selector instance - for chaining + + .parents() method + + for each this[0...n] or this as tb() instance, + - get all parent tb objects + - check them against the filter param pSelector + - return them as a TbSelector result set (unique) + */ + parents: function( pSelector ){ + var that = this, + ret = tb(); + + if ( that instanceof TbSelector ) { + + ret = walkSelector( that, 'parents', arguments ); + + } else if ( that instanceof tb + && !!that.target + ){ // it is a tb object + + if ( !!that.target['nodeType'] ){ + // it must be a native toplevel tb object residing in the DOM + tb.dom( that.target ) + .parents( '[data-tb]' ) + .not( 'html' ) + .forEach( + function( pElement ){ + if ( !!pElement && !!pElement['tb'] ){ + Object + .keys( pElement.tb ) + .forEach( + function( pKey ){ + // push dom object to tb selector content + [].push.call( ret, pElement.tb[pKey] ); + } + ); + } + } + ); + + } else if ( that.target instanceof tb ){ + // it a tb object embedded in another tb object + + [].push.call( ret, that.target ); // push parent object to tb selector content + + if ( !!that.target.parent()['0'] ){ + [].push.call( ret, that.target.parent()['0'] ); + } + + } + + + } + + return pSelector ? ret.filter( pSelector ) : ret; + + }, + + /** + @method parent + @chainable + + @param [pSelector] - any type of tb.Selector parameter + + @return {object} - tb.Selector instance - for chaining + + .parent() method + + for each this[0...n] or this as tb() instance, + - get closest parent tb object + - check all of them against the filter param pSelector + - return TbSelector result set (unique) + */ + parent: function( pSelector ){ + + var that = this, + ret = tb(); + + if ( that instanceof TbSelector ) { + + ret = walkSelector( that, 'parent', arguments ); + + } else if ( that instanceof tb + && !!that.target + ){ + + if ( !!that.target['nodeType'] ) { // tb object resides in DOM + + var tbParents = that.parents().toArray(), + tbParent = !!tbParents['0'] ? tbParents[0] : false; + + if ( !tbParent ) { + return ret; + } // no parent -> empty result set + + Object + .keys(tbParent.target.tb || {}) + .forEach(function( pKey ){ + [].push.call( ret, tbParent.target.tb[pKey] ); // push dom object to tb selector content + }); + + } else if ( that.target instanceof tb ){ // it is an embedded object, local target is another (parent) tb object + + [].push.call( ret, that.target ); // push parent object to tb selector content + + } + + } + + return !!pSelector ? ret.filter( pSelector ) : ret; + }, + + /** + @method descendants + @chainable + + @param [pSelector] - any type of tb.Selector parameter + + @return {object} - tb.Selector instance - for chaining + + .descendants() method + + for each this[0...n] or this as tb() instance, + - get all descendants of tb object + - check them against the filter param pSelector + - return TbSelector result set (unique) + */ + descendants: function( pSelector, pLocalOnly ){ + + var that = this, + ret = tb(); + + if ( that instanceof TbSelector ) { + + ret = walkSelector( this, 'descendants', arguments ); + + } else if ( that instanceof tb && !!that.target['nodeType'] && !pLocalOnly ) { // it must be a native tb object + + tb.dom( '[data-tb]', that.target ) + .forEach( + function( pDomNode ) { + Object + .keys( pDomNode.tb ) + .forEach(function( pKey ){ + [].push.call( ret, pDomNode.tb[ pKey ] ); // push dom object to tb selector content + }); + } + ); + + } else if ( that instanceof tb && !!pLocalOnly ){ // walk descendants + // HINT: if tbInstances are stacked inside each other, only props in "this" will be copied + // ...not those defined in the constructor.prototype ( like 'tb.Require' ) + Object + .keys( that ) + .forEach(function( pKey ){ + if ( pKey !== 'target' && that[pKey] instanceof tb ) { + [].push.call( ret, that[pKey]); // push tb object to tb selector content + + var desc = tb.dom().toArray.call( that[pKey].descendants( '', true ) ); + + for ( var j=0, l=desc.length; j index + 1 ) { + [].push.call( ret, result[ index + 1 ] ); // push dom object to tb selector content + } + + } + return !!pSelector ? ret.filter( pSelector ) : ret; + + }, + + /** + @method prev + @chainable + + @return {object} - tb.Selector instance (maybe empty) - for chaining + + prev() method + + for each this[0...n] or this as tb() instance, + - get the direct previous sibling of tb instance + - check it against the filter param pSelector + - return TbSelector result set (unique) + */ + prev: function( pSelector ){ + + var that = this, + ret = tb(), // empty tb selector object + result, + index; + + if ( that instanceof TbSelector ) { + + ret = walkSelector( this, 'prev', arguments ); + + } else { // it must be a native tb object + + result = this.parent().children(); + index = [].indexOf.call( result, this ); + + if ( index ) { + [].push.call( ret, result[ index - 1 ] ); // push dom object to tb selector content + } + + } + + return !!pSelector ? ret.filter( pSelector ) : ret; + }, + + /** + @method first + @chainable + + @return {object} - tb.Selector instance (maybe empty) - for chaining + + first() method + + for each this[0...n] or this as tb() instance, + - get the first child of the tb object parent + - check it against the filter param pSelector + - return TbSelector result set (unique) + */ + first: function( pSelector ){ + + var that = this, + ret = tb(), + result; + + if ( that instanceof TbSelector ) { + + ret = walkSelector( this, 'first', arguments ); + + } else { // it must be a native tb object + + result = this.parent().children(); + [].push.call( ret, result[ 0 ] ); // push dom object to tb selector content + + } + + return !!pSelector ? ret.filter( pSelector ) : ret; + + }, + + /** + @method last + @chainable + + @return {object} - tb.Selector instance (maybe empty) - for chaining + + last() method + + for each this[0...n] or this as tb() instance, + - get the last child of the tb object parent + - check it against the filter param pSelector + - return TbSelector result set (unique) + */ + last: function( pSelector ){ + var that = this, + ret = tb(), + result; + + if ( that instanceof TbSelector ) { + ret = walkSelector( this, 'last', arguments ); + } else { + result = this.parent().children(); + [].push.call( ret, result[ result.length - 1 ] ); // push dom object to tb selector content + } + return !!pSelector ? ret.filter( pSelector ) : ret; + }, + + /** + @method toArray + + @return {array} - TbSelector elements in a plain array + + toArray() method + */ + toArray: function(){ + var that = this; + + return Array.from( that ); + }, + + /** + @method filter + @chainable + + @param [pParam] - any kind of TbSelector parameter + + @return {object} - tb.Selector instance (maybe empty) - for chaining + + filter() method + + for each this[0...n] or this as tb() instance, + - check them against the filter param pParam + - return TbSelector result set (unique) + */ + filter: function( pSelector ){ + + var that = this, + compare = tb( pSelector ), // object array to check against + ret = tb(); + + if ( !pSelector ) { + return that; + } + + if ( that instanceof TbSelector ) { + [].forEach.call( + that, + function( tbObject ) { + if ( -1 < [].indexOf.call( compare, tbObject ) ){ + [].push.call( ret, tbObject ); + } + } + ); + } else if ( that instanceof tb ){ + if ( -1 < [].indexOf.call( compare, that ) ){ + [].push.call( ret, that ); + } + } + + return ret; + }, + + /** + @method not + @chainable + + @param [pParam] - any kind of TbSelector parameter + + @return {object} - tb.Selector instance (maybe empty) - for chaining + + not() method + + for each this[0...n] or this as tb() instance, + - check them against pSelector and remove all that match + - return TbSelector result set (unique) + */ + 'not': function( pSelector ){ + + var that = this, + compare = Array.from( tb( pSelector ) ), // object array to check against + ret = tb(); + + [].forEach.call( + that, + function( pTbInstance ) { + if ( compare.indexOf( pTbInstance ) === -1 ){ + [].push.call( ret, pTbInstance ); + } + + } + ); + + return ret; + }, + + /** + @method add + @chainable + + @param [pParam] - any kind of TbSelector parameter + + @return {object} - tb.Selector instance (maybe empty) - for chaining + + add() method + + add elements to current result set + - return TbSelector result set (unique) + */ + add: function( pSelector ){ + + var that = this, + add = tb( pSelector ).toArray(), // object array to check against + ret = that.toArray(); + + return tb( ret.concat( add ) ); + }, + + /** + @method flush + @chainable + + @return {object} - mpty tb.Selector instance - for chaining + + flush() method + + empty current result set + - return empty TbSelector result set + */ + flush: function(){ + + var that = this; + + if ( that instanceof TbSelector ){ + while ( that.length ){ + that.pop(); + } + } + return that; + } + + }; + + })(); + + var proxy = new Proxy( + tb.Store.methods, + { + + get: function(pObj, pProp, pReceiver) { + + var args = Array.from(arguments); + + //console.log( 'tb.get', ...args ); + + if ( !Reflect.get( ...args ) ){ + + var value = new tb.Store(); // internal value + + Object.defineProperty( + pReceiver, + pProp, + { + enumerable: true, + get: function(){ + return value; + }, + set: function( pValue ){ + if ( typeof pValue === 'object' && pValue.__proto__ === Object.prototype ){ // jshint ignore:line + if ( value instanceof tb.Store ){ + for ( var key in value ){ + delete value[ key ]; + } + tb.extend( value, pValue ); + } else { + value = new tb.Store( pValue ); + } + } else { + value = pValue; + } + + setTimeout(function(){ + if(!!Object.getOwnPropertySymbols(pReceiver)[1]){ + pReceiver[Object.getOwnPropertySymbols(pReceiver)[1]](); // onChange debounced function + } + }, 0); + + return value; + } + } + ); + + } + + return Reflect.get( ...args ); + }, + + set: function(pObj, pProp, pValue, pReceiver){ + + var ret, + args = Array.from(arguments); + + //console.log( 'tb.set', ...args ); + + if ( pProp !== 'handlers' && typeof pValue === 'object' ){ + + if ( pReceiver[pProp] instanceof tb.Store && pValue.__proto__ === Object.prototype ){ // jshint ignore:line + for ( var key in pReceiver[pProp] ){ + delete pReceiver[pProp][ key ]; + } + tb.extend( pReceiver[pProp], pValue ); + } else { + args[0] = pReceiver; + //args[2] = new tb.Store( pValue ); + } + + } + + ret = Reflect.set(...args); + + setTimeout(function(){ + if(!!Object.getOwnPropertySymbols(pReceiver)[1]){ + pReceiver[Object.getOwnPropertySymbols(pReceiver)[1]](); // onChange debounced function + } + },0); + + return ret; + } + + } + ); + + Object.setPrototypeOf( tb.methods, proxy ); + + //console.log('methods', methods); + //console.log('proxy', proxy); + tb.prototype = tb.methods; + //console.log('tb.prototype', tb.prototype); + + /** + @memberof tb + @static + @property tb.status + @type Object + + container for twoBirds status observables + */ + tb.status = { + /** + @property tb.status.loadCount + @type Function + + observable containing the number of ( script load operations + xHr requests ) currently pending + */ + loadCount: tb.observable(0) // contains the number of ( file loads + xHr requests ) pending + }; + + /** + @memberof tb + @static + @method tb.idle + + @param {function} pCallback function to execute when all loading is finished + + @example + + // in code... + tb.idle( + function(){ + // do whatever you like + } + ); + */ + tb.idle = function( pCallback ){ + + var f = function(){ + + if ( tb.status.loadCount() === 0 ){ + + var tf = function(){ + + if ( tb.status.loadCount() === 0 ){ // loadCount is (still) 0 + if ( + tb.status.loadCount.lastChanged === tf.lastChanged // it is still the previous '0' loadcount + ){ + // system is still idle + if ( typeof pCallback === 'function'){ + pCallback(); + } + } else { + // probably not idle -> retry in 50 ms + tf.lastChanged = tb.status.loadCount.lastChanged; + setTimeout( + tf, + 100 + ); + } + } else { // loadCount is not 0 -> reattach function + tb.status.loadCount.observe( f, true ); + } + }; + + tf.lastChanged = 0; + + setTimeout( + tf, + 100 + ); + } else { + // if idle not yet reached, re-attach function for ONE execution + tb.status.loadCount.observe( f, true ); + } + + }; + + // attach function for ONE execution + tb.status.loadCount.observe( f, true ); + + }; + + TbSelector.prototype = { + /** + @method concat + @chainable + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see concat + */ + concat: _mapArrayMethod( 'concat' ), + + /** + @method every + @chainable + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see every + */ + every: _mapArrayMethod( 'every' ), + + /** + @method forEach + @chainable + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see forEach + */ + forEach: _mapArrayMethod( 'forEach' ), + + /** + @method indexOf + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see indexOf + */ + indexOf: _mapArrayMethod( 'indexOf' ), + + /** + @method map + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see map + */ + map: _mapArrayMethod( 'map' ), + + /** + @method pop + + @return {object} - tb instance + + inherited from Array, see pop + */ + pop: _mapArrayMethod( 'pop' ), + + /** + @method push + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see push + */ + push: _mapArrayMethod( 'push' ), + + /** + @method reduce + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see reduce + */ + reduce: _mapArrayMethod( 'reduce' ), + + /** + @method reduceRight + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see reduceRight + */ + reduceRight: _mapArrayMethod( 'reduceRight' ), + + /** + @method reverse + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see reverse + */ + reverse: _mapArrayMethod( 'reverse' ), + + /** + @method shift + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see shift + */ + shift: _mapArrayMethod( 'shift' ), + + /** + @method slice + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see slice + */ + slice: _mapArrayMethod( 'slice' ), + + /** + @method some + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see some + */ + some: _mapArrayMethod( 'some' ), + + /** + @method splice + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see splice + */ + splice: _mapArrayMethod( 'splice' ), + + /** + @method unshift + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see unshift + */ + unshift: _mapArrayMethod( 'unshift' ), + + }; + + //console.log( 'methods', Object.keys(methods), methods ); + tb.extend( TbSelector.prototype, tb.methods ); + //console.log( 'TbSelector.prototype', Object.keys(TbSelector.prototype), TbSelector.prototype ); + + /** + @method unique + @chainable + + @return {object} - tb.dom() result set, may be empty + + force this tb() result set to be unique + + ( being called after using methods inherited from array, force uniqueness ) + */ + TbSelector.prototype.unique = function() { + var that = this, + result = []; + + [].forEach.call( + that, + function ( pElement ) { + if ( result.indexOf( pElement ) === -1 ){ + result.push( pElement ); + } + } + ); + + return tb.dom( result ); + }; + + tb.plugin = (function( internalProto ) { + return function (pMethodName, pFunction) { + var p = internalProto; + + if (!p[pMethodName]) { + p[pMethodName] = pFunction; + } else { + console.warn('tb.plugin(): Cannot overload existing tb method (', pMethodName, ')'); + } + + }; + })( internaltb.prototype ); + + return tb; + +})(); + +// make it a node module +if (typeof module !== 'undefined') { + module.exports = tb; +} else { + /** + * document.ready bootstrap + */ + (function(){ + + function domReady () { + // find all tb head & DOM nodes and add tb objects if not yet done + tb.attach( document.head ); + tb.attach( document.body ); + } + + // Mozilla, Opera, Webkit + if ( document.addEventListener ) { + document.addEventListener( "DOMContentLoaded", function(){ + document.removeEventListener( "DOMContentLoaded", arguments.callee, false); + domReady(); + }, false ); + + // If IE event model is used + } else if ( document.attachEvent ) { + // ensure firing before onload + document.attachEvent("onreadystatechange", function(){ + if ( document.readyState === "complete" ) { + document.detachEvent( "onreadystatechange", arguments.callee ); + domReady(); + } + }); + } + + })(); +} + +/** + @class tb.Event + @constructor + + @param {string} pEventName - name of event + @param [pEventData] - data to be appended to this event + @param {string} [pBubble=l] - bubbling indicator, 'l' = local, 'u' = up, 'd' = down or any combination + + @return {object} tb.Event instance + */ +tb.Event = function( pEventName, pEventData, pBubble ){ + var that = this; + that.bubble = pBubble || 'l'; + that.data = pEventData || {}; + that.name = pEventName || ''; + that.__stopped__ = that.__immediateStopped__ = false; +}; + +tb.Event.prototype = { + + /** + @method stopPropagation + + @return {object} tb.Event object + + stop propagation after all handlers on this object have run + */ + stopPropagation: function(){ + this.__stopped__ = true; + return this; + }, + + /** + @method stopImmediatePropagation + + @return {object} tb.Event object + + stop propagation immediately after this handler has run + */ + stopImmediatePropagation: function(){ + this.__stopped__ = true; // also stop normal propagation + this.__immediateStopped__ = true; + return this; + } + +}; + +tb.debug = false; + + +if (typeof module === 'undefined' ){ + tb.dom = (function () { + + // Variables + var regExReturn = /\r/g, + regExSpaces = /[\x20\t\r\n\f]+/g, + regExWord = /\S+/g, + regExHtml = /^<>$/g, + TbSelector = tb.Selector, + dom, + f; + + // INTERNAL ONLY Private Functions + function _addEvent( pDomNode, pEventName, pHandler, pCapture ) { + if (pDomNode.attachEvent) { + pDomNode.attachEvent('on' + pEventName, pHandler, pCapture ); + } else { + pDomNode.addEventListener(pEventName, pHandler, pCapture ); + } + } + + function _removeEvent( pDomNode, pEventName, pHandler, pCapture ) { + if (pDomNode.detachEvent){ + pDomNode.detachEvent('on'+pEventName, pHandler, pCapture ); + } else { + pDomNode.removeEventListener(pEventName, pHandler, pCapture ); + } + } + + function _htmlToElements(html) { + var template = document.createElement('template'); + template.innerHTML = html; + return !template['content']['childNodes'] ? template.childNodes : template.content.childNodes; + } + + function _mapArrayMethod( pMethodName ){ + var method = [][pMethodName]; + + if ( -1 < ([ 'push', 'unshift' ]).indexOf( pMethodName ) ){ // make these array methods chainable + return function(){ + method.apply( this, arguments ); + + return this.unique(); + }; + } else { + return function(){ + var ret = method.apply( this, arguments ); + + return ret instanceof Array && !!ret['0'] && !!ret['0']['nodeType'] ? tb.dom( ret ).unique() : ret; + }; + } + } + + /** + @class tb.dom + @constructor + + @param [pSelector] a .querySelectorAll() selector string, a dom node or an array of dom nodes + @param [pDomNode] - DOM node to start search in + + @return {object} - tb.dom() result set, may be empty + + tb.dom() function + + jquery like selector engine + + */ + + dom = function tbDom(pSelector, pDomNode) { + + var that = this, + domNode, + nodeList; + + if (!pSelector) { // no selector given, or a falsy value + return that; + } + + // ... implicit else do: + if (!!pSelector['nodeType'] ) { // selector is a dom node + if ( [].indexOf.call( that, pSelector ) === -1 ){ + [].push.call(that, pSelector); + } + return; + } else if ( !!pSelector['__tbSelector__'] ) { // selector is a tb.dom result set + return pSelector; + } else if ( pSelector instanceof TbSelector && !!pSelector[0] ) { // a twobirds selector result set + [].forEach.call( + pSelector, + function (pElement) { // copy only DOM nodes + if ( + !!pElement['target'] + && !!pElement['target']['nodeType'] + ) { + if ( [].indexOf.call( that, pElement.target ) === -1 ){ + [].push.call(that, pElement.target); + } + } + } + ); + return; + } else if ( pSelector instanceof Array + || !!pSelector['__tbSelector__'] + || pSelector instanceof HTMLCollection + || pSelector instanceof NodeList ) { + [].forEach.call( + pSelector, + function ( pElement ) { + tb.dom( pElement ) + .forEach( + function( pFoundDomNode ){ + if ( [].indexOf.call( that, pFoundDomNode ) === -1 ){ + [].push.call( + that, + pFoundDomNode + ); + } + } + ); + } + ); + return; + } else if (typeof pSelector !== 'string') { // wrong selector type + return; + } else { // pSelector is a string + + var DOM = _htmlToElements( pSelector ); // uses 'template' element to retrieve DOM nodes + + if ( DOM.length === 1 + && !!DOM[0].nodeType + && DOM[0].nodeType === 3 // nodeType 3 indicates text node + ){ // it is not a HTML string, but a simple string --> it is regarded a CSS selector + domNode = !!pDomNode && !!pDomNode['nodeType'] ? pDomNode : document; + pSelector + .split( ',' ) + .forEach( + function forEachTbDomSelector( pThisSelector ){ + nodeList = domNode.querySelectorAll(pThisSelector.trim()); + if (!!nodeList[0]) { + [].forEach.call( + nodeList, + function (pDomElement) { + if ( [].indexOf.call( that, pDomElement ) === -1 ){ + [].push.call( that, pDomElement ); + } + } + ); + } + + } + ); + + } else { // it is a HTML string + // return html content as a set of nodes + return tb.dom( DOM ); + } + } + + }; + + // dom prototype, public functions + dom.arrayMethods = { + + __tbSelector__: true, // detection + + length: 0, + + // from Array prototype + /** + @method concat + @chainable + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see concat + */ + concat: _mapArrayMethod( 'concat' ), + + /** + @method every + @chainable + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see every + */ + every: _mapArrayMethod( 'every' ), + + /** + @method forEach + @chainable + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see forEach + */ + forEach: _mapArrayMethod( 'forEach' ), + + /** + @method indexOf + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see indexOf + */ + indexOf: _mapArrayMethod( 'indexOf' ), + + /** + @method map + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see map + */ + map: _mapArrayMethod( 'map' ), + + /** + @method pop + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see pop + */ + pop: _mapArrayMethod( 'pop' ), + + /** + @method push + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see push + */ + push: _mapArrayMethod( 'push' ), + + /** + @method reduce + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see reduce + */ + reduce: _mapArrayMethod( 'reduce' ), + + /** + @method reduceRight + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see reduceRight + */ + reduceRight: _mapArrayMethod( 'reduceRight' ), + + /** + @method reverse + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see reverse + */ + reverse: _mapArrayMethod( 'reverse' ), + + /** + @method shift + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see shift + */ + shift: _mapArrayMethod( 'shift' ), + + /** + @method slice + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see slice + */ + slice: _mapArrayMethod( 'slice' ), + + /** + @method some + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see some + */ + some: _mapArrayMethod( 'some' ), + + /** + @method splice + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see splice + */ + splice: _mapArrayMethod( 'splice' ), + + /** + @method unshift + + @return {object} - tb.dom() result set, may be empty + + inherited from Array, see unshift + */ + unshift: _mapArrayMethod( 'unshift' ), + }; + + // functions + dom.methods = (function(){ + + /** + @method add + @chainable + + @param pSelector - any valid tb.dom() constructor parameter + + @return {object} - tb.dom() result set, may be empty + + add all nodes in tb.dom( pSelector ) result set to tb.dom() result set + */ + function add( pSelector ) { + var that = this, + res; + + if ( typeof pSelector !== 'string' && !!pSelector['length'] ) { // if array given add each of its elements + [].forEach.call( + pSelector, + function ( pSelected ) { + res = tb.dom( pSelected ).toArray(); + res.forEach( + function( pDomNode ){ + if ( [].indexOf.call( that, pDomNode ) === -1 ){ + [].push.call( + that, + pDomNode + ); + } + } + ); + } + ); + } else { // pSelector not an array + res = tb.dom( pSelector ).toArray(); + res.forEach( + function( pDomNode ){ + if ( [].indexOf.call( that, pDomNode ) === -1 ){ + [].push.call( + that, + pDomNode + ); + } + } + ); + } + + return that.unique(); + } + + /** + @method addClass + @chainable + + @param {string} pClassName - class name(s) to add, separated by ' ' + + @return {object} - tb.dom() result set, may be empty + + add class name to each of tb.dom() result set + */ + function addClass(pClassNames) { + + var that = this; + + if ( !pClassNames || typeof pClassNames !== 'string' ){ + console.warn( 'method addClass: missing or wrong pClassNames' ); + return that; + } + + var givenClassNames = pClassNames + .split(' ') + .filter(function(pElement){ + return !!pElement; + }); + + that.forEach( + function( pDomNode ){ + var existingClasses = ( pDomNode.getAttribute('class') || '' ) + .split(' ') + .filter(function(pElement){ + return !!pElement; + }); + + givenClassNames.forEach(function(pGivenClassName){ + + if ( existingClasses.indexOf( pGivenClassName ) === -1) { + existingClasses.push( pGivenClassName ); + } + + }); + + pDomNode.setAttribute('class', existingClasses.join(' ') ); + + } + + ); + + return that; + } + + /** + @method append + @chainable + + @param pElement - an array like set of DOM nodes, or a single DOM node + + @return {object} - tb.dom() result set, may be empty + + appends given DOM nodes to every node in tb.dom() result set + */ + function append( pElement ){ + var that = this, + nodes; + + that.forEach( + function( pDomNode ){ + nodes = tb.dom( pElement ); + [].forEach.call( + nodes, + function( pThisElement ){ + if ( !!pThisElement['nodeType'] ){ + pDomNode.appendChild( pThisElement ); + } + } + ); + } + ); + + return that; + } + + /** + @method appendTo + + @param pElement - a dom node or tb.dom() result set + + appends all elements in this result set to DOM node or tb.dom(...)[0] first element of result set + */ + function appendTo( pElement ){ + var that = this; + + pElement = tb.dom( pElement ); // all types of selectors, only first result + + if ( !!pElement['0'] ){ + pElement = pElement[0]; + that.forEach( + function( pDomNode ){ + pElement.appendChild( pDomNode ); + } + ); + } + + return that; + } + + /** + @method attr + @chainable + + @param pKey - if string: DOM node attribute name; if object: hash of attributeName: attributeValue + @param {string} [pValue] - value to set in DOM node(s) + + @return {object} - tb.dom() result set, may be empty + + set of get attribute values to each DOM node in give tb.dom() result set + + HINT: + if pKey is a string and pValue is not given its a GET + if pKey is an object or pKey(string) and pValue(string) are given, it is a SET. ONLY THEN this is CHAINABLE. + */ + function attr(pKey, pValue) { + + var that = this, + rootNodes, + attributes = {}; + + if ( typeof pKey === 'object' ){ // it is a hash object + + Object + .keys( pKey ) + .forEach(function( pPropName ){ + that.forEach( function( pDomNode ){ + tb.dom( pDomNode ).attr( pPropName, pKey[pPropName] ); + }); + }); + + return that; + } + + // if no arguments, return attribute object of first in list + if (!arguments.length) { + [].forEach.call( + that[0].attributes, + function( pAttribute ){ + attributes[ pAttribute.name ] = pAttribute.value; + } + ); + return attributes; + } + + // if no value is given and there are elements, return attribute value of first in list + if ( pValue === undefined && that.length > 0 ) { + return that[0].getAttribute(pKey); + } + + // if a value to set is given, apply to all nodes in list + rootNodes = that.toArray(); + rootNodes.forEach( + function (pNode) { + pNode.setAttribute(pKey, pValue); + } + ); + + return that; + } + + /** + @method children + @chainable + + @param pSelector - any valid tb.dom() constructor parameter + + @return {object} - tb.dom() result set, may be empty + + return child nodes of tb.dom() result set, that match nodes in tb.dom( pSelector ) result set + */ + function children(pSelector) { + + var that = this, + result = tb.dom(); + + that.forEach( + function (pDomNode) { + var check = pSelector !== undefined ? tb.dom( pSelector ) : false; + + [].forEach.call( + pDomNode.children, + function( pChildNode ){ + if ( -1 === [].indexOf.call( result, pChildNode ) + && ( !check || -1 < [].indexOf.call( check, pChildNode ) ) + ){ + result.push( pChildNode ); + } + } + ); + } + ); + + return result; + } + + /** + @method clean + @chainable + + @return {object} - tb.dom() result set, may be empty + + - normalizes text nodes + - removes comment nodes + */ + function clean(){ + + var that = this; + + that.forEach( + function( pElement ){ + var treeWalker = document.createTreeWalker( + pElement, + 128 // comment nodes + ); + + pElement.normalize(); + + while(treeWalker.nextNode()){ + // we need to IIFE so the node pointer is copied, + // otherwise it will only remove the last comment node of that while loop + setTimeout((function(pNode){ return function(){ + pNode.remove(); + }; })( treeWalker.currentNode ), 0); + } + } + ); + + return that; + } + + /** + @method descendants + @chainable + + @param pSelector - any valid tb.dom() constructor parameter + + @return {object} - tb.dom() result set, may be empty + + return all descendant nodes of tb.dom() result set, that match nodes in tb.dom( pSelector ) result set + */ + function descendants( pSelector ) { + + var that = this, + result = [], + ret, + check = !!pSelector ? tb.dom( pSelector ) : false; + + that + .forEach( + function( pDomNode ){ + result = result.concat( tb.dom( pDomNode.querySelectorAll( '*' ) ).toArray() ); + } + ); + + result = tb.dom( result ).unique().toArray(); + + if ( check ){ + ret = result + .filter( + function( pDomNode ){ + return -1 < [].indexOf.call( check, pDomNode ); + } + ); + } + + return tb.dom( check ? ret : result ); + } + + /** + @method empty + @chainable + + @return {object} - tb.dom() result set, may be empty + + removes one or all DOM event handlers from each element in tb.dom() result set + */ + function empty() { + var that = this; + + that.forEach( + function( pNode ){ + pNode.innerHTML = ''; + } + ); + + return that; + } + + /** + @method filter + @chainable + + @param pSelector - tb.dom() selector to match against or [].filter.call( this, function(){ ... } ) + + @return {object} - tb.dom() result set + + match tb.dom() result set against pSelector filter + */ + function filter( pSelector ) { + + var that = this, + compare = tb.dom( pSelector ),// functions and undefined will be ignored, so empty result then + result; + + if ( pSelector === 'undefined' ) { + return that; + } // unchanged + + if ( typeof pSelector === 'string' ) { // DOM selector given + result = [].filter.call( + that, + function (pElement) { + return -1 < compare.indexOf(pElement); + } + ); + } else if ( pSelector instanceof Function ) { // function given + result = [].filter.call( + that, + pSelector + ); + } + + return tb.dom(result); + } + + /** + @method first + @chainable + + @return {object} - tb.dom() result set, may be empty + + return tb.dom() result set, that contains only the first element in tb.dom( pSelector ) result set + */ + function first() { + + var that = this, + result = tb.dom(); + + if ( !!tb.dom.length ){ + result.push( that[0] ); + } + + return result; + } + + /** + @method hasClass + @param pClass {string} - class name + + @return {boolean} - true if class in className + */ + function hasClass( pClass ) { + var that = this, + node = !!that[0] ? that[0] : false; + + if ( node ){ + return node.className.split( ' ' ).indexOf( pClass ) > -1; + } + return; + } + + /** + @method hide + @chainable + + @return {object} - tb.dom() result set, may be empty + + hide all nodes in tb.dom() result set + */ + function hide() { + var that = this; + + that.forEach( + function( pNode ){ + var prev = window.getComputedStyle(pNode).getPropertyValue('display'); + pNode.style.prevDisplay = !! prev && prev !== 'none' + ? prev + : 'inline'; + pNode.style.display = 'none'; + } + ); + + return that; + } + + /** + @method html + @chainable + + @param {string} pHtml - html string or empty string + + @return {object} - tb.dom() result set, may be empty + + replace all nodes .innerHTML with pHtml + */ + function html( pHtml ) { + var that = this; + + if ( typeof pHtml !== 'undefined' ){ + if ( typeof pHtml === 'string' ) { + that.forEach( + function (pNode) { + pNode.innerHTML = pHtml; + } + ); + } + } else { + return !!that[0] ? that[0].innerHTML : ''; + } + + return that; + } + + /** + @method insertBefore + + @param pElement - a single DOM node or tb.dom() selector result set, [0] is taken + + prepends all elements in tb.dom() result set to given DOM node + */ + function insertBefore( pTarget ){ + var that = this, + target = tb.dom( pTarget )['0'] ? tb.dom( pTarget )['0'] : false; + + if ( !target ) { + return; + } + + that.forEach( + function( pDomNode ){ + if ( !!pDomNode.nodeType ){ + + target.parentElement + .insertBefore( + pDomNode.cloneNode( true ), + pTarget + ); + + } + } + ); + + return that; + } + + /** + @method insertAfter + + @param pElement - a single DOM node or tb.dom() selector result set, [0] is taken + + inserts all elements in tb.dom() result set after given DOM node + */ + function insertAfter( pTarget ){ + var that = this, + target = tb.dom( pTarget )['0'] ? tb.dom( pTarget )['0'] : false, + nextDomNode = target.nextSibling || false; + + if ( !target ) { + return; + } + + that.forEach( + function( pDomNode ){ + if ( !!pDomNode.nodeType ){ + + if ( nextDomNode ){ + target + .parentElement + .insertBefore( + pDomNode.cloneNode( true ), + nextDomNode + ); + } else { + target + .parentElement + .appendChild( + pDomNode.cloneNode( true ) + ); + } + + } + } + ); + + return that; + } + + /** + @method last + @chainable + + @return {object} - tb.dom() result set, may be empty + + return tb.dom() result set, that contains only the last element in tb.dom( pSelector ) result set + */ + function last() { + + var that = this, + result = tb.dom(); + + if ( !!tb.dom.length ){ + result.push( that.pop() ); + } + + return result; + } + + /** + @method next + @chainable + + @return {object} - tb.dom() result set, may be empty + + return tb.dom() result set, that contains only the next element + of the first element in tb.dom( pSelector ) result set + */ + function next() { + + var that = this, + result = tb.dom(); + + if ( !!tb.dom.length ){ + if ( !!that[0].nextSibling ){ + result.push( that[0].nextSibling ); + } + } + + return result; + } + + /** + @method not + @chainable + + @param pSelector - any valid tb.dom() constructor parameter + + @return {object} - tb.dom() result set, may be empty + + remove all nodes from this tb.dom() result set, that are in tb.dom( pSelector ) result set + */ + function not(pSelector) { + var that = this, + check = pSelector !== undefined ? document.querySelectorAll( pSelector ) : false; + + if ( !check ){ + return that; + } + + check.forEach(function (pElement) { + var i = [].indexOf.call( that, pElement); + if ( i > -1 ) { + [].splice.apply( that, [ i, 1 ] ); + } + }); + + return that; + } + + /** + @method off + @chainable + + @param {string} pEventName(s) - name(s) of the event separated by ' ' + @param {function} pHandler - callback far event + @param {boolean} [pCapture] - callback far event + + @return {object} - tb.dom() result set, may be empty + + removes one or all DOM event handlers from each element in tb.dom() result set + */ + function off( pEventName, pHandler, pCapture ){ + var that = this, + eventNames = pEventName.indexOf(' ') > -1 ? pEventName.split(' ') : [ pEventName ], + capture = typeof pCapture === 'boolean' ? pCapture : false; + + that.forEach( + function( pDomNode ){ + if ( !!pDomNode.nodeType ){ + if ( !!pHandler ){ + eventNames.forEach( + function( pThisEventName ){ + _removeEvent( pDomNode, pThisEventName, pHandler, capture ); + } + ); + } else { + eventNames.forEach( + function( pThisEventName ){ + // todo: refactor this, doesnt seem to work + pDomNode['on' + pThisEventName] = null; + pDomNode.removeAttribute( 'on' + pThisEventName ); + } + ); + } + } + } + ); + + return that; + } + + /** + @method on + @chainable + + @param {string} pEventName(s) - name(s) of the event separated by ' ' + @param {function} pHandler - callback for event + @param {boolean} pCapture - indicates running in capture phase, that is top down + + @return {object} - tb.dom() result set, may be empty + + creates a DOM event handler for each element in tb.dom() result set + */ + function on( pEventName, pHandler, pCapture ){ + var that = this, + eventNames = pEventName.indexOf(' ') > -1 ? pEventName.split(' ') : [ pEventName ], + onceHandler, + capture = typeof pCapture === 'boolean' ? pCapture : false; + + // if to be called only once + if ( !!pHandler.once ){ + + onceHandler = (function(pHandler, pCapture) { + return function myOnceHandler(ev){ + + // remove handlers + that.forEach( + function( pDomNode ){ + if ( !!pDomNode.nodeType ){ + eventNames.forEach( + function( pThisEventName ){ + _removeEvent( pDomNode, pThisEventName, onceHandler, capture ); + } + ); + } + } + ); + + pHandler.apply( ev, arguments ); + }; + })(pHandler, pCapture); + + // needed to remove handlers from ALL dom elements + onceHandler.that = that; + + // needed for .off() + onceHandler.remove = function removeOnceHandlers(){ + + // remove handlers + that.forEach( + function( pDomNode ){ + if ( !!pDomNode.nodeType ){ + eventNames.forEach( + function( pThisEventName ){ + _removeEvent( pDomNode, pThisEventName, onceHandler, capture ); + } + ); + } + } + ); + + }; + + } + + // attach handler + that.forEach( + function( pDomNode ){ + if ( !!pDomNode.nodeType ){ + eventNames.forEach( + function( pThisEventName ){ + _addEvent( pDomNode, pThisEventName, onceHandler || pHandler, capture ); + } + ); + } + } + ); + + return !!onceHandler ? onceHandler : that; + } + + /** + @method one + + @param {string} pEventName(s) - name(s) of the event separated by ' ' + @param {function} pHandler - callback far event + @param {boolean} pCapture - indicates running in capture phase, that is top down + + @return {function} - the onceHandler function + + creates a DOM event handler for each element in tb.dom() result set (to be called only once) + + - after the first call ALL event handlers that were attached to the dom elements are deleted automatically. + - to remove all these onceHandlers manually, use the returned onceHandler and its .that property. + - use + + @example + + // create a handler + var f=function(){ + console.log('a'); + } + + // attach handler to multiple divs + var oh = tb.dom( 'div' ) // each of the divs will respond with handlers, but afterwards all attached handlers are deleted + .one( + 'click', + f + ); + + // use this if you want to remove certain onceHandlers manually ( not ALL of them which is next ) + console.log( oh ); // the onceHandler function created + console.log( oh.that ); // the original tb.dom selection, used to delete some oh handlers manually if needed + console.log( oh.remove ); // the function that deletes ALL once handlers + + // remove all handlers created by .one() + tb.dom( '.myBotton' ) // a click on a certain button will remove ALL onceHandlers + .one( + 'click', + f.remove + ); + + */ + function one( pEventName, pHandler, pCapture ){ + var that = this; + + pHandler.once = true; + + return that.on( pEventName, pHandler, pCapture ); + } + + /** + @method parents + @chainable + + @param pSelector - any valid tb.dom() constructor parameter + + @return {object} - tb.dom() result set, may be empty + + return all parent nodes of tb.dom() result set, that match nodes in tb.dom( pSelector ) result set + */ + function parents(pSelector) { + + var that = this, + result = tb.dom(), + check = pSelector !== undefined ? tb.dom( pSelector ) : false, + domNode; + + that.forEach( + function (pDomNode) { + domNode = pDomNode.parentNode; + + while (!!domNode + && !!domNode['tagName'] + && domNode['tagName'] !== 'HTML' + ){ + if ([].indexOf.call(result, domNode) === -1 + && ( !check || -1 < [].indexOf.call( check, domNode ) ) + ) { + result.push(domNode); + } + domNode = domNode.parentNode; + } + } + ); + + return result; + } + + /** + @method parent + @chainable + + @param pSelector - any valid tb.dom() constructor parameter + + @return {object} - tb.dom() result set, may be empty + + return closest parent nodes of tb.dom() result set, that match nodes in tb.dom( pSelector ) result set + */ + function parent(pSelector){ + var that = this, + result = tb.dom(), + check = pSelector !== undefined ? tb.dom( pSelector ) : false; + + that.forEach( + function (pDomNode) { + var domNode = pDomNode.parentNode; + + if ( -1 === [].indexOf.call( result, domNode ) + && ( !check || -1 < [].indexOf.call( check, domNode ) ) + ){ + [].push.call( result, domNode); + } + } + ); + + return result; + } + + /** + @method previous + @chainable + + @return {object} - tb.dom() result set, may be empty + + return tb.dom() result set, that contains only the previous element + of the first element in tb.dom( pSelector ) result set + */ + function previous() { + + var that = this, + result = tb.dom(); + + if ( !!tb.dom.length ){ + if ( !!that[0].previousSibling ){ + result.push( that[0].previousSibling ); + } + } + + return result; + } + + /** + @method remove + @chainable + + @param [pDomElements] - a tb.dom() selector result set + @return {object} - tb.dom() result set containing removed DOM nodes + + removes all elements in tb.dom() result set from DOM + */ + function remove( pDomNodes ){ + var that = this; + + that.forEach( + function( pDomNode, pIndex ){ + that[ pIndex ] = pDomNode.parentNode.removeChild( pDomNode ); + } + ); + + return that; + } + + /** + @method removeAttr + @chainable + + @param {string} pKeys - attribute name(s) separated by ' ' + + @return {object} - tb.dom() result set, may be empty + + remove attribute(s) completely from tb.dom() result set + */ + function removeAttr(pKeys) { + + var that = this, + attrNames = pKeys && pKeys.match(regExWord), + name, + i; + + that.forEach( + function (pDomNode) { + i = 0; + if (attrNames && !!pDomNode['nodeType'] && pDomNode.nodeType === 1) { + while ((name = attrNames[i++])) { + pDomNode.removeAttribute(name); + } + } + } + ); + + return that; + } + + /** + @method removeClass + @chainable + + @param {string} pClassName - class name(s) to remove, separated by ' ' + + @return {object} - tb.dom() result set, may be empty + + remove class name from each of tb.dom() result set + */ + function removeClass(pRemoveClasses) { + + var that = this, + removeClasses = pRemoveClasses + .split(' ') + .filter(function(pElement){ + return !!pElement; + }); + + that.forEach( + function ( pDomNode ) { + + var existingClasses = ( pDomNode.getAttribute('class') || '' ) + .split(' ') + .filter(function(pElement){ + return !!pElement; + }); + + removeClasses.forEach( + function( pRemoveClass ){ + + while ( existingClasses.indexOf(pRemoveClass) > -1 ){ + existingClasses.splice(existingClasses.indexOf(pRemoveClass), 1); + } + + if ( !!existingClasses.length ){ + tb.dom( pDomNode ).attr('class', existingClasses.join(' ') ); + } else { + tb.dom( pDomNode ).removeAttr('class'); + } + + } + ); + + } + ); + + return that; + } + + /** + @method show + @chainable + + @return {object} - tb.dom() result set, may be empty + + show all nodes in tb.dom() result set + */ + function show() { + var that = this; + + that.forEach( + function( pDomNode ){ + pDomNode.style.display = !!pDomNode.style.prevDisplay + ? pDomNode.style.prevDisplay + : 'block'; + } + ); + + return that; + } + + /** + @method toArray + @chainable + + @return {object} - tb.dom() result set converted to a plain array of DOM nodes + + convert tb.dom() result set converted to a plain array of DOM nodes + */ + function toArray(){ + var that = this; + + return Array.from(that); + } + + /** + @method toggleClass + @param pClassName {string} - class name + @chainable + + @return {object} - tb.dom() result set + + if className is set in class attribute, it is deleted, otherwise it is set. + */ + function toggleClass( pClassName ) { + var that = this, + $pNode; + + that.forEach( + function( pNode ){ + + $pNode = tb.dom( pNode ); + + $pNode[ $pNode.hasClass(pClassName) ? 'removeClass' : 'addClass' ]( pClassName ); + + } + ); + + return that; + } + + /** + @method trigger + @chainable + + @param {string} pEventName - name of the event + @param {object} [pData] - optional data + @param {boolean} [pBubble] - bubble event, default = true + @param {boolean} [pCancel] - cancelable event, default = true, if false e.preventDefault() in handler will have no effect + + @return {object} - tb.dom() result set, may be empty + + creates a DOM event for each element in tb.dom() result set + */ + function trigger( pEventName, pData, pBubble, pCancel ){ + var bubble = typeof pBubble === 'boolean' ? pBubble : true, + cancel = typeof pCancel === 'boolean' ? pCancel : true, + that = this, + eventNames = pEventName.split(' '), + e; + + that.forEach( + function( pDomNode ){ + if ( !!pDomNode.nodeType ){ + eventNames.forEach( + function( pThisEventName ){ + if ('createEvent' in document) { + e = document.createEvent('HTMLEvents'); + tb.extend( + e.data, + pData + ); + e.initEvent(pThisEventName, bubble, cancel ); + pDomNode.dispatchEvent(e); + } else { + e = document.createEventObject(); + tb.extend( + e.data, + pData + ); + e.eventType = pThisEventName; + pDomNode.fireEvent('on'+e.pThisEventName, e); + } + } + ); + } + } + ); + + return that; + } + + /** + @method unique + @chainable + + @return {object} - tb.dom() result set, may be empty + + force this tb.dom() result set to be unique ( HINT: if this is necessary, there is an error in twoBirds, + and we would like to hear about it... ) + + method is called internally though to force result set uniqueness + */ + function unique() { + var that = this, + result = []; + + [].forEach.call( + that, + function ( pElement ) { + if ( result.indexOf( pElement ) === -1 ){ + result.push( pElement ); + } + } + ); + + return tb.dom( result ); + } + + /** + @method val + @chainable + + @param {string} [pValue] - value to set to DOM input type element + + @return [pValue] - value from input element [0] in tb.dom() result set + + if pValue given, it is a SET and the method is chainable + if no pValue given, it is a GET and the method will return the value + */ + function val( pValue ){ + + var that = this, + inputTags = ('input select textarea').split( ' ' ), + excludeTypes = ('button file image reset submit').split( ' ' ), + ret; + + function isInput( pElement ){ + return pElement.nodeType === 1 + && ( inputTags ).indexOf( pElement.tagName.toLowerCase() ) > -1 + && ( excludeTypes ).indexOf( pElement.type ) === -1; + } + + var valHandlers = { + + 'select': function selectVal( pValue ){ + + var that = this, + multiSelect = that.type === "select-multiple", + ret; + + if ( !arguments.length ) { // getter + + ret = []; + + [].forEach.call( + that.selectedOptions, + function( pOption ){ + if ( pOption.selected ){ + if ( !pOption.disabled + && ( !pOption.parentNode.disabled + || pOption.parentNode.nodeName !== "optgroup" ) + ){ + var value = pOption.value; + + ret.push( value ); + } } + } + ); + + // if multiselect return array if single return value or empty string for not selected + return multiSelect ? ret : !!ret[0] ? ret[0] : ''; + + } else { // setter + + // if single value given convert to array + pValue = pValue.constructor !== Array ? [ pValue ] : pValue; + + // if not multiSelect but array given set array to first value + pValue = !multiSelect && pValue.constructor === Array ? [ pValue[0] ] : pValue; + + // set options + [].forEach.call( + that.options, + function( pOption ){ + var valIndex = pValue.indexOf( pOption.value ), + val; + + if ( valIndex + 1 ){ + val = pValue[ valIndex ]; + pOption.selected = !!val; + } else { + pOption.selected = false; + } + + } + ); + + // set given 'selected' attributes + pValue + .forEach( + function( pOption ){ + tb.dom( 'option[value="' + pOption + '"]', that ) + .selected = true; + } + ); + + } + + return; + }, + + 'default': function defaultVal( pValue ){ + + var that = this, + ret; + + if ( that.type === 'radio' ){ // input radio or checkbox + var name = that.name, + selector = '[type="radio"][name="' + name + '"]', + radios = tb.dom( that ).parents( 'form' ).descendants( selector ); + + ret = ''; + + radios + .forEach( + function( pRadio ){ + var isElement; + + if ( typeof pValue !== 'undefined' ){ // setter + isElement = pRadio.value === pValue; + + pRadio.checked = isElement ? true : false; + + ret = pRadio.checked ? pRadio.value : ret; + } else { // getter + if ( pRadio.checked === true ){ + ret = pRadio.value; + } + } + + } + ); + + return ret; + + } + + if ( that.type === 'checkbox' ){ // input radio or checkbox + + if ( typeof pValue !== 'undefined' ){ // setter + that.checked = pValue ? true : false; + ret = that.checked; + } else { // getter + ret = false; + if ( that.checked === true ){ + ret = true; + } + } + + return ret; + + } else { // not a radio or checkbox + + if ( !arguments.length ) { // getter + + ret = that.value; + + return typeof ret === "string" ? + ret : + ret == null ? "" : ret; + + } else { // setter + + // Treat null/undefined as ""; convert numbers to string + if (pValue == null) { + pValue = ""; + } else if (typeof val === "number") { + pValue += ""; + } + + that.value = pValue; + + } + + } + + } + + }; + + if ( arguments.length ){ + + that.forEach( + function ( pElement ) { + + if ( !isInput( pElement ) ){ + return; // not an input element + } + + ret = !!valHandlers[ pElement.tagName.toLowerCase() ] + ? valHandlers[ pElement.tagName.toLowerCase() ].call( pElement, pValue ) + : valHandlers[ 'default' ].call( pElement, pValue ); + + } + ); + + return that; + + } else { // getter + + that.some( + function ( pElement ) { + + if ( !isInput( pElement ) ){ + return false; // is not an input element + } + + ret = !!valHandlers[ pElement.tagName.toLowerCase() ] + ? valHandlers[ pElement.tagName.toLowerCase() ].call( pElement ) + : valHandlers[ 'default' ].call( pElement ); + + return true; // is an input element + + } + ); + + } + + return ret; + } + + /** + @method values + + @param {object} [pValues] - field values + + @return {object} - an object containing all values of a forms input fields + + get or set all form input values + */ + function values(pData) { + + var that = this, + node = that[0] || undefined, + values, + observable; + + if ( !node ) { // nothing found + return that; + } + + // it is a hash object -> treat as setter + if ( typeof pData === 'object' && !!node ){ + var v = tb.dom( node ).values(); + + Object + .keys( pData ) + .forEach(function( pKey ){ + if ( v.hasOwnProperty( pKey ) ){ + v[pKey] = pData[ pKey ]; + } + }); + + return; + } + + // not processed yet + if ( !node['getValues'] ){ + // form changed observable + node['getValues'] = tb.observable({}); + + // create form change binding + tb.dom('input,select,textarea', node) + .on( + 'keyup change select', + tb.debounce( function onFormChange(){ + //console.log('keyup change select'); + node['getValues']( tb.extend( {}, tb.dom(node).values() ) ); + }, 5 ) + ); + } + + // form setter observable + node['values'] = !!node['values'] ? node['values'] : tb.observable({}); + + // value hash constructor + function Values(){ + } + + // value hash prototype + Values.prototype = { + bind: function( pObject, pOnce ){ + //console.log('bind', pObject, pOnce, node['getValues']() ); + + node['getValues'].observe(function changeTarget(){ + //console.log('formvalues changed -> set object', pObject, node['getValues']() ); + tb.extend( pObject, node['getValues']() ); + setTimeout(function(){ + if(!!Object.getOwnPropertySymbols(pObject)[1]){ + pObject[Object.getOwnPropertySymbols(pObject)[1]](); // onChange debounced function + } + }, 0); + }, pOnce); + + node['getValues'].notify(); // push initial setting + }, + + observe: function( pCallback, pOnce ){ + node['values'].observe( pCallback, pOnce ); + } + }; + + // make value hash + values = new Values(); + + Object.defineProperty( + that, + 'values', + { + enumerable: true, + + configurable: true, + + set: function( pObject ){ + + // disable notifications for bulk change + node['values'] + .enableNotify( false ); + + Object + .keys( pObject ) + .forEach( + function( pKey ){ + that.values[ pKey ] = pObject[ pKey ]; + } + ); + + // now notify + node['values'] + .enableNotify() + .notify(); + + }, + + get: (function(node, observable){ return function(){ + var fields = tb.dom('input[name],select[name],textarea[name]', node ); + + fields + .forEach( + function( pField ){ + var key = tb.dom( pField ).attr('name'); + + if ( values.hasOwnProperty( key ) ){ + return; + } + + Object.defineProperty( + values, + key, + { + enumerable: true, + + get: function(){ + return tb.dom( pField ).val(); + }, + set: function( pValue ){ + var ret = tb.dom( pField ).val( pValue ); + + observable( values ); + + return ret; + } + } + ); + + } + ); + + // set observable w/ values + node['values']( values ); + + return values; + + };})( node, node['values'] ) + } + ); + + return that.values; + } + + + return { + add: add, + addClass: addClass, + append: append, + appendTo: appendTo, + attr: attr, + children: children, + clean: clean, + descendants: descendants, + empty: empty, + filter: filter, + first: first, + hasClass: hasClass, + hide: hide, + html: html, + insertBefore: insertBefore, + insertAfter: insertAfter, + last: last, + next: next, + not: not, + off: off, + on: on, + one: one, + parent: parent, + parents: parents, + previous: previous, + remove: remove, + removeAttr: removeAttr, + removeClass: removeClass, + show: show, + toArray: toArray, + toggleClass: toggleClass, + trigger: trigger, + unique: unique, + val: val, + values: values + }; + })(); + + dom.prototype = tb.extend( dom.methods, dom.arrayMethods ); + + f = function (pSelector, pDomNode) { + + return new dom( pSelector, pDomNode ); + }; + + f.innerProto = dom.prototype; + + return f; + })(); + + tb.dom.plugin = function( pMethodName, pFunction ){ + var p = tb.dom.innerProto; + + if ( !p[ pMethodName ] ){ + p[ pMethodName ] = pFunction; + } else { + console.warn( 'tb.dom.plugin(): Cannot overload existing tb method (', pMethodName, ')' ); + } + + }; + +} + + +/** + @class tb.Util + + @description + placeholder class, everything contained herein is a curry property of the tb() constructor + */ + +/** + an empty function just in case you need one + + @memberof tb + @static + @method tb.nop + + @example + + // this is not very useful, but alas... + // append the empty function to the 'click' event handler list + this.on('click', tb.nop); + */ +tb.nop = function(){}; + +/** + @memberof tb + @method tb.namespace + @static + @chainable + + @param {string} pNamespace + @param {object} [pObject] object to scan + + @return {object} containing set() / get() functions for property in pNamespace + + @example + + // lookup [window] namespace: + tb.namespace( 'test.GrandParent' ); // gets the constructor for the GrandParent from DOM + + // in a constructor force namespace creation: + tb.namespace( 'app.prop' ).set( 'testVal' ); // force creation of 'app.prop' if it doesnt exist, set value to 'testVal' + + @example + + // lookup namespace in any object and return value: + tb.namespace( 'x.y', { x: { y: 42 } } ).get(); // 42 + + @example + + // create content in any object as denominated by namespace: + var obj = { x: { y: 42 } } + tb.namespace( 'x.z', obj ).set( 43 ); // obj => { x: { y: 42, z: 43 } } + + */ +tb.namespace = (function(){ + + // constructor + function Namespace( pNamespace, pObject){ + var that = this; + + that.namespace = pNamespace; + that.target = pObject; + that.namespaceArray = pNamespace.indexOf( '.' ) ? pNamespace.split('.') : [ pNamespace ]; + that.forceCreation = false; + } + + // prototype + Namespace.prototype = { + get: get, + set: set, + _walk: _walk + }; + + return function ( pNamespace, pObject ){ + return new Namespace( pNamespace, pObject ); + }; + + // methods + function _walk( o, namespaceArray ) { + var that = this; + + if ( !o[ namespaceArray[0] ] && !!this.forceCreation ) { + o[ namespaceArray[0] ] = {}; + } + + if ( namespaceArray.length < 2 ){ + + if( that.forceCreation && typeof that.value !== 'undefined' ){ // if value is present it is called with set() + o[ namespaceArray[0] ] = that.value; + } + return o.hasOwnProperty( namespaceArray[0] ) ? o[ namespaceArray[0] ] : undefined; + + } else { + + if ( o.hasOwnProperty( namespaceArray[0] ) ) { + o = o[ namespaceArray[0] ]; + namespaceArray.shift(); + return that._walk( o, namespaceArray ); + } else { + return; + } + + } + } + + function get(){ + var that = this; + + that.forceCreation = false; + return that._walk( !that.target ? window : that.target, that.namespaceArray ); + } + + function set( pValue ){ + var that = this; + + if ( typeof pValue === 'function' + && pValue.prototype !== Function.prototype //jshint ignore:line + ){ //it is a custom class + pValue.prototype.namespace = that.namespace; + } + + that.value = pValue; + that.forceCreation = true; + + return that._walk( !that.target ? window : that.target, that.namespaceArray ); + } + +})(); + +/** + @memberof tb + @static + @method tb.attach + + @param {object} [pRootNode] DOM node to start binding in + + @example + + tb.attach( document.body ); + // scans the given element and all of its descendants + // in the DOM and looks for attributes "data-tb" in the nodes. + + // Resulting list will be scanned for those nodes that do not already + // have a tb object inside which is given as a namespace in the data-tb attribute. + + // Creates missing tb object based on the class namespace given + // in the "data-tb" attribute and stores it in the DOM element + + */ +tb.attach = function( pRootNode ){ + + var rootNode = pRootNode || document.body, + foundElements = tb.dom( rootNode.querySelectorAll( '[data-tb]' ) ).toArray(); + + // add self if data-tb attribute present + if ( rootNode.getAttribute('data-tb') ){ + foundElements = [rootNode].concat( foundElements ); + } + + // instanciate tb instances for given elements + foundElements.forEach( + function( pElement ){ + var namespaces = pElement.getAttribute('data-tb').split(' '); + + namespaces.forEach( + function( pNamespace ){ + pElement['tb'] = pElement['tb'] || {}; + if ( !pElement['tb'][pNamespace] ){ + new tb( // create tb object + pNamespace, + null, + pElement + ); + } + } + ); + + } + ); + +}; + +/** + returns a unique id + + @memberof tb + @static + @method tb.getId + + @return {string} - unique id + + */ +tb.getId = function(){ + return 'id-' + (new Date()).getTime() + '-' + Math.random().toString().replace(/\./, ''); +}; + +/** + - Promise/A+ compliant promise functionality + + @memberof tb + @static + @class tb.Promise + @constructor + + @param {function} pFunction function to execute + + @return {object} Promise/A+ compliant promise object + + @example + + var p = new tb.Promise(function(resolve, reject){ + + setTimeout(function(){ + resolve('it worked.'); + },1000) + + setTimeout(function(){ + reject('something went wrong.'); + },500) + + }).then(function(pValue){ + + console.log('Yippie! ', pValue); + + }).catch(function(pValue){ + + console.log('Oops? ', pValue); + + }).finally(function(pValue){ + + console.log('Cleaning up ', pValue); + + }); + + */ +tb.Promise = (function(){ + + 'use strict'; + + var LAST_ERROR = null; + var IS_ERROR = {}; + + // Promise constructor + function Promise(fn) { + fn = fn || tb.nop; + if (typeof this !== 'object') { + throw new TypeError('Promises must be constructed via new'); + } + this._deferredState = 0; + this._state = 0; + this._value = null; + this._deferreds = null; + if (fn === tb.nop) { + return; + } + doResolve(fn, this); + } + Promise._onHandle = null; + Promise._onReject = null; + + // Promise prototype + Promise.prototype = { + /** + @method then + @chainable + + @param {function} pFunction - function to execute when promise is resolved + + @return {object} - a new Promise instance (chaining) + + + @example + + new tb.Promise(function(resolve, reject){ + setTimeout( resolve('ok.') ); + }).then(function(pValue){ + console.log( pValue ); // >ok. + }); + + */ + then: _then, + + /** + @method catch + @chainable + + @param {function} pFunction - function to execute when promise is rejected + + @return {object} - a new Promise instance (chaining) + + + @example + + new tb.Promise(function(resolve, reject){ + setTimeout( reject('oops.') ); + }).catch(function(pValue){ + console.log( pValue ); // >oops. + }); + + */ + 'catch': _catch, + + /** + @method finally + @chainable + + @param {function} pFunction - function to execute at the end in any case + + @return {object} - a new Promise instance (chaining) + + + @example + + new tb.Promise(function(resolve, reject){ + setTimeout( reject('whatever.') ); // could also be resolve, finally will always be executed + }).finally(function(pValue){ + console.log( pValue ); // >whatever. + }); + + */ + 'finally': _finally, + + done: _done + }; + + // static methods + + /** + @method tb.Promise.resolve + @chainable + @static + + @param {any} pValue - the value the returned promise will resolve with + + @return {object} - a new resolved Promise instance (chaining) + + + @example + + var p = tb.Promise.resolve('resolved'); + + */ + Promise.resolve = function( pValue ){ + var ret = new tb.Promise(function( resolve, reject ){ + }); + + resolve( ret, pValue ); + + return ret; + }; + + /** + @method tb.Promise.reject + @chainable + @static + + @param {any} pValue - the value the returned promise will reject with + + @return {object} - a new rejected Promise instance (chaining) + + + @example + + var p = tb.Promise.reject('rejected'); + + */ + Promise.reject = function( pValue ){ + var ret = new tb.Promise(function( resolve, reject ){ + }); + + reject( ret, pValue ); + + return ret; + }; + + /** + @method tb.Promise.all + @chainable + @static + + @param {array} pIterable - an array containing values and/or promises + + @return {object} - a new rejected Promise instance (chaining) + + @example + + // "then" function will be executed when ALL promises have been resolved + // "catch" function will be executed if one of the promises rejects + // values in the parameter array will be converted to Promise.resolve(value) + + var p = tb.Promise.all([ + true, + tb.Promise.resolve('new value') + ]).finally(function(pValue){ + console.log(pValue); // >[ true, 'new value' ] + }); + + var p = tb.Promise.all([ + true, + tb.Promise.reject('oops.') + ]).finally(function(pValue){ + console.log(pValue); // >oops. + }); + */ + Promise.all = function( pIterable ){ + + var count = pIterable.length, + observable = tb.observable(count), + promise = new Promise(), + result = new Array(count); + + // convert to promises if necessary and add callbacks + pIterable + .forEach( function( pValue, pIndex ){ + + if ( !pValue.then || typeof pValue.then !== 'function' ){ + pValue = tb.Promise.resolve( pValue ); + } + + pValue + .then(function(pValue){ + result[ pIndex ] = pValue; + }) + .catch(function(pValue){ + if ( promise._state === 0 ){ + reject( promise, pValue._value ); + } + }) + .finally(function(pValue){ + observable( observable() - 1 ); + }); + + }); + + observable.observe(function(pValue){ + if ( pValue === 0 ){ + observable = null; + if ( promise._state === 0 ){ + resolve( promise, result ); + } + } + }); + + return promise; + }; + + /** + @method tb.Promise.race + @chainable + @static + + @param {array} an array containing values and/or promises + + @return {object} a new rejected Promise instance (chaining) + + @example + + // "then" function will be executed when the fastest promise resolves + // "catch" function will be executed when the fastest promise rejects + // values in the parameter array will be converted to Promise.resolve(value) + + var p1 = new tb.Promise(function(resolve,reject){ + setTimeout(function(){ + resolve('ok.'); + },1000); + }); + + var p2 = new tb.Promise(function(resolve,reject){ + setTimeout(function(){ + reject('oops.'); + },2000); + }); + + var p = tb.Promise.race([ + p1, + p2 + ]).then(function(pValue){ + console.log(pValue); // >ok. + }).catch(function(pValue){ + console.log(pValue); // (will never be reached, p1 resolves first) + }); + */ + Promise.race = function( pIterable ){ + var promise = new tb.Promise(); + + // convert to promises if necessary and add callbacks + pIterable + .forEach( function( pValue, pIndex, pOriginalIterable ){ + if ( pValue.constructor !== Promise ){ + pOriginalIterable[ pIndex ] = Promise.resolve( pValue ); + } + + pOriginalIterable[ pIndex ] + .then(function(pValue){ + if ( promise._state === 0 ){ + resolve( promise, pValue ); + } + }) + .catch(function(pValue){ + if ( promise._state === 0 ){ + reject( promise, pValue ); + } + }); + }); + + return promise; + }; + + return Promise; + + // private functions + + // HINT: ignore:lines are needed because jslint regards these functions as being standalone, + // which they are not - they are the implementation of Promise.prototype methods. + + function _then(onFulfilled, onRejected) { + if ( !( this instanceof Promise) ) { // jshint ignore:line + return safeThen(this, onFulfilled, onRejected); // jshint ignore:line + } + var res = new Promise(tb.nop); + handle(this, new Handler(onFulfilled, onRejected, res)); // jshint ignore:line + return res; + } + + function _catch( pFunction ){ + return this.then( null, pFunction ); // jshint ignore:line + } + + function _done(onFulfilled, onRejected) { + var that = arguments.length ? this.then.apply(this, arguments) : this; // jshint ignore:line + that.then(null, function (pValue) { + setTimeout(function () { + throw pValue; + }, 0); + }); + } + + function _finally(f) { + var that = this; // jshint ignore:line + + return this.then(function (pValue) { // jshint ignore:line + return Promise.resolve(f(that._value)).then(function () { + return that._value; + }); + }, function (pValue) { + return Promise.resolve(f(that._value)).then(function () { + throw that._value; + }); + }); + } + + function getThen(obj) { + try { + return obj.then; + } catch (e) { + LAST_ERROR = e; + return IS_ERROR; + } + } + + function tryCallOne(fn, a) { + try { + return fn(a); + } catch (e) { + LAST_ERROR = e; + return IS_ERROR; + } + } + function tryCallTwo(fn, a, b) { + try { + fn(a, b); + } catch (e) { + LAST_ERROR = e; + return IS_ERROR; + } + } + + function safeThen(that, onFulfilled, onRejected) { + return new that.constructor(function (resolve, reject) { + var res = new tb.Promise(tb.nop); + res.then(resolve, reject); + handle(that, new Handler(onFulfilled, onRejected, res)); + }); + } + + function handle(that, deferred) { + while (that._state === 3) { + that = that._value; + } + if (Promise._onHandle) { + Promise._onHandle(that); + } + if (that._state === 0) { + if (that._deferredState === 0) { + that._deferredState = 1; + that._deferreds = deferred; + return; + } + if (that._deferredState === 1) { + that._deferredState = 2; + that._deferreds = [that._deferreds, deferred]; + return; + } + that._deferreds.push(deferred); + return; + } + handleResolved(that, deferred); + } + + function handleResolved(that, deferred) { + setTimeout( function() { + var cb = that._state === 1 ? deferred.onFulfilled : deferred.onRejected; + if (cb === null) { + if (that._state === 1) { + resolve(deferred.promise, that._value); + } else { + reject(deferred.promise, that._value); + } + return; + } + var ret = tryCallOne(cb, that._value); + if (ret === IS_ERROR) { + reject(deferred.promise, LAST_ERROR); + } else { + resolve(deferred.promise, ret); + } + }, 0); + } + + function resolve(that, newValue) { + // Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure + if (newValue === that) { + return reject( + that, + new TypeError('A promise cannot be resolved with itself.') + ); + } + if ( + newValue && + (typeof newValue === 'object' || typeof newValue === 'function') + ) { + var then = getThen(newValue); + if (then === IS_ERROR) { + return reject(that, LAST_ERROR); + } + if ( + then === that.then && + newValue instanceof Promise + ) { + that._state = 3; + that._value = newValue; + finale(that); + return; + } else if (typeof then === 'function') { + doResolve(then.bind(newValue), that); + return; + } + } + that._state = 1; + that._value = newValue; + finale(that); + } + + function reject(that, newValue) { + that._state = 2; + that._value = newValue; + if (Promise._onReject) { + Promise._onReject(that, newValue); + } + finale(that); + } + function finale(that) { + if (that._deferredState === 1) { + handle(that, that._deferreds); + that._deferreds = null; + } + if (that._deferredState === 2) { + for (var i = 0; i < that._deferreds.length; i++) { + handle(that, that._deferreds[i]); + } + that._deferreds = null; + } + } + + function Handler(onFulfilled, onRejected, promise){ + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.promise = promise; + } + + /** + * execute promise function + */ + function doResolve(fn, promise) { + var done = false; + var res = tryCallTwo(fn, function (value) { + if (done) { + return; + } + done = true; + resolve(promise, value); + }, function (reason) { + if (done) { + return; + } + done = true; + reject(promise, reason); + }); + if (!done && res === IS_ERROR) { + done = true; + reject(promise, LAST_ERROR); + } + } + +})(); + +/** + @memberof tb + @static + @class tb.Require + @constructor + + @param {(string|string[])} pRequiredFiles string or string array containing required files + + @return {object} Promise/A+ compliant promise object + + tb.Require class ( uses tb.require function and returns the promise returned by it ) + + - add into prototype of your constructor + - instance will get an 'init' event when all files have loaded. + + @example + + tb.namespace( 'app.GrandParent' ).set( + (function(){ + + // Constructor + function GrandParent(){ + var that = this; + + that.handlers = { + init + }; + + } + + // Prototype + GrandParent.prototype = { + + namespace: 'app.GrandParent', + + 'tb.Require': [ + '/app/GrandParent.css' + ] + + }; + + return GrandParent; + + // Private Methods + + function init(){ + // will be called when requirement loading is finished ( both success and error ) + } + + })() + ); + */ +tb.Require = function ( pFiles ) { + return tb.require( pFiles ); +}; + +tb.Require.prototype = {}; + + +/** + @memberof tb + @static + @method tb.require + + @param {(string|string[])} pFiles array of filenames + @param {function} [pCallback] optional callback after all loading is done + + @return {object} - Promise/A+ compliant promise object + + @example + + // in your code ... + tb.require([ + '/app/styles.css', // .css will be inserted into head + '/app/someJavascript.js', // .js will be inserted into head + `; + } + + init(){ + + let that = this; // ...minification + + $(that.target) + .append( $(that.template.trim()) ) + .clean(); + } + +}; + +app.Content = class Content extends Tb{ + + constructor(){ + super(); + + let that = this; + + that.handlers = { + init: that.init + }; + + //store + that.store = { + filter: 'all', + data: [] + }; + + } + + // omitted if autonomous custom element + get namespace(){ + return 'app.Content'; + } + + // content template + get contentTemplate(){ return ` + + + + `; + } + + // list item template + get itemTemplate(){ return ` +
  • + + + +
  • `; + } + + // methods + init(){ + + let that = this; + + // render template + $(that.target) + .append($(that.contentTemplate)) + .clean() + .hide(); + + // toggle all items + $( '#toggle-all', that.target ) + .on( + 'click', + function( e ){ + that.toggleAllCompleted(); + e.stopPropagation(); + } + ); + + // clear completed items + $( 'button.clear-completed', that.target ) + .on( + 'click', + function( e ){ + that.clearCompleted(); + e.stopPropagation(); + } + ); + + // toggle css class for footer buttons + $('footer a', that.target) + .on( + 'click', + function(e){ + + $('footer a', that.target) + .forEach(function(pNode){ + if ( pNode !== e.target ){ + $( pNode ).removeClass('selected'); + } else { + $( pNode ).addClass('selected', true); + } + }); + + that.filterList( e.target ); + + e.preventDefault(); + e.stopPropagation(); + } + ); + + // render when store changes + that.store.observe( that.renderList.bind(that) ); + + // save to localStorage when store changes + that.store.observe( function(pValue){ + try { + localStorage.setItem( 'todos-twobirds-es6', JSON.stringify( pValue ) ); + } catch (e){} + }); + + // get data from localStorage + try { + let data = JSON.parse( localStorage.getItem( 'todos-twobirds-es6' ) ); + if ( data ){ + that.store = data; + } + } catch (e){} + + } + + renderList(){ + + let that = this, + ul = $('ul', that.target)[0]; + + $(ul).empty(); + + $(that.target).hide(); + + that.store + .data + .filter(function(pItem){ + if ( + that.store.filter === 'all' + || that.store.filter === 'active' && !pItem.completed + || that.store.filter === 'completed' && pItem.completed + ){ + return pItem; + } + }) + .forEach(function(pItem){ + + let li = $( tb.parse( that.itemTemplate.trim(), pItem ) ); + + // set completed style + if ( pItem.completed ){ + $( li[0] ) + .addClass('completed'); + + } + + // destroy button + $( 'button', li[0] ) + .on( + 'click', + function( e ){ + that.removeItem( pItem.id ); + } + ); + + // doubleclick -> inline edit + $( li[0] ) + .on( + 'dblclick', + function( e ){ + that.editItem( pItem.id, li[0] ); + e.stopPropagation(); + } + ); + + // completed checkbox + $( 'input', li[0] ) + .on( + 'click', + function( e ){ + that.changeCompleted( pItem.id, e.target ); + } + ); + + if ( pItem.completed ){ + li.addClass('completed'); + } + + $(ul).append(li); + + $(that.target).show(); + }); + + $(ul).clean(); + + that.count(); + + $('a.a-'+that.store.filter).trigger('click'); + + // we have records, but none are shown + if ( that.store.data.length > 0 && $(ul).children().length === 0 ){ + $('a.a-all').trigger('click'); + } + } + + filterList( pTarget ){ + + let that = this, + type = pTarget.innerText, + store = tb.extend( {}, that.store ), + ul = $('ul', that.target )[0]; + + if ( that.store.filter === type.toLowerCase() ){ + return; + } + + switch ( type ){ + + case 'Active': + store.filter = 'active'; + that.store = store; + break; + case 'Completed': + store.filter = 'completed'; + that.store = store; + break; + default: // ='All' + store.filter = 'all'; + that.store = store; + break; + } + + + } + + addItem(pItemText){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + data.push({ + id: tb.getId(), + completed: '', + title: pItemText + }); + + store.data = data; + + that.store = store; + + that.filterList( $('.filters a.selected', that.target)[0] ); + + that.count(); + + } + + editItem( pItemText, pLi ){ + + let that = this, + text = pLi.innerText; + + $( pLi ) + .addClass('editing') + .off('dblclick'); + + $('label,button', pLi).addClass('view'); + + let input = $('') + .val(text) + .on( + 'keyup', + function( e ){ + switch (e.key) { + case 'Enter': + if ( this.value.trim() !== '' ){ + that.saveEdit( this.value.trim(), pLi ); + } + break; + case 'Escape': + that.cancelEdit( pLi ); + break; + } + } + ) + .on( + 'blur', + function( e ){ + that.saveEdit( this.value, pLi ); + } + ) + .on( + 'dblclick', + function( e ){ + e.stopPropagation(); + } + ) + .appendTo(pLi) + [0]; // returns DOM element + + input.focus(); + } + + cancelEdit( pLi ){ + + let that = this; + + $( 'input', pLi )[1].remove(); + + $( pLi ).removeClass('editing'); + + $('label,button', pLi).removeClass('view'); + + } + + saveEdit( pText, pLi ){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + const todos = data.map( pItem => { + return $(pLi).attr('data-id') === pItem.id ? tb.extend( pItem, { text: pText } ) : pItem; + }); + + store.data = todos; + + that.store = store; // implicit: re-render + + } + + removeItem(pItemId){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + const todos = data.filter(item => { + return pItemId === item.id ? false : true; + }); + + store.data = todos; + + that.store = store; + + that.filterList( $('.filters a.selected', that.target)[0] ); + + that.count(); + + } + + changeCompleted(pItemId, pTarget){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + const todos = data.map(item => { + if ( pItemId === item.id ){ + item.completed = pTarget.checked ? 'checked' : ''; + if ( item.completed ){ + $( pTarget ) + .parent() + .addClass('completed'); + } else { + $( pTarget ) + .parent() + .removeClass('completed'); + + } + } + return item; + }); + + store.data = todos; + + that.store = store; + + that.count(); + + } + + toggleAllCompleted(pItemId, pTarget){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data, + checked = !!that.count() ? 'checked' : ''; + + const todos = data.map( pItem => { + pItem.completed = checked; + return pItem; + }); + + store.data = todos; + + that.store = store; + + that.count(); + + // click 'All' + $( '.filters a', that.target )[0].click(); + + } + + clearCompleted(){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + store.data = data.filter( item => !item.completed ? true : false ); + + that.store = store; + + that.count(); + + // click 'All' + $( '.filters a', that.target )[0].click(); + + } + + count(){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data, + count = 0; + + data.forEach( pData => !!pData.completed ? count : count++ ); + + $('.todo-count') + .html( count + ' item' + (count !== 1 ? 's ' : ' ') + 'left' ); + + if ( count === 0 ){ + $('#toggle-all').removeAttr('checked'); + } else { + $('#toggle-all').attr('checked','checked'); + } + + if ( count === data.length ){ + $('button.clear-completed').hide(); + } else { + $('button.clear-completed').show(); + } + + return count; + } + +}; + +/* +Autonomous Custom Element +*/ +(function(){ // IIFE hiding ACE class + + class Content extends HTMLElement{ + + constructor(){ + super(); + } + + connectedCallback(){ + new tb( + app.Content, + {}, + this + ); + } + + } + + customElements.define('app-content', Content); + +})(); + +app.Footer = class Footer extends Tb{ + + constructor(){ + super(); + + let that = this; + + that.handlers = { + init: that.init + }; + + } + + get template(){ return ` +

    Double-click to edit a todo

    +

    Written by Frank Thuerigen

    +

    Part of TodoMVC

    `; + } + + // omitted if autonomous custom element + get namespace(){ + return 'app.Footer'; + } + + // methods + init(){ + + let that = this; + + $(that.target) + .append( $(that.template.trim()) ) + .clean(); + + } + +}; + +/* +Autonomous Custom Element +*/ +(function(){ // IIFE hiding ACE class + + class Footer extends HTMLElement{ + + constructor(){ + super(); + } + + connectedCallback(){ + new tb( + app.Footer, + {}, + this + ); + } + + } + + customElements.define('app-footer', Footer); + +})(); + +app.Header = class Header extends Tb{ + + constructor(){ + super(); + + let that = this; + + that.handlers = { + init: that.init + }; + + } + + get template(){ return ` +

    todos

    + `; + } + + // omitted if autonomous custom element + get namespace(){ + return 'app.Header'; + } + + // methods + init(){ + + let that = this; + + $(that.target) + .append( $(that.template.trim()) ) + .clean(); + + $('input', that.target) + .on( + 'keyup', + function( e ){ + switch (e.key) { + case 'Enter': + + let input = $('input', that.target); + + tb('app-content')[0] + .addItem(input.val()); + + input.val(''); + + break; + + case 'Escape': + + $('input', that.target).val(''); + + break; + + } + } + ); + + } + +}; + +/* +Autonomous Custom Element +*/ +(function(){ // IIFE hiding ACE class + + class Header extends HTMLElement{ + + constructor(){ + super(); + } + + connectedCallback(){ + new tb( + app.Header, + {}, + this + ); + } + + } + + customElements.define('app-header', Header); + +})(); \ No newline at end of file diff --git a/examples/twobirds-es6/gruntfile.js b/examples/twobirds-es6/gruntfile.js new file mode 100644 index 0000000000..3740191e33 --- /dev/null +++ b/examples/twobirds-es6/gruntfile.js @@ -0,0 +1,120 @@ +module.exports = function(grunt) { + grunt.initConfig({ + + pkg: grunt.file.readJSON('package.json'), + + clean: { + clean: [ + "dist" + ] + }, + + copy: { + main: { + files: [ + { + expand: true, + cwd: 'src', + src: 'bundle.js', + dest: 'dist' + } + ] + } + }, + + concat: { + options: { + separator: '\n\n', + //stripBanners: true, + banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %> */\n\n' + }, + dist: { + files: { + 'src/bundle.js': [ + 'node_modules/twobirds-core/dist/tb/tb.js', + 'src/src/app.js', + 'src/src/app/*.js' + ] + }, + nonull: true + } + }, + + uglify: { + options: { + }, + my_target: { + options: { + mangle: true + }, + files: [ + { + 'src/bundle-min.js': [ + 'src/bundle.js' + ] + } + ] + } + }, + + jshint: { + options: { + esversion: 6, + force: true, + curly: true, + eqeqeq: true, + immed: true, + latedef: false, + newcap: false, + noarg: false, + sub: true, + undef: true, + boss: true, + debug: true, + eqnull: true, + node: true, + laxbreak: true, + laxcomma: true, + globals: { + exports: true, + module: false, + tb: true, + Tb: true, + "window": false, + "document": false, + "HTMLCollection": false, + "HTMLElement": false, + "NodeList": false, + "XMLHttpRequest": false, + "ActiveXObject": false, + "localStorage": false, + "customElements": false + } + }, + all: [ + 'src/bundle.js' + ] + } + + }); + + grunt.loadNpmTasks('grunt-contrib-clean'); + grunt.loadNpmTasks('grunt-contrib-copy'); + grunt.loadNpmTasks('grunt-contrib-uglify-es'); + grunt.loadNpmTasks('grunt-contrib-compress'); + grunt.loadNpmTasks('grunt-contrib-watch'); + grunt.loadNpmTasks('grunt-contrib-concat'); + grunt.loadNpmTasks('grunt-contrib-jshint'); + + // Default task(s). + grunt.registerTask( + 'default', [ + 'clean', + 'concat', + 'jshint', + 'uglify', + 'copy:main' + ] + ); + +}; diff --git a/examples/twobirds-es6/index.html b/examples/twobirds-es6/index.html new file mode 100644 index 0000000000..94838f60a9 --- /dev/null +++ b/examples/twobirds-es6/index.html @@ -0,0 +1,11 @@ + + + + + twoBirds ES6 • TodoMVC + + + + + + diff --git a/examples/twobirds-es6/package-lock.json b/examples/twobirds-es6/package-lock.json new file mode 100644 index 0000000000..4e7e1a5ca7 --- /dev/null +++ b/examples/twobirds-es6/package-lock.json @@ -0,0 +1,20 @@ +{ + "name": "todoMVC twobirds ES6", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "todomvc-app-css": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/todomvc-app-css/-/todomvc-app-css-2.1.2.tgz", + "integrity": "sha512-WgXLWY4snfC7yBkpzFb6xRmUbB06NGuji6njCByte0byW2DUpmyhh32o4sCQ8HX/pTwm71huKQlFiKYxR/2iVQ==", + "dev": true + }, + "todomvc-common": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/todomvc-common/-/todomvc-common-1.0.5.tgz", + "integrity": "sha512-D8kEJmxVMQIWwztEdH+WeiAfXRbbSCpgXq4NkYi+gduJ2tr8CNq7sYLfJvjpQ10KD9QxJwig57rvMbV2QAESwQ==", + "dev": true + } + } +} diff --git a/examples/twobirds-es6/package.json b/examples/twobirds-es6/package.json new file mode 100644 index 0000000000..eda0eb57e9 --- /dev/null +++ b/examples/twobirds-es6/package.json @@ -0,0 +1,25 @@ +{ + "name": "todoMVC twobirds ES6", + "version": "1.0.0", + "private": true, + "scripts": { + "compile": "grunt", + "prepare": "npm run compile" + }, + "devDependencies": { + "grunt": "^1.0.1", + "grunt-cli": "^1.2.0", + "grunt-contrib-clean": "^1.0.0", + "grunt-contrib-compress": "^1.3.0", + "grunt-contrib-concat": "^1.0.1", + "grunt-contrib-copy": "^1.0.0", + "grunt-contrib-jshint": "^1.1.0", + "grunt-contrib-uglify-es": "git://github.com/gruntjs/grunt-contrib-uglify.git#harmony", + "grunt-contrib-watch": "^1.0.0", + "todomvc-app-css": "^2.1.2", + "todomvc-common": "^1.0.5" + }, + "dependencies": { + "twobirds-core": "^8.1.14" + } +} diff --git a/examples/twobirds-es6/src/bundle-min.js b/examples/twobirds-es6/src/bundle-min.js new file mode 100644 index 0000000000..1062bd6236 --- /dev/null +++ b/examples/twobirds-es6/src/bundle-min.js @@ -0,0 +1 @@ +this.Element&&function(t){t.matches=t.matches||t.matchesSelector||t.webkitMatchesSelector||t.msMatchesSelector||function(t){for(var e=(this.parentNode||this.document).querySelectorAll(t),n=-1;e[++n]&&e[n]!==this;);return!!e[n]}}(Element.prototype),this.Element&&function(t){t.closest=t.closest||function(t){for(var e=this;e.matches&&!e.matches(t);)e=e.parentNode;return e.matches?e:null}}(Element.prototype),tb=function(){var t;function e(t,e){var n=this;if(n.length=0,!t||t instanceof r.Selector)return n;if(t instanceof r)return[].push.call(n,t),n;switch(typeof t){case"string":r.dom(t+"[data-tb]",e||window).forEach(function(t){t.tb&&Object.keys(t.tb).forEach(function(e){[].push.call(n,t.tb[e])})});break;case"object":if(t instanceof r)return[].push.call(n,t),n;t instanceof RegExp?r.dom("[data-tb]",e||window).forEach(function(e){Object.keys(e.tb).forEach(function(o){var a=e.tb[o];a instanceof r&&a.namespace&&a.namespace.match(t)&&[].push.call(n,a)})}):t.nodeType&&t.tb?Object.keys(t.tb).forEach(function(e){[].push.call(n,t.tb[e])}):(t.constructor===Array||t.length&&t[0]&&!(t instanceof Array))&&[].forEach.call(t,function(t){var e=r(t);[].forEach.call(e,function(t){-1===[].indexOf.call(n,t)&&[].push.call(n,t)})});break;case"function":r.dom("[data-tb]",e||window).map(function(e){Object.keys(e.tb).forEach(function(o){var a=e.tb[o];a&&a instanceof r&&a instanceof t&&[].push.call(n,a)})})}return n}function n(){}function r(){if(!(this instanceof r))return new e(arguments[0]?arguments[0]:void 0,arguments[1]?arguments[1]:void 0);var t,o,a=Array.from(arguments),i="string"==typeof a[0],c=(i&&a[0].substr(0,1),i?"/"+a[0].replace(/\./g,"/").replace(/^\//,"")+".js":""),s=i?r.namespace(a[0].replace(/^\//),"").get():a[0];if(i&&!s)return o=new r(n,a[1]||{},a[2]||!1),r.require(c).then(function(t){return function(){var e=new r(t[0],t[1]||{},t[2]||!1);if(o){for(var n in o)-1===["handlers","target"].indexOf(n)&&o.hasOwnProperty(n)&&(e[n]=o[n]);!function(t,e){for(var n in t.handlers){e.handlers[n]||(e.handlers[n]=[]);for(var r=0,o=t.handlers[n].length;r2){for(;n.length>1;)n[0]=r.parse(n[0],n[1]),n.splice(1,1);return n[0]}if("string"==typeof t){var o=t.match(/\{[^\{\}]*\}/g);o&&o.forEach(function(n){var o=n.substr(1,n.length-2),a=r.namespace(o,e).get();void 0!==a&&(t=t.replace(n,a))})}else if(t.constructor)switch(t.constructor){case Object:Object.keys(t).forEach(function(n){t.hasOwnProperty(n)&&(t[n]=r.parse(t[n],e))});break;case Array:t.forEach(function(n,o){t[o]=r.parse(t[o],e)})}return t}console.error("no arguments give to parse")},r.debounce=function(t,e){var n;return function(){var r=this,o=arguments;clearTimeout(n),n=setTimeout(function(){t.apply(r,o)},e)}},r.store=function(){function t(t){var e=this,n=Symbol("observable"),o=Symbol("onChange"),a=t||{};e[n]=r.observable(!1),e[o]=r.debounce(function(){e[n](r.extend({},e))},0),r.extend(e,a)}function e(e,n,o){var a=new t(o);return Object.defineProperty(e,n,{enumerable:!0,writeable:!0,get:function(){return a},set:function(t){for(var e in a)delete a[e];return r.extend(a,t),a}}),e[n]}return t.methods={observe:function(t,e){this[Object.getOwnPropertySymbols(this)[0]].observe(t,e)},bind:function(t){var e=this;!function t(n){if(n.nodeType&&3===n.nodeType){var o=n.nodeValue.match(/\{[^\{\}]*\}/g);if(o){var a=(i=n.nodeValue,function(t){var e,c=!1;o.forEach(function(e){a.values[e]!==t[e]&&(a.values[e]=t[e],c=!0)}),c&&(e=i,n.nodeValue=r.parse(e,a.values))});a.values={},(o=Array.from(o).map(t=>t.substr(1,t.length-2))).forEach(function(t){a.values[t]=""}),e[Object.getOwnPropertySymbols(e)[0]].observe(a)}}var i;n.nodeType&&1===n.nodeType&&(Array.from(n.attributes).forEach(function(t){var o,a=t.value.match(/\{[^\{\}]*\}/g);if(a){var i=(o=t.value,function(e){var c,s=!1;a.forEach(function(t){i.values[t]!==e[t]&&(i.values[t]=e[t],s=!0)}),s&&(c=o,r.dom(n).attr(t.nodeName,r.parse(c,i.values)))});i.values={},(a=Array.from(a).map(t=>t.substr(1,t.length-2))).forEach(function(t){i.values[t]=""}),e[Object.getOwnPropertySymbols(e)[0]].observe(i)}}),Array.from(n.childNodes).forEach(function(e){t(e)}),e[Object.getOwnPropertySymbols(e)[0]].notify())}(t)}},t.prototype=new Proxy(t.methods,{get:function(e,n,o){if(t.methods[n])return t.methods[n];if(n in o==!1&&n in e==!1){var a=new r.Store;Object.defineProperty(o,n,{enumerable:!0,get:function(){return a},set:function(e){if(e&&"object"==typeof e&&e.constructor&&e.constructor===Object)if(a instanceof t){for(var n in a)delete a[n];r.extend(a,e)}else a=new t(e);else a=e;return setTimeout(function(){Object.getOwnPropertySymbols(o)[1]&&o[Object.getOwnPropertySymbols(o)[1]]()},0),a}})}return o[n]},set:function(e,n,o,a){var i=Array.from(arguments);if("object"==typeof o&&o.constructor===Object&&o.constructor.prototype===Object.prototype)if(a[n]instanceof t){for(var c in a[n])delete a[n][c];r.extend(t,o)}else i[0]=a,i[2]=new t(o);return setTimeout(function(){Object.getOwnPropertySymbols(a)[1]&&a[Object.getOwnPropertySymbols(a)[1]]()},0),Reflect.set(...i)}}),r.Store=t,e.Store=t,e}(),r.observable=function(t){var e=t,n=!0,o=function(t,a){function i(){if(n)return o.lastChanged=(new Date).getTime(),o.notify()}if(void 0===t)return e;if(e.constructor===Object)if("string"==typeof t){if(void 0===a)return r.namespace(t,e).get();t.indexOf(".")>-1?r.namespace(t,e).set(a):e[t]=a,i()}else"object"==typeof t&&void 0===a?(e=t,i()):console.warn("tb.observable() set value: parameter 1 should be a string or object if observed data is an object!");else{if(void 0===t)return e;e=t,i()}return o};return o.lastChanged=(new Date).getTime(),o.notifiers=[],o.notify=function(){return o.notifiers.forEach(function(t,n){"function"==typeof t?(t(e),t.once&&o.notifiers.splice(n,1)):o.notifiers.splice(n,1)}),o},o.enableNotify=function(t){return n=!1!==t,o},o.observe=function(t,e){return"function"==typeof t&&(t.once=e||!1,o.notifiers.push(t)),o},o},t=r,r.Selector=e,r.methods={trigger:function(t,o,a){var i,c=this;if(!r.stop()){if((i=t instanceof r.Event?t:new r.Event(t,o,a)).__stopped__||i.__immediateStopped__)return c;if(c instanceof e&&c.length)[].forEach.call(c,function(t){t&&t instanceof r&&!i.__immediateStopped__&&t.trigger(i)});else if(c instanceof r){if(c instanceof n&&"init"!==i.name)return c.one("init",function(){this.trigger(i)}),c;if(c instanceof r&&c.handlers&&c.handlers[i.name]&&i.bubble.indexOf("l")>-1&&(c.handlers[i.name]=c.handlers[i.name].reduce(function(t,e){if(i.bubble.indexOf("l")>-1&&e){try{i.__immediateStopped__?t.push(e):e.apply(c,[i])}catch(t){console.error(t)}e.once||i.__immediateStopped__||t.push(e)}return t},[]),c.handlers[i.name].length||delete c.handlers[i.name]),i.__stopped__)return c;setTimeout(function(){i.bubble.indexOf("u")>-1&&c.parent().trigger(new r.Event(i.name,i.data,"lu")),i.bubble.indexOf("d")>-1&&[].forEach.call(c.children(),function(t){t.trigger(new r.Event(i.name,i.data,"ld"))})},0)}return c}},on:function(t,n,a){var i,c=this;return c instanceof e?o(c,"on",Array.from(arguments)):c instanceof r&&(i=-1-1;)i.handlers[t].splice(a,1),a=i.handlers[t].indexOf(n),0===i.handlers[t].length&&(i.handlers[t]=null,delete i.handlers[t]);else i.handlers[t]=null,delete i.handlers[t]}),i)},parents:function(t){var n=r();return this instanceof e?n=o(this,"parents",arguments):this instanceof r&&this.target&&(this.target.nodeType?r.dom(this.target).parents("[data-tb]").not("html").forEach(function(t){t&&t.tb&&Object.keys(t.tb).forEach(function(e){[].push.call(n,t.tb[e])})}):this.target instanceof r&&([].push.call(n,this.target),this.target.parent()[0]&&[].push.call(n,this.target.parent()[0]))),t?n.filter(t):n},parent:function(t){var n=r();if(this instanceof e)n=o(this,"parent",arguments);else if(this instanceof r&&this.target)if(this.target.nodeType){var a=this.parents().toArray(),i=!!a[0]&&a[0];if(!i)return n;Object.keys(i.target.tb||{}).forEach(function(t){[].push.call(n,i.target.tb[t])})}else this.target instanceof r&&[].push.call(n,this.target);return t?n.filter(t):n},descendants:function(t,n){var a=this,i=r();return a instanceof e?i=o(this,"descendants",arguments):a instanceof r&&a.target.nodeType&&!n?r.dom("[data-tb]",a.target).forEach(function(t){Object.keys(t.tb).forEach(function(e){[].push.call(i,t.tb[e])})}):a instanceof r&&n&&Object.keys(a).forEach(function(t){if("target"!==t&&a[t]instanceof r){[].push.call(i,a[t]);for(var e=r.dom().toArray.call(a[t].descendants("",!0)),n=0,o=e.length;na+1&&[].push.call(i,n[a+1])),t?i.filter(t):i},prev:function(t){var n,a,i=r();return this instanceof e?i=o(this,"prev",arguments):(n=this.parent().children(),(a=[].indexOf.call(n,this))&&[].push.call(i,n[a-1])),t?i.filter(t):i},first:function(t){var n,a=r();return this instanceof e?a=o(this,"first",arguments):(n=this.parent().children(),[].push.call(a,n[0])),t?a.filter(t):a},last:function(t){var n,a=r();return this instanceof e?a=o(this,"last",arguments):(n=this.parent().children(),[].push.call(a,n[n.length-1])),t?a.filter(t):a},toArray:function(){return Array.from(this)},filter:function(t){var n=r(t),o=r();return t?(this instanceof e?[].forEach.call(this,function(t){-1<[].indexOf.call(n,t)&&[].push.call(o,t)}):this instanceof r&&-1<[].indexOf.call(n,this)&&[].push.call(o,this),o):this},not:function(t){var e=Array.from(r(t)),n=r();return[].forEach.call(this,function(t){-1===e.indexOf(t)&&[].push.call(n,t)}),n},add:function(t){var e=r(t).toArray();return r(this.toArray().concat(e))},flush:function(){if(this instanceof e)for(;this.length;)this.pop();return this}};var i,c=new Proxy(r.Store.methods,{get:function(t,e,n){var o=Array.from(arguments);if(!Reflect.get(...o)){var a=new r.Store;Object.defineProperty(n,e,{enumerable:!0,get:function(){return a},set:function(t){if("object"==typeof t&&t.__proto__===Object.prototype)if(a instanceof r.Store){for(var e in a)delete a[e];r.extend(a,t)}else a=new r.Store(t);else a=t;return setTimeout(function(){Object.getOwnPropertySymbols(n)[1]&&n[Object.getOwnPropertySymbols(n)[1]]()},0),a}})}return Reflect.get(...o)},set:function(t,e,n,o){var a,i=Array.from(arguments);if("handlers"!==e&&"object"==typeof n)if(o[e]instanceof r.Store&&n.__proto__===Object.prototype){for(var c in o[e])delete o[e][c];r.extend(o[e],n)}else i[0]=o;return a=Reflect.set(...i),setTimeout(function(){Object.getOwnPropertySymbols(o)[1]&&o[Object.getOwnPropertySymbols(o)[1]]()},0),a}});return Object.setPrototypeOf(r.methods,c),r.prototype=r.methods,r.status={loadCount:r.observable(0)},r.idle=function(t){var e=function(){if(0===r.status.loadCount()){var n=function(){0===r.status.loadCount()?r.status.loadCount.lastChanged===n.lastChanged?"function"==typeof t&&t():(n.lastChanged=r.status.loadCount.lastChanged,setTimeout(n,100)):r.status.loadCount.observe(e,!0)};n.lastChanged=0,setTimeout(n,100)}else r.status.loadCount.observe(e,!0)};r.status.loadCount.observe(e,!0)},e.prototype={concat:a("concat"),every:a("every"),forEach:a("forEach"),indexOf:a("indexOf"),map:a("map"),pop:a("pop"),push:a("push"),reduce:a("reduce"),reduceRight:a("reduceRight"),reverse:a("reverse"),shift:a("shift"),slice:a("slice"),some:a("some"),splice:a("splice"),unshift:a("unshift")},r.extend(e.prototype,r.methods),e.prototype.unique=function(){var t=[];return[].forEach.call(this,function(e){-1===t.indexOf(e)&&t.push(e)}),r.dom(t)},r.plugin=(i=t.prototype,function(t,e){var n=i;n[t]?console.warn("tb.plugin(): Cannot overload existing tb method (",t,")"):n[t]=e}),r}(),"undefined"!=typeof module?module.exports=tb:function(){function t(){tb.attach(document.head),tb.attach(document.body)}document.addEventListener?document.addEventListener("DOMContentLoaded",function(){document.removeEventListener("DOMContentLoaded",arguments.callee,!1),t()},!1):document.attachEvent&&document.attachEvent("onreadystatechange",function(){"complete"===document.readyState&&(document.detachEvent("onreadystatechange",arguments.callee),t())})}(),tb.Event=function(t,e,n){this.bubble=n||"l",this.data=e||{},this.name=t||"",this.__stopped__=this.__immediateStopped__=!1},tb.Event.prototype={stopPropagation:function(){return this.__stopped__=!0,this},stopImmediatePropagation:function(){return this.__stopped__=!0,this.__immediateStopped__=!0,this}},tb.debug=!1,"undefined"==typeof module&&(tb.dom=function(){var t,e,n=/\S+/g,r=tb.Selector;function o(t,e,n,r){t.detachEvent?t.detachEvent("on"+e,n,r):t.removeEventListener(e,n,r)}function a(t){var e=[][t];return-1<["push","unshift"].indexOf(t)?function(){return e.apply(this,arguments),this.unique()}:function(){var t=e.apply(this,arguments);return t instanceof Array&&t[0]&&t[0].nodeType?tb.dom(t).unique():t}}return(t=function(t,e){var n,o,a=this;if(!t)return a;if(t.nodeType)-1===[].indexOf.call(a,t)&&[].push.call(a,t);else{if(t.__tbSelector__)return t;if(t instanceof r&&t[0])[].forEach.call(t,function(t){t.target&&t.target.nodeType&&-1===[].indexOf.call(a,t.target)&&[].push.call(a,t.target)});else if(t instanceof Array||t.__tbSelector__||t instanceof HTMLCollection||t instanceof NodeList)[].forEach.call(t,function(t){tb.dom(t).forEach(function(t){-1===[].indexOf.call(a,t)&&[].push.call(a,t)})});else if("string"==typeof t){var i,c,s=(i=t,(c=document.createElement("template")).innerHTML=i,c.content.childNodes?c.content.childNodes:c.childNodes);if(1!==s.length||!s[0].nodeType||3!==s[0].nodeType)return tb.dom(s);n=e&&e.nodeType?e:document,t.split(",").forEach(function(t){(o=n.querySelectorAll(t.trim()))[0]&&[].forEach.call(o,function(t){-1===[].indexOf.call(a,t)&&[].push.call(a,t)})})}}}).arrayMethods={__tbSelector__:!0,length:0,concat:a("concat"),every:a("every"),forEach:a("forEach"),indexOf:a("indexOf"),map:a("map"),pop:a("pop"),push:a("push"),reduce:a("reduce"),reduceRight:a("reduceRight"),reverse:a("reverse"),shift:a("shift"),slice:a("slice"),some:a("some"),splice:a("splice"),unshift:a("unshift")},t.methods=function(){return{add:function(t){var e=this;return"string"!=typeof t&&t.length?[].forEach.call(t,function(t){tb.dom(t).toArray().forEach(function(t){-1===[].indexOf.call(e,t)&&[].push.call(e,t)})}):tb.dom(t).toArray().forEach(function(t){-1===[].indexOf.call(e,t)&&[].push.call(e,t)}),e.unique()},addClass:function(t){if(!t||"string"!=typeof t)return console.warn("method addClass: missing or wrong pClassNames"),this;var e=t.split(" ").filter(function(t){return!!t});return this.forEach(function(t){var n=(t.getAttribute("class")||"").split(" ").filter(function(t){return!!t});e.forEach(function(t){-1===n.indexOf(t)&&n.push(t)}),t.setAttribute("class",n.join(" "))}),this},append:function(t){var e;return this.forEach(function(n){e=tb.dom(t),[].forEach.call(e,function(t){t.nodeType&&n.appendChild(t)})}),this},appendTo:function(t){return(t=tb.dom(t))[0]&&(t=t[0],this.forEach(function(e){t.appendChild(e)})),this},attr:function(t,e){var n=this,r={};return"object"==typeof t?(Object.keys(t).forEach(function(e){n.forEach(function(n){tb.dom(n).attr(e,t[e])})}),n):arguments.length?void 0===e&&n.length>0?n[0].getAttribute(t):(n.toArray().forEach(function(n){n.setAttribute(t,e)}),n):([].forEach.call(n[0].attributes,function(t){r[t.name]=t.value}),r)},children:function(t){var e=tb.dom();return this.forEach(function(n){var r=void 0!==t&&tb.dom(t);[].forEach.call(n.children,function(t){-1===[].indexOf.call(e,t)&&(!r||-1<[].indexOf.call(r,t))&&e.push(t)})}),e},clean:function(){return this.forEach(function(t){var e=document.createTreeWalker(t,128);for(t.normalize();e.nextNode();)setTimeout(function(t){return function(){t.remove()}}(e.currentNode),0)}),this},descendants:function(t){var e,n=[],r=!!t&&tb.dom(t);return this.forEach(function(t){n=n.concat(tb.dom(t.querySelectorAll("*")).toArray())}),n=tb.dom(n).unique().toArray(),r&&(e=n.filter(function(t){return-1<[].indexOf.call(r,t)})),tb.dom(r?e:n)},empty:function(){return this.forEach(function(t){t.innerHTML=""}),this},filter:function(t){var e,n=tb.dom(t);return"undefined"===t?this:("string"==typeof t?e=[].filter.call(this,function(t){return-1-1},hide:function(){return this.forEach(function(t){var e=window.getComputedStyle(t).getPropertyValue("display");t.style.prevDisplay=e&&"none"!==e?e:"inline",t.style.display="none"}),this},html:function(t){return void 0===t?this[0]?this[0].innerHTML:"":("string"==typeof t&&this.forEach(function(e){e.innerHTML=t}),this)},insertBefore:function(t){var e=!!tb.dom(t)[0]&&tb.dom(t)[0];if(e)return this.forEach(function(n){n.nodeType&&e.parentElement.insertBefore(n.cloneNode(!0),t)}),this},insertAfter:function(t){var e=!!tb.dom(t)[0]&&tb.dom(t)[0],n=e.nextSibling||!1;if(e)return this.forEach(function(t){t.nodeType&&(n?e.parentElement.insertBefore(t.cloneNode(!0),n):e.parentElement.appendChild(t.cloneNode(!0)))}),this},last:function(){var t=tb.dom();return tb.dom.length&&t.push(this.pop()),t},next:function(){var t=tb.dom();return tb.dom.length&&this[0].nextSibling&&t.push(this[0].nextSibling),t},not:function(t){var e=this,n=void 0!==t&&document.querySelectorAll(t);return n?(n.forEach(function(t){var n=[].indexOf.call(e,t);n>-1&&[].splice.apply(e,[n,1])}),e):e},off:function(t,e,n){var r=t.indexOf(" ")>-1?t.split(" "):[t],a="boolean"==typeof n&&n;return this.forEach(function(t){t.nodeType&&(e?r.forEach(function(n){o(t,n,e,a)}):r.forEach(function(e){t["on"+e]=null,t.removeAttribute("on"+e)}))}),this},on:function(t,e,n){var r,a=this,i=t.indexOf(" ")>-1?t.split(" "):[t],c="boolean"==typeof n&&n;return e.once&&((r=function(t,e){return function(e){a.forEach(function(t){t.nodeType&&i.forEach(function(e){o(t,e,r,c)})}),t.apply(e,arguments)}}(e)).that=a,r.remove=function(){a.forEach(function(t){t.nodeType&&i.forEach(function(e){o(t,e,r,c)})})}),a.forEach(function(t){t.nodeType&&i.forEach(function(n){!function(t,e,n,r){t.attachEvent?t.attachEvent("on"+e,n,r):t.addEventListener(e,n,r)}(t,n,r||e,c)})}),r||a},one:function(t,e,n){return e.once=!0,this.on(t,e,n)},parent:function(t){var e=tb.dom(),n=void 0!==t&&tb.dom(t);return this.forEach(function(t){var r=t.parentNode;-1===[].indexOf.call(e,r)&&(!n||-1<[].indexOf.call(n,r))&&[].push.call(e,r)}),e},parents:function(t){var e,n=tb.dom(),r=void 0!==t&&tb.dom(t);return this.forEach(function(t){for(e=t.parentNode;e&&e.tagName&&"HTML"!==e.tagName;)-1===[].indexOf.call(n,e)&&(!r||-1<[].indexOf.call(r,e))&&n.push(e),e=e.parentNode}),n},previous:function(){var t=tb.dom();return tb.dom.length&&this[0].previousSibling&&t.push(this[0].previousSibling),t},remove:function(t){var e=this;return e.forEach(function(t,n){e[n]=t.parentNode.removeChild(t)}),e},removeAttr:function(t){var e,r,o=t&&t.match(n);return this.forEach(function(t){if(r=0,o&&t.nodeType&&1===t.nodeType)for(;e=o[r++];)t.removeAttribute(e)}),this},removeClass:function(t){var e=t.split(" ").filter(function(t){return!!t});return this.forEach(function(t){var n=(t.getAttribute("class")||"").split(" ").filter(function(t){return!!t});e.forEach(function(e){for(;n.indexOf(e)>-1;)n.splice(n.indexOf(e),1);n.length?tb.dom(t).attr("class",n.join(" ")):tb.dom(t).removeAttr("class")})}),this},show:function(){return this.forEach(function(t){t.style.display=t.style.prevDisplay?t.style.prevDisplay:"block"}),this},toArray:function(){return Array.from(this)},toggleClass:function(t){var e;return this.forEach(function(n){(e=tb.dom(n))[e.hasClass(t)?"removeClass":"addClass"](t)}),this},trigger:function(t,e,n,r){var o,a="boolean"!=typeof n||n,i="boolean"!=typeof r||r,c=t.split(" ");return this.forEach(function(t){t.nodeType&&c.forEach(function(n){"createEvent"in document?(o=document.createEvent("HTMLEvents"),tb.extend(o.data,e),o.initEvent(n,a,i),t.dispatchEvent(o)):(o=document.createEventObject(),tb.extend(o.data,e),o.eventType=n,t.fireEvent("on"+o.pThisEventName,o))})}),this},unique:function(){var t=[];return[].forEach.call(this,function(e){-1===t.indexOf(e)&&t.push(e)}),tb.dom(t)},val:function(t){var e,n="input select textarea".split(" "),r="button file image reset submit".split(" ");function o(t){return 1===t.nodeType&&n.indexOf(t.tagName.toLowerCase())>-1&&-1===r.indexOf(t.type)}var a={select:function(t){var e,n=this,r="select-multiple"===n.type;if(!arguments.length)return e=[],[].forEach.call(n.selectedOptions,function(t){if(t.selected&&!(t.disabled||t.parentNode.disabled&&"optgroup"===t.parentNode.nodeName)){var n=t.value;e.push(n)}}),r?e:e[0]?e[0]:"";t=t.constructor!==Array?[t]:t,t=r||t.constructor!==Array?t:[t[0]],[].forEach.call(n.options,function(e){var n,r=t.indexOf(e.value);r+1?(n=t[r],e.selected=!!n):e.selected=!1}),t.forEach(function(t){tb.dom('option[value="'+t+'"]',n).selected=!0})},default:function(t){var e;if("radio"===this.type){var n='[type="radio"][name="'+this.name+'"]',r=tb.dom(this).parents("form").descendants(n);return e="",r.forEach(function(n){var r;void 0!==t?(r=n.value===t,n.checked=!!r,e=n.checked?n.value:e):!0===n.checked&&(e=n.value)}),e}return"checkbox"===this.type?(void 0!==t?(this.checked=!!t,e=this.checked):(e=!1,!0===this.checked&&(e=!0)),e):arguments.length?(null==t&&(t=""),void(this.value=t)):"string"==typeof(e=this.value)?e:null==e?"":e}};return arguments.length?(this.forEach(function(n){o(n)&&(e=a[n.tagName.toLowerCase()]?a[n.tagName.toLowerCase()].call(n,t):a.default.call(n,t))}),this):(this.some(function(t){return!!o(t)&&(e=a[t.tagName.toLowerCase()]?a[t.tagName.toLowerCase()].call(t):a.default.call(t),!0)}),e)},values:function(t){var e,n=this,r=n[0]||void 0;if(!r)return n;if("object"!=typeof t||!r)return r.getValues||(r.getValues=tb.observable({}),tb.dom("input,select,textarea",r).on("keyup change select",tb.debounce(function(){r.getValues(tb.extend({},tb.dom(r).values()))},5))),r.values=r.values?r.values:tb.observable({}),a.prototype={bind:function(t,e){r.getValues.observe(function(){tb.extend(t,r.getValues()),setTimeout(function(){Object.getOwnPropertySymbols(t)[1]&&t[Object.getOwnPropertySymbols(t)[1]]()},0)},e),r.getValues.notify()},observe:function(t,e){r.values.observe(t,e)}},e=new a,Object.defineProperty(n,"values",{enumerable:!0,configurable:!0,set:function(t){r.values.enableNotify(!1),Object.keys(t).forEach(function(e){n.values[e]=t[e]}),r.values.enableNotify().notify()},get:function(t,n){return function(){return tb.dom("input[name],select[name],textarea[name]",t).forEach(function(t){var r=tb.dom(t).attr("name");e.hasOwnProperty(r)||Object.defineProperty(e,r,{enumerable:!0,get:function(){return tb.dom(t).val()},set:function(r){var o=tb.dom(t).val(r);return n(e),o}})}),t.values(e),e}}(r,r.values)}),n.values;var o=tb.dom(r).values();function a(){}Object.keys(t).forEach(function(e){o.hasOwnProperty(e)&&(o[e]=t[e])})}}}(),t.prototype=tb.extend(t.methods,t.arrayMethods),(e=function(e,n){return new t(e,n)}).innerProto=t.prototype,e}(),tb.dom.plugin=function(t,e){var n=tb.dom.innerProto;n[t]?console.warn("tb.dom.plugin(): Cannot overload existing tb method (",t,")"):n[t]=e}),tb.nop=function(){},tb.namespace=function(){function t(t,e){this.namespace=t,this.target=e,this.namespaceArray=t.indexOf(".")?t.split("."):[t],this.forceCreation=!1}return t.prototype={get:function(){return this.forceCreation=!1,this._walk(this.target?this.target:window,this.namespaceArray)},set:function(t){"function"==typeof t&&t.prototype!==Function.prototype&&(t.prototype.namespace=this.namespace);return this.value=t,this.forceCreation=!0,this._walk(this.target?this.target:window,this.namespaceArray)},_walk:function(t,e){!t[e[0]]&&this.forceCreation&&(t[e[0]]={});return e.length<2?(this.forceCreation&&void 0!==this.value&&(t[e[0]]=this.value),t.hasOwnProperty(e[0])?t[e[0]]:void 0):t.hasOwnProperty(e[0])?(t=t[e[0]],e.shift(),this._walk(t,e)):void 0}},function(e,n){return new t(e,n)}}(),tb.attach=function(t){var e=t||document.body,n=tb.dom(e.querySelectorAll("[data-tb]")).toArray();e.getAttribute("data-tb")&&(n=[e].concat(n)),n.forEach(function(t){t.getAttribute("data-tb").split(" ").forEach(function(e){t.tb=t.tb||{},t.tb[e]||new tb(e,null,t)})})},tb.getId=function(){return"id-"+(new Date).getTime()+"-"+Math.random().toString().replace(/\./,"")},tb.Promise=function(){"use strict";var t=null,e={};function n(t){if(t=t||tb.nop,"object"!=typeof this)throw new TypeError("Promises must be constructed via new");this._deferredState=0,this._state=0,this._value=null,this._deferreds=null,t!==tb.nop&&s(t,this)}return n._onHandle=null,n._onReject=null,n.prototype={then:function(t,e){if(!(this instanceof n))return function(t,e,n){return new t.constructor(function(o,a){var i=new tb.Promise(tb.nop);i.then(o,a),r(t,new c(e,n,i))})}(this,t,e);var o=new n(tb.nop);return r(this,new c(t,e,o)),o},catch:function(t){return this.then(null,t)},finally:function(t){var e=this;return this.then(function(r){return n.resolve(t(e._value)).then(function(){return e._value})},function(r){return n.resolve(t(e._value)).then(function(){throw e._value})})},done:function(t,e){(arguments.length?this.then.apply(this,arguments):this).then(null,function(t){setTimeout(function(){throw t},0)})}},n.resolve=function(t){var e=new tb.Promise(function(t,e){});return o(e,t),e},n.reject=function(t){var e=new tb.Promise(function(t,e){});return a(e,t),e},n.all=function(t){var e=t.length,r=tb.observable(e),i=new n,c=new Array(e);return t.forEach(function(t,e){t.then&&"function"==typeof t.then||(t=tb.Promise.resolve(t)),t.then(function(t){c[e]=t}).catch(function(t){0===i._state&&a(i,t._value)}).finally(function(t){r(r()-1)})}),r.observe(function(t){0===t&&(r=null,0===i._state&&o(i,c))}),i},n.race=function(t){var e=new tb.Promise;return t.forEach(function(t,r,i){t.constructor!==n&&(i[r]=n.resolve(t)),i[r].then(function(t){0===e._state&&o(e,t)}).catch(function(t){0===e._state&&a(e,t)})}),e},n;function r(r,i){for(;3===r._state;)r=r._value;if(n._onHandle&&n._onHandle(r),0===r._state)return 0===r._deferredState?(r._deferredState=1,void(r._deferreds=i)):1===r._deferredState?(r._deferredState=2,void(r._deferreds=[r._deferreds,i])):void r._deferreds.push(i);!function(n,r){setTimeout(function(){var i=1===n._state?r.onFulfilled:r.onRejected;if(null!==i){var c=function(n,r){try{return n(r)}catch(n){return t=n,e}}(i,n._value);c===e?a(r.promise,t):o(r.promise,c)}else 1===n._state?o(r.promise,n._value):a(r.promise,n._value)},0)}(r,i)}function o(r,o){if(o===r)return a(r,new TypeError("A promise cannot be resolved with itself."));if(o&&("object"==typeof o||"function"==typeof o)){var c=function(n){try{return n.then}catch(n){return t=n,e}}(o);if(c===e)return a(r,t);if(c===r.then&&o instanceof n)return r._state=3,r._value=o,void i(r);if("function"==typeof c)return void s(c.bind(o),r)}r._state=1,r._value=o,i(r)}function a(t,e){t._state=2,t._value=e,n._onReject&&n._onReject(t,e),i(t)}function i(t){if(1===t._deferredState&&(r(t,t._deferreds),t._deferreds=null),2===t._deferredState){for(var e=0;e=200&&o<400){c=a(t,r);try{e(c)}catch(t){tb.debug}}else c=a(t,tb.extend({},r)),n(c);i(t)}(t,e,o,c))}),n);return l}function a(t,e){var n={tId:t.identifier,status:t.connection.status,statusText:t.connection.statusText,responseHeaders:{},requestHeaders:e.headers,text:t.connection.responseText,xml:t.connection.responseXML,options:e};if(t.connection.getAllResponseHeaders().split("\r\n").forEach(function(t){var e=t.split(":")[0],r=t.substr(t.indexOf(":")+1);t&&(n.responseHeaders[e]=r)}),e.dataType&&"json"===e.dataType.toLowerCase())try{n.data=JSON.parse(t.connection.responseText)}catch(e){console.warn("expected JSON, could not parse: "+t.connection.responseText)}return n}function i(n){!function(n){tb.status.loadCount(tb.status.loadCount()-1),t.indexOf(n)&&(e--,t.splice(t.indexOf(n)),0===e&&"complete")}(n),n.connection&&(n.connection=null),n=null}return function(n){var c,s,l="tb"+tb.getId(),u=function(t){var e,n;if("undefined"!=typeof ActiveXObject)for(var o=0;o0?"&":"")+t+"="+n.params[t]})}if(!1===v&&(d+=(d.indexOf("?")<0?"?":"&")+"tbUid="+l),u){var O=new tb.Promise(function(t,e){var r,s,l;"GET"!==f&&"DELETE"!==f||""===h||(d=d+(d.indexOf("?")<0?"?":"&")+h),u.src=d,u.connection.open(f,d,E),!0===E&&(u.poll=o(u,t,0,e,n)),Object.keys(g).forEach(function(t){"Content-Type"!==t&&u.connection.setRequestHeader(t,g[t])}),y&&(u.timeoutTimer=window.setTimeout((s=u,l="function"==typeof(r=y).cb&&r.cb,function(){"function"==typeof l&&l(),s.connection.abort(),window.clearInterval(s.poll)}),y.ms)),u.abort=function(t){return function(){window.clearInterval(t.poll),t.connection&&t.connection.abort(),i(t)}}(u),("POST"===f||"PUT"===f)&&""!==h?(u.connection.setRequestHeader("Content-Type",c),u.connection.send(h)):u.connection.send(null),!1===E&&(tb.request.dec(),u.connection.status>=200&&u.connection.status<300?t(a(u,tb.extend({},n))):e(a(u,tb.extend({},n))))});return O.then(function(t){p(t)}).catch(function(t){b(t)}).finally(function(t){m(t)}),O}return!1}}()),tb.stop=function(t){var e=!1;return function(t){return e=t||e}}(),"undefined"==typeof module&&(tb.CRUD=function(t){var e=this;e.data=tb.observable({}),e.config={},tb.extend(e.config,{create:{url:"",method:"POST",success:function(t){e.data(t)}},read:{url:"",method:"GET",success:function(t){e.data(t)}},update:{url:"",method:"PUT",success:function(t){e.data(t)}},delete:{url:"",method:"DELETE",success:function(t){e.data(t)}}},t)},tb.CRUD.prototype=function(){return{create:function(t){var e=tb.extend({},this.config.create);t=t||{},e.url?tb.request(tb.extend(e,{url:t?tb.parse(this.config.create.url,t):this.config.create.url},{params:t})):console.error("no create url given!")},read:function(t){var e=tb.extend({},this.config.read);t=t||{},e.url?tb.request(tb.extend(e,{url:t?tb.parse(this.config.read.url,t):this.config.read.url},{params:t})):console.error("no read url given!")},update:function(t){var e=tb.extend({},this.config.update);t=t||{},e.url?tb.request(tb.extend(e,{url:t?tb.parse(this.config.update.url,t):this.config.update.url},{params:t})):console.error("no update url given!")},delete:function(t){var e=tb.extend({},this.config.delete);t=t||{},e.url?tb.request(tb.extend(e,{url:t?tb.parse(this.config.delete.url,t):this.config.delete.url},{params:t})):console.error("no delete url given!")}}}());class Tb extends tb{constructor(t,e){super(t,e);var n=Symbol("observable"),r=Symbol("onChange");this[n]=tb.observable(!1),this[r]=tb.debounce(function(){this[n](tb.extend({},this))},0)}}var app=new tb,$=tb.dom;app.Body=class extends Tb{constructor(){super();this.handlers={init:this.init},window.onhashchange=function(){let t=window.location.hash,e=t.split("/")[1]||t;console.log(e),$("a.a-"+e).trigger("click")}}get template(){return'\n\t\t
    \n\t\t\t\n\t\t\t\n\t\t
    \n\t\t\n\t\t + `; + } + + init(){ + + let that = this; // ...minification + + $(that.target) + .append( $(that.template.trim()) ) + .clean(); + } + +}; + +app.Content = class Content extends Tb{ + + constructor(){ + super(); + + let that = this; + + that.handlers = { + init: that.init + }; + + //store + that.store = { + filter: 'all', + data: [] + }; + + } + + // omitted if autonomous custom element + get namespace(){ + return 'app.Content'; + } + + // content template + get contentTemplate(){ return ` + + +
      + `; + } + + // list item template + get itemTemplate(){ return ` +
    • + + + +
    • `; + } + + // methods + init(){ + + let that = this; + + // render template + $(that.target) + .append($(that.contentTemplate)) + .clean() + .hide(); + + // toggle all items + $( '#toggle-all', that.target ) + .on( + 'click', + function( e ){ + that.toggleAllCompleted(); + e.stopPropagation(); + } + ); + + // clear completed items + $( 'button.clear-completed', that.target ) + .on( + 'click', + function( e ){ + that.clearCompleted(); + e.stopPropagation(); + } + ); + + // toggle css class for footer buttons + $('footer a', that.target) + .on( + 'click', + function(e){ + + $('footer a', that.target) + .forEach(function(pNode){ + if ( pNode !== e.target ){ + $( pNode ).removeClass('selected'); + } else { + $( pNode ).addClass('selected', true); + } + }); + + that.filterList( e.target ); + + e.preventDefault(); + e.stopPropagation(); + } + ); + + // render when store changes + that.store.observe( that.renderList.bind(that) ); + + // save to localStorage when store changes + that.store.observe( function(pValue){ + try { + localStorage.setItem( 'todos-twobirds-es6', JSON.stringify( pValue ) ); + } catch (e){} + }); + + // get data from localStorage + try { + let data = JSON.parse( localStorage.getItem( 'todos-twobirds-es6' ) ); + if ( data ){ + that.store = data; + } + } catch (e){} + + } + + renderList(){ + + let that = this, + ul = $('ul', that.target)[0]; + + $(ul).empty(); + + $(that.target).hide(); + + that.store + .data + .filter(function(pItem){ + if ( + that.store.filter === 'all' + || that.store.filter === 'active' && !pItem.completed + || that.store.filter === 'completed' && pItem.completed + ){ + return pItem; + } + }) + .forEach(function(pItem){ + + let li = $( tb.parse( that.itemTemplate.trim(), pItem ) ); + + // set completed style + if ( pItem.completed ){ + $( li[0] ) + .addClass('completed'); + + } + + // destroy button + $( 'button', li[0] ) + .on( + 'click', + function( e ){ + that.removeItem( pItem.id ); + } + ); + + // doubleclick -> inline edit + $( li[0] ) + .on( + 'dblclick', + function( e ){ + that.editItem( pItem.id, li[0] ); + e.stopPropagation(); + } + ); + + // completed checkbox + $( 'input', li[0] ) + .on( + 'click', + function( e ){ + that.changeCompleted( pItem.id, e.target ); + } + ); + + if ( pItem.completed ){ + li.addClass('completed'); + } + + $(ul).append(li); + + $(that.target).show(); + }); + + $(ul).clean(); + + that.count(); + + $('a.a-'+that.store.filter).trigger('click'); + + // we have records, but none are shown + if ( that.store.data.length > 0 && $(ul).children().length === 0 ){ + $('a.a-all').trigger('click'); + } + } + + filterList( pTarget ){ + + let that = this, + type = pTarget.innerText, + store = tb.extend( {}, that.store ), + ul = $('ul', that.target )[0]; + + if ( that.store.filter === type.toLowerCase() ){ + return; + } + + switch ( type ){ + + case 'Active': + store.filter = 'active'; + that.store = store; + break; + case 'Completed': + store.filter = 'completed'; + that.store = store; + break; + default: // ='All' + store.filter = 'all'; + that.store = store; + break; + } + + + } + + addItem(pItemText){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + data.push({ + id: tb.getId(), + completed: '', + title: pItemText + }); + + store.data = data; + + that.store = store; + + that.filterList( $('.filters a.selected', that.target)[0] ); + + that.count(); + + } + + editItem( pItemText, pLi ){ + + let that = this, + text = pLi.innerText; + + $( pLi ) + .addClass('editing') + .off('dblclick'); + + $('label,button', pLi).addClass('view'); + + let input = $('') + .val(text) + .on( + 'keyup', + function( e ){ + switch (e.key) { + case 'Enter': + if ( this.value.trim() !== '' ){ + that.saveEdit( this.value.trim(), pLi ); + } + break; + case 'Escape': + that.cancelEdit( pLi ); + break; + } + } + ) + .on( + 'blur', + function( e ){ + that.saveEdit( this.value, pLi ); + } + ) + .on( + 'dblclick', + function( e ){ + e.stopPropagation(); + } + ) + .appendTo(pLi) + [0]; // returns DOM element + + input.focus(); + } + + cancelEdit( pLi ){ + + let that = this; + + $( 'input', pLi )[1].remove(); + + $( pLi ).removeClass('editing'); + + $('label,button', pLi).removeClass('view'); + + } + + saveEdit( pText, pLi ){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + const todos = data.map( pItem => { + return $(pLi).attr('data-id') === pItem.id ? tb.extend( pItem, { text: pText } ) : pItem; + }); + + store.data = todos; + + that.store = store; // implicit: re-render + + } + + removeItem(pItemId){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + const todos = data.filter(item => { + return pItemId === item.id ? false : true; + }); + + store.data = todos; + + that.store = store; + + that.filterList( $('.filters a.selected', that.target)[0] ); + + that.count(); + + } + + changeCompleted(pItemId, pTarget){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + const todos = data.map(item => { + if ( pItemId === item.id ){ + item.completed = pTarget.checked ? 'checked' : ''; + if ( item.completed ){ + $( pTarget ) + .parent() + .addClass('completed'); + } else { + $( pTarget ) + .parent() + .removeClass('completed'); + + } + } + return item; + }); + + store.data = todos; + + that.store = store; + + that.count(); + + } + + toggleAllCompleted(pItemId, pTarget){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data, + checked = !!that.count() ? 'checked' : ''; + + const todos = data.map( pItem => { + pItem.completed = checked; + return pItem; + }); + + store.data = todos; + + that.store = store; + + that.count(); + + // click 'All' + $( '.filters a', that.target )[0].click(); + + } + + clearCompleted(){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + store.data = data.filter( item => !item.completed ? true : false ); + + that.store = store; + + that.count(); + + // click 'All' + $( '.filters a', that.target )[0].click(); + + } + + count(){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data, + count = 0; + + data.forEach( pData => !!pData.completed ? count : count++ ); + + $('.todo-count') + .html( count + ' item' + (count !== 1 ? 's ' : ' ') + 'left' ); + + if ( count === 0 ){ + $('#toggle-all').removeAttr('checked'); + } else { + $('#toggle-all').attr('checked','checked'); + } + + if ( count === data.length ){ + $('button.clear-completed').hide(); + } else { + $('button.clear-completed').show(); + } + + return count; + } + +}; + +/* +Autonomous Custom Element +*/ +(function(){ // IIFE hiding ACE class + + class Content extends HTMLElement{ + + constructor(){ + super(); + } + + connectedCallback(){ + new tb( + app.Content, + {}, + this + ); + } + + } + + customElements.define('app-content', Content); + +})(); + +app.Footer = class Footer extends Tb{ + + constructor(){ + super(); + + let that = this; + + that.handlers = { + init: that.init + }; + + } + + get template(){ return ` +

      Double-click to edit a todo

      +

      Written by Frank Thuerigen

      +

      Part of TodoMVC

      `; + } + + // omitted if autonomous custom element + get namespace(){ + return 'app.Footer'; + } + + // methods + init(){ + + let that = this; + + $(that.target) + .append( $(that.template.trim()) ) + .clean(); + + } + +}; + +/* +Autonomous Custom Element +*/ +(function(){ // IIFE hiding ACE class + + class Footer extends HTMLElement{ + + constructor(){ + super(); + } + + connectedCallback(){ + new tb( + app.Footer, + {}, + this + ); + } + + } + + customElements.define('app-footer', Footer); + +})(); + +app.Header = class Header extends Tb{ + + constructor(){ + super(); + + let that = this; + + that.handlers = { + init: that.init + }; + + } + + get template(){ return ` +

      todos

      + `; + } + + // omitted if autonomous custom element + get namespace(){ + return 'app.Header'; + } + + // methods + init(){ + + let that = this; + + $(that.target) + .append( $(that.template.trim()) ) + .clean(); + + $('input', that.target) + .on( + 'keyup', + function( e ){ + switch (e.key) { + case 'Enter': + + let input = $('input', that.target); + + tb('app-content')[0] + .addItem(input.val()); + + input.val(''); + + break; + + case 'Escape': + + $('input', that.target).val(''); + + break; + + } + } + ); + + } + +}; + +/* +Autonomous Custom Element +*/ +(function(){ // IIFE hiding ACE class + + class Header extends HTMLElement{ + + constructor(){ + super(); + } + + connectedCallback(){ + new tb( + app.Header, + {}, + this + ); + } + + } + + customElements.define('app-header', Header); + +})(); \ No newline at end of file diff --git a/examples/twobirds-es6/src/src/app.js b/examples/twobirds-es6/src/src/app.js new file mode 100644 index 0000000000..6484f41705 --- /dev/null +++ b/examples/twobirds-es6/src/src/app.js @@ -0,0 +1,4 @@ +"use strict"; // jshint ignore:line + +var app = new tb(), // class repository + $ = tb.dom; // jQuery-like DOM selector diff --git a/examples/twobirds-es6/src/src/app/Body.js b/examples/twobirds-es6/src/src/app/Body.js new file mode 100644 index 0000000000..12e0d655c2 --- /dev/null +++ b/examples/twobirds-es6/src/src/app/Body.js @@ -0,0 +1,44 @@ +app.Body = class Body extends Tb{ + + constructor(){ + super(); + + let that = this; // ...minification + + that.handlers = { + init: that.init + }; + + // simple routing + window.onhashchange = function(){ + let hash = window.location.hash, + filter = hash.split('/')[1] || hash; + + console.log(filter); + + $('a.a-'+filter).trigger('click'); + + }; + + } + + get template(){ return ` +
      + + +
      + + + `; + } + + init(){ + + let that = this; // ...minification + + $(that.target) + .append( $(that.template.trim()) ) + .clean(); + } + +}; \ No newline at end of file diff --git a/examples/twobirds-es6/src/src/app/Content.js b/examples/twobirds-es6/src/src/app/Content.js new file mode 100644 index 0000000000..4f1cff7f64 --- /dev/null +++ b/examples/twobirds-es6/src/src/app/Content.js @@ -0,0 +1,478 @@ +app.Content = class Content extends Tb{ + + constructor(){ + super(); + + let that = this; + + that.handlers = { + init: that.init + }; + + //store + that.store = { + filter: 'all', + data: [] + }; + + } + + // omitted if autonomous custom element + get namespace(){ + return 'app.Content'; + } + + // content template + get contentTemplate(){ return ` + + +
        + `; + } + + // list item template + get itemTemplate(){ return ` +
      • + + + +
      • `; + } + + // methods + init(){ + + let that = this; + + // render template + $(that.target) + .append($(that.contentTemplate)) + .clean() + .hide(); + + // toggle all items + $( '#toggle-all', that.target ) + .on( + 'click', + function( e ){ + that.toggleAllCompleted(); + e.stopPropagation(); + } + ); + + // clear completed items + $( 'button.clear-completed', that.target ) + .on( + 'click', + function( e ){ + that.clearCompleted(); + e.stopPropagation(); + } + ); + + // toggle css class for footer buttons + $('footer a', that.target) + .on( + 'click', + function(e){ + + $('footer a', that.target) + .forEach(function(pNode){ + if ( pNode !== e.target ){ + $( pNode ).removeClass('selected'); + } else { + $( pNode ).addClass('selected', true); + } + }); + + that.filterList( e.target ); + + e.preventDefault(); + e.stopPropagation(); + } + ); + + // render when store changes + that.store.observe( that.renderList.bind(that) ); + + // save to localStorage when store changes + that.store.observe( function(pValue){ + try { + localStorage.setItem( 'todos-twobirds-es6', JSON.stringify( pValue ) ); + } catch (e){} + }); + + // get data from localStorage + try { + let data = JSON.parse( localStorage.getItem( 'todos-twobirds-es6' ) ); + if ( data ){ + that.store = data; + } + } catch (e){} + + } + + renderList(){ + + let that = this, + ul = $('ul', that.target)[0]; + + $(ul).empty(); + + $(that.target).hide(); + + that.store + .data + .filter(function(pItem){ + if ( + that.store.filter === 'all' + || that.store.filter === 'active' && !pItem.completed + || that.store.filter === 'completed' && pItem.completed + ){ + return pItem; + } + }) + .forEach(function(pItem){ + + let li = $( tb.parse( that.itemTemplate.trim(), pItem ) ); + + // set completed style + if ( pItem.completed ){ + $( li[0] ) + .addClass('completed'); + + } + + // destroy button + $( 'button', li[0] ) + .on( + 'click', + function( e ){ + that.removeItem( pItem.id ); + } + ); + + // doubleclick -> inline edit + $( li[0] ) + .on( + 'dblclick', + function( e ){ + that.editItem( pItem.id, li[0] ); + e.stopPropagation(); + } + ); + + // completed checkbox + $( 'input', li[0] ) + .on( + 'click', + function( e ){ + that.changeCompleted( pItem.id, e.target ); + } + ); + + if ( pItem.completed ){ + li.addClass('completed'); + } + + $(ul).append(li); + + $(that.target).show(); + }); + + $(ul).clean(); + + that.count(); + + $('a.a-'+that.store.filter).trigger('click'); + + // we have records, but none are shown + if ( that.store.data.length > 0 && $(ul).children().length === 0 ){ + $('a.a-all').trigger('click'); + } + } + + filterList( pTarget ){ + + let that = this, + type = pTarget.innerText, + store = tb.extend( {}, that.store ), + ul = $('ul', that.target )[0]; + + if ( that.store.filter === type.toLowerCase() ){ + return; + } + + switch ( type ){ + + case 'Active': + store.filter = 'active'; + that.store = store; + break; + case 'Completed': + store.filter = 'completed'; + that.store = store; + break; + default: // ='All' + store.filter = 'all'; + that.store = store; + break; + } + + + } + + addItem(pItemText){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + data.push({ + id: tb.getId(), + completed: '', + title: pItemText + }); + + store.data = data; + + that.store = store; + + that.filterList( $('.filters a.selected', that.target)[0] ); + + that.count(); + + } + + editItem( pItemText, pLi ){ + + let that = this, + text = pLi.innerText; + + $( pLi ) + .addClass('editing') + .off('dblclick'); + + $('label,button', pLi).addClass('view'); + + let input = $('') + .val(text) + .on( + 'keyup', + function( e ){ + switch (e.key) { + case 'Enter': + if ( this.value.trim() !== '' ){ + that.saveEdit( this.value.trim(), pLi ); + } + break; + case 'Escape': + that.cancelEdit( pLi ); + break; + } + } + ) + .on( + 'blur', + function( e ){ + that.saveEdit( this.value, pLi ); + } + ) + .on( + 'dblclick', + function( e ){ + e.stopPropagation(); + } + ) + .appendTo(pLi) + [0]; // returns DOM element + + input.focus(); + } + + cancelEdit( pLi ){ + + let that = this; + + $( 'input', pLi )[1].remove(); + + $( pLi ).removeClass('editing'); + + $('label,button', pLi).removeClass('view'); + + } + + saveEdit( pText, pLi ){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + const todos = data.map( pItem => { + return $(pLi).attr('data-id') === pItem.id ? tb.extend( pItem, { text: pText } ) : pItem; + }); + + store.data = todos; + + that.store = store; // implicit: re-render + + } + + removeItem(pItemId){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + const todos = data.filter(item => { + return pItemId === item.id ? false : true; + }); + + store.data = todos; + + that.store = store; + + that.filterList( $('.filters a.selected', that.target)[0] ); + + that.count(); + + } + + changeCompleted(pItemId, pTarget){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + const todos = data.map(item => { + if ( pItemId === item.id ){ + item.completed = pTarget.checked ? 'checked' : ''; + if ( item.completed ){ + $( pTarget ) + .parent() + .addClass('completed'); + } else { + $( pTarget ) + .parent() + .removeClass('completed'); + + } + } + return item; + }); + + store.data = todos; + + that.store = store; + + that.count(); + + } + + toggleAllCompleted(pItemId, pTarget){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data, + checked = !!that.count() ? 'checked' : ''; + + const todos = data.map( pItem => { + pItem.completed = checked; + return pItem; + }); + + store.data = todos; + + that.store = store; + + that.count(); + + // click 'All' + $( '.filters a', that.target )[0].click(); + + } + + clearCompleted(){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data; + + store.data = data.filter( item => !item.completed ? true : false ); + + that.store = store; + + that.count(); + + // click 'All' + $( '.filters a', that.target )[0].click(); + + } + + count(){ + + let that = this, + store = tb.extend({}, that.store), + data = store.data, + count = 0; + + data.forEach( pData => !!pData.completed ? count : count++ ); + + $('.todo-count') + .html( count + ' item' + (count !== 1 ? 's ' : ' ') + 'left' ); + + if ( count === 0 ){ + $('#toggle-all').removeAttr('checked'); + } else { + $('#toggle-all').attr('checked','checked'); + } + + if ( count === data.length ){ + $('button.clear-completed').hide(); + } else { + $('button.clear-completed').show(); + } + + return count; + } + +}; + +/* +Autonomous Custom Element +*/ +(function(){ // IIFE hiding ACE class + + class Content extends HTMLElement{ + + constructor(){ + super(); + } + + connectedCallback(){ + new tb( + app.Content, + {}, + this + ); + } + + } + + customElements.define('app-content', Content); + +})(); \ No newline at end of file diff --git a/examples/twobirds-es6/src/src/app/Footer.js b/examples/twobirds-es6/src/src/app/Footer.js new file mode 100644 index 0000000000..eedd9edf1d --- /dev/null +++ b/examples/twobirds-es6/src/src/app/Footer.js @@ -0,0 +1,61 @@ +app.Footer = class Footer extends Tb{ + + constructor(){ + super(); + + let that = this; + + that.handlers = { + init: that.init + }; + + } + + get template(){ return ` +

        Double-click to edit a todo

        +

        Written by Frank Thuerigen

        +

        Part of TodoMVC

        `; + } + + // omitted if autonomous custom element + get namespace(){ + return 'app.Footer'; + } + + // methods + init(){ + + let that = this; + + $(that.target) + .append( $(that.template.trim()) ) + .clean(); + + } + +}; + +/* +Autonomous Custom Element +*/ +(function(){ // IIFE hiding ACE class + + class Footer extends HTMLElement{ + + constructor(){ + super(); + } + + connectedCallback(){ + new tb( + app.Footer, + {}, + this + ); + } + + } + + customElements.define('app-footer', Footer); + +})(); \ No newline at end of file diff --git a/examples/twobirds-es6/src/src/app/Header.js b/examples/twobirds-es6/src/src/app/Header.js new file mode 100644 index 0000000000..7cfef3575f --- /dev/null +++ b/examples/twobirds-es6/src/src/app/Header.js @@ -0,0 +1,86 @@ +app.Header = class Header extends Tb{ + + constructor(){ + super(); + + let that = this; + + that.handlers = { + init: that.init + }; + + } + + get template(){ return ` +

        todos

        + `; + } + + // omitted if autonomous custom element + get namespace(){ + return 'app.Header'; + } + + // methods + init(){ + + let that = this; + + $(that.target) + .append( $(that.template.trim()) ) + .clean(); + + $('input', that.target) + .on( + 'keyup', + function( e ){ + switch (e.key) { + case 'Enter': + + let input = $('input', that.target); + + tb('app-content')[0] + .addItem(input.val()); + + input.val(''); + + break; + + case 'Escape': + + $('input', that.target).val(''); + + break; + + } + } + ); + + } + +}; + +/* +Autonomous Custom Element +*/ +(function(){ // IIFE hiding ACE class + + class Header extends HTMLElement{ + + constructor(){ + super(); + } + + connectedCallback(){ + new tb( + app.Header, + {}, + this + ); + } + + } + + customElements.define('app-header', Header); + +})(); \ No newline at end of file diff --git a/examples/vanilla-es6/dist/bundle.js b/examples/vanilla-es6/dist/bundle.js index 39e772c120..780eb45d9e 100644 --- a/examples/vanilla-es6/dist/bundle.js +++ b/examples/vanilla-es6/dist/bundle.js @@ -1,6 +1,6 @@ var e,h="undefined"!=typeof window&&window===this?this:"undefined"!=typeof global?global:this;function k(){h.Symbol||(h.Symbol=l);k=function(){}}var m=0;function l(a){return"jscomp_symbol_"+a+m++}function n(){k();h.Symbol.iterator||(h.Symbol.iterator=h.Symbol("iterator"));n=function(){}}function p(a){n();if(a[h.Symbol.iterator])return a[h.Symbol.iterator]();var b=0;return{next:function(){return b==a.length?{done:!0}:{done:!1,value:a[b++]}}}}var r={};function t(a,b){var c=window.localStorage,d;this.a=function(){return d||JSON.parse(c.getItem(a)||"[]")};this.b=function(b){c.setItem(a,JSON.stringify(d=b))};b&&b()}t.prototype.find=function(a,b){var c=this.a(),d;b(c.filter(function(c){for(d in a)if(a[d]!==c[d])return!1;return!0}))};function u(a,b,c){for(var d=b.id,f=a.a(),g=f.length,q;g--;)if(f[g].id===d){for(q in b)f[g][q]=b[q];break}a.b(f);c&&c()}function v(a,b,c){var d=a.a();d.push(b);a.b(d);c&&c()} t.prototype.remove=function(a,b){var c,d=this.a().filter(function(b){for(c in a)if(a[c]!==b[c])return!0;return!1});this.b(d);b&&b(d)};function y(a,b){a.find(r,function(a){for(var d=a.length,f=d,g=0;f--;)g+=a[f].c;b(d,d-g,g)})};function z(a,b){return(b||document).querySelector(a)}function A(a,b,c,d){a.addEventListener(b,c,!!d)}function B(a,b,c,d,f){A(a,c,function(c){for(var f=c.target,w=a.querySelectorAll(b),x=w.length;x--;)if(w[x]===f){d.call(f,c);break}},!!f)}function C(a){return a.replace(/[&<]/g,function(a){return"&"===a?"&":"<"})};function D(a){return a.reduce(function(a,c){return a+('\n
      • \n\t\n\t\n\t\n
      • ')},"")};function E(a){return parseInt(a.parentNode.dataset.id,10)}function F(){this.a=z(".todo-list");this.s=z(".todo-count");this.b=z(".clear-completed");this.o=z(".main");this.h=z(".toggle-all");this.g=z(".new-todo");B(this.a,"li label","dblclick",function(a){a=a.target;var b=a.parentElement;b.classList.add("editing");var c=document.createElement("input");c.className="edit";c.value=a.innerText;b.appendChild(c);c.focus()})}F.prototype.u=function(a){this.a.innerHTML=D(a)}; -function G(a,b){var c=z('[data-id="'+a+'"]');c.removeChild(z("input.edit",c));c.classList.remove("editing");z("label",c).textContent=b}function H(a,b){A(a.g,"change",function(a){(a=a.target.value.trim())&&b(a)})}function I(a,b){debugger;A(a.h,"click",function(a){b(a.target.checked)})}function J(a,b){B(a.a,".destroy","click",function(a){b(E(a.target))})}function K(a,b){B(a.a,".toggle","click",function(a){a=a.target;b(E(a),a.checked)})} +function G(a,b){var c=z('[data-id="'+a+'"]');c.removeChild(z("input.edit",c));c.classList.remove("editing");z("label",c).textContent=b}function H(a,b){A(a.g,"change",function(a){(a=a.target.value.trim())&&b(a)})}function I(a,b){A(a.h,"click",function(a){b(a.target.checked)})}function J(a,b){B(a.a,".destroy","click",function(a){b(E(a.target))})}function K(a,b){B(a.a,".toggle","click",function(a){a=a.target;b(E(a),a.checked)})} function L(a,b){B(a.a,"li .edit","blur",function(a){a=a.target;a.dataset.v||b(E(a),a.value.trim())},!0);B(a.a,"li .edit","keypress",function(a){var b=a.target;13===a.keyCode&&b.blur()})}function M(a,b){B(a.a,"li .edit","keyup",function(a){var d=a.target;27===a.keyCode&&(d.dataset.v=!0,d.blur(),b(E(d)))})};function N(a,b){var c=this;this.a=a;this.b=b;H(b,this.j.bind(this));L(b,this.m.bind(this));M(b,this.l.bind(this));J(b,this.i.bind(this));K(b,function(a,b){O(c,a,b);c.f()});A(b.b,"click",this.w.bind(this));I(b,this.A.bind(this));this.h="";this.g=null}e=N.prototype;e.j=function(a){var b=this;v(this.a,{id:Date.now(),title:a,c:!1},function(){b.b.g.value="";b.f(!0)})};e.m=function(a,b){b.length?u(this.a,{id:a,title:b},function(){G(a,b)}):this.i(a)};e.l=function(a){this.a.find({id:a},function(b){G(a,b[0].title)})}; e.i=function(a){var b=this;this.a.remove({id:a},function(){b.f();var c=z('[data-id="'+a+'"]');c&&b.b.a.removeChild(c)})};e.w=function(){this.a.remove({c:!0},this.f.bind(this))};function O(a,b,c){u(a.a,{id:b,c:c},function(){var a=z('[data-id="'+b+'"]');a&&(a.className=c?"completed":"",z("input",a).checked=c)})}e.A=function(a){var b=this;this.a.find({c:!a},function(c){c=p(c);for(var d=c.next();!d.done;d=c.next())O(b,d.value.id,a)});this.f()}; e.f=function(a){var b=this,c=this.h;(a||""!==this.g||this.g!==c)&&this.a.find({"":r,active:{c:!1},completed:{c:!0}}[c],this.b.u.bind(this.b));y(this.a,function(a,c,g){b.b.s.innerHTML=c+" item"+(1!==c?"s":"")+" left";b.b.b.style.display=g?"block":"none";b.b.h.checked=g===a;b.b.o.style.display=a?"block":"none"});this.g=c};var P=new t("todos-vanilla-es6"),Q=new F,R=new N(P,Q);function S(){var a=document.location.hash.replace(/^#\//,"");R.h=a;R.f();z(".filters .selected").className="";z('.filters [href="#/'+a+'"]').className="selected"}A(window,"load",S);A(window,"hashchange",S); diff --git a/examples/vanilla-es6/node_modules/todomvc-app-css/index.css b/examples/vanilla-es6/node_modules/todomvc-app-css/index.css index d8be205ad4..3ac79f05b9 100644 --- a/examples/vanilla-es6/node_modules/todomvc-app-css/index.css +++ b/examples/vanilla-es6/node_modules/todomvc-app-css/index.css @@ -113,10 +113,13 @@ body { } .toggle-all { - text-align: center; + width: 1px; + height: 1px; border: none; /* Mobile Safari */ opacity: 0; position: absolute; + right: 100%; + bottom: 100%; } .toggle-all + label { diff --git a/examples/vanilla-es6/node_modules/todomvc-common/base.js b/examples/vanilla-es6/node_modules/todomvc-common/base.js index 3c6723f390..a56b5aaca9 100644 --- a/examples/vanilla-es6/node_modules/todomvc-common/base.js +++ b/examples/vanilla-es6/node_modules/todomvc-common/base.js @@ -21,7 +21,7 @@ } } return object; - } + }; // By default, Underscore uses ERB-style template delimiters, change the // following template settings to use alternative delimiters. diff --git a/examples/vanilla-es6/package-lock.json b/examples/vanilla-es6/package-lock.json new file mode 100644 index 0000000000..eac85af4ec --- /dev/null +++ b/examples/vanilla-es6/package-lock.json @@ -0,0 +1,1433 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "dev": true + }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "^1.0.1" + } + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "array-differ": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz", + "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", + "dev": true + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "beeper": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.1.tgz", + "integrity": "sha1-5tXqjF2tABMEpwsiY4RH9pyy+Ak=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + } + }, + "chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "dev": true, + "requires": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + } + }, + "clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", + "dev": true + }, + "clone-stats": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", + "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", + "dev": true + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "convert-source-map": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.5.1.tgz", + "integrity": "sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU=", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "dateformat": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", + "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "dev": true + }, + "duplexer2": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", + "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", + "dev": true, + "requires": { + "readable-stream": "~1.1.9" + } + }, + "duplexify": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.6.0.tgz", + "integrity": "sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", + "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "^0.1.0" + } + }, + "expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", + "dev": true, + "requires": { + "fill-range": "^2.1.0" + } + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + } + } + }, + "fancy-log": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", + "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", + "dev": true, + "requires": { + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "time-stamp": "^1.0.0" + } + }, + "filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", + "dev": true + }, + "fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "requires": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + } + }, + "first-chunk-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz", + "integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04=", + "dev": true + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", + "dev": true, + "requires": { + "for-in": "^1.0.1" + } + }, + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", + "dev": true, + "requires": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", + "dev": true, + "requires": { + "is-glob": "^2.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "glob-stream": { + "version": "5.3.5", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-5.3.5.tgz", + "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^5.0.3", + "glob-parent": "^3.0.0", + "micromatch": "^2.3.7", + "ordered-read-streams": "^0.3.0", + "through2": "^0.6.0", + "to-absolute-glob": "^0.1.1", + "unique-stream": "^2.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + } + } + }, + "glogg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.1.tgz", + "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "google-closure-compiler": { + "version": "20160315.2.0", + "resolved": "https://registry.npmjs.org/google-closure-compiler/-/google-closure-compiler-20160315.2.0.tgz", + "integrity": "sha1-3aWP91QNL9FSBaVsJ0EMkwv6KeY=", + "dev": true, + "requires": { + "chalk": "^1.0.0", + "gulp-util": "^3.0.7", + "source-map": "^0.5.3", + "vinyl-fs": "^2.2.1", + "vinyl-sourcemaps-apply": "^0.2.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "gulp-sourcemaps": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/gulp-sourcemaps/-/gulp-sourcemaps-1.6.0.tgz", + "integrity": "sha1-uG/zSdgBzrVuHZ59x7vLS33uYAw=", + "dev": true, + "requires": { + "convert-source-map": "^1.1.1", + "graceful-fs": "^4.1.2", + "strip-bom": "^2.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0" + }, + "dependencies": { + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "gulp-util": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", + "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", + "dev": true, + "requires": { + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", + "replace-ext": "0.0.1", + "through2": "^2.0.0", + "vinyl": "^0.5.0" + } + }, + "gulplog": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz", + "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", + "dev": true, + "requires": { + "glogg": "^1.0.0" + } + }, + "has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "has-gulplog": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz", + "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", + "dev": true, + "requires": { + "sparkles": "^1.0.0" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", + "dev": true + }, + "is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", + "dev": true, + "requires": { + "is-primitive": "^2.0.0" + } + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + }, + "is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", + "dev": true + }, + "is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-glob": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-0.3.0.tgz", + "integrity": "sha1-1LVcafUYhvm2XHDWwmItN+KfSP4=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + } + } + }, + "json-stable-stringify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", + "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "lodash._basecopy": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", + "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", + "dev": true + }, + "lodash._basetostring": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz", + "integrity": "sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U=", + "dev": true + }, + "lodash._basevalues": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz", + "integrity": "sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc=", + "dev": true + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reescape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz", + "integrity": "sha1-Kx1vXf4HyKNVdT5fJ/rH8c3hYWo=", + "dev": true + }, + "lodash._reevaluate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz", + "integrity": "sha1-WLx0xAZklTrgsSTYBpltrKQx4u0=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash._root": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz", + "integrity": "sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI=", + "dev": true + }, + "lodash.escape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz", + "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", + "dev": true, + "requires": { + "lodash._root": "^3.0.0" + } + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isequal": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", + "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=", + "dev": true + }, + "lodash.keys": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", + "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "lodash.restparam": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", + "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", + "dev": true + }, + "lodash.template": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz", + "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", + "dev": true, + "requires": { + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" + } + }, + "lodash.templatesettings": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz", + "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" + } + }, + "math-random": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz", + "integrity": "sha1-izqsWIuKZuSXXjzepn97sylgH6w=", + "dev": true + }, + "merge-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", + "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", + "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "multipipe": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz", + "integrity": "sha1-Ko8t33Du1WTf8tV/HhoTfZ8FB4s=", + "dev": true, + "requires": { + "duplexer2": "0.0.2" + } + }, + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", + "dev": true, + "requires": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "ordered-read-streams": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-0.3.0.tgz", + "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", + "dev": true, + "requires": { + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", + "dev": true, + "requires": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "dependencies": { + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "^1.0.0" + } + } + } + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "randomatic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", + "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", + "dev": true, + "requires": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "dependencies": { + "is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true + }, + "kind-of": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", + "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "requires": { + "is-equal-shallow": "^0.1.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", + "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "sparkles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz", + "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", + "dev": true + }, + "stream-shift": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", + "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "dev": true + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + }, + "strip-bom-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-bom-stream/-/strip-bom-stream-1.0.0.tgz", + "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", + "dev": true, + "requires": { + "first-chunk-stream": "^1.0.0", + "strip-bom": "^2.0.0" + } + }, + "supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "dev": true + }, + "through2": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.3.tgz", + "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", + "dev": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, + "through2-filter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-2.0.0.tgz", + "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", + "dev": true, + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "time-stamp": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz", + "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=", + "dev": true + }, + "to-absolute-glob": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-0.1.1.tgz", + "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1" + } + }, + "todomvc-app-css": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/todomvc-app-css/-/todomvc-app-css-2.1.2.tgz", + "integrity": "sha512-WgXLWY4snfC7yBkpzFb6xRmUbB06NGuji6njCByte0byW2DUpmyhh32o4sCQ8HX/pTwm71huKQlFiKYxR/2iVQ==" + }, + "todomvc-common": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/todomvc-common/-/todomvc-common-1.0.5.tgz", + "integrity": "sha512-D8kEJmxVMQIWwztEdH+WeiAfXRbbSCpgXq4NkYi+gduJ2tr8CNq7sYLfJvjpQ10KD9QxJwig57rvMbV2QAESwQ==" + }, + "unique-stream": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.2.1.tgz", + "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", + "dev": true, + "requires": { + "json-stable-stringify": "^1.0.0", + "through2-filter": "^2.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "vali-date": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/vali-date/-/vali-date-1.0.0.tgz", + "integrity": "sha1-G5BKWWCfsyjvB4E4Qgk09rhnCaY=", + "dev": true + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + }, + "vinyl-fs": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-2.4.4.tgz", + "integrity": "sha1-vm/zJwy1Xf19MGNkDegfJddTIjk=", + "dev": true, + "requires": { + "duplexify": "^3.2.0", + "glob-stream": "^5.3.2", + "graceful-fs": "^4.0.0", + "gulp-sourcemaps": "1.6.0", + "is-valid-glob": "^0.3.0", + "lazystream": "^1.0.0", + "lodash.isequal": "^4.0.0", + "merge-stream": "^1.0.0", + "mkdirp": "^0.5.0", + "object-assign": "^4.0.0", + "readable-stream": "^2.0.4", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^1.0.0", + "through2": "^2.0.0", + "through2-filter": "^2.0.0", + "vali-date": "^1.0.0", + "vinyl": "^1.0.0" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "vinyl": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", + "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", + "dev": true, + "requires": { + "clone": "^1.0.0", + "clone-stats": "^0.0.1", + "replace-ext": "0.0.1" + } + } + } + }, + "vinyl-sourcemaps-apply": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz", + "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=", + "dev": true, + "requires": { + "source-map": "^0.5.1" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", + "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=", + "dev": true + } + } +} diff --git a/index.html b/index.html index 8249ff5747..bd7f1a12de 100644 --- a/index.html +++ b/index.html @@ -320,6 +320,9 @@

        Compare these to a non-framework implementation

      • jQuery
      • +
      • + twoBirds +
      • diff --git a/learn.json b/learn.json index 464c7556bb..46d4b0a129 100644 --- a/learn.json +++ b/learn.json @@ -2084,6 +2084,31 @@ }] }] }, + "twobirds-es6": { + "name": "twoBirds", + "description": "A small web component library. Feels like jQuery, but adds class instances to the DOM plus selectors and event handling on them.", + "homepage": "https://gitlab.com/twoBirds/twobirds-core", + "examples": [{ + "name": "Example", + "url": "examples/twobirds-es6" + }], + "link_groups": [{ + "heading": "Official Resources", + "links": [{ + "name": "TODOs Application (latest)", + "url": "https://github.com/twoBirds/todomvc" + }, { + "name": "twoBirds on GitLab", + "url": "https://gitlab.com/twoBirds/twobirds-core" + }, { + "name": "API", + "url": "http://twobirds.gitlab.io/twobirds-core/" + }, { + "name": "Tutorial", + "url": "https://gitlab.com/twoBirds/twobirds-core/wikis/twoBirds-Tutorials" + }] + }] + }, "typescript": { "name": "TypeScript", "description": "TypeScript is a language for application-scale JavaScript development. TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. Any browser. Any host. Any OS. Open Source.", diff --git a/package-lock.json b/package-lock.json index 9450bbb21a..5d69609fee 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,10 +16,10 @@ "integrity": "sha1-p3SS9LEdzHxEajSz4ochr9M8ZCo=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "date-fns": "1.29.0", - "figures": "1.7.0" + "chalk": "^1.1.3", + "cli-cursor": "^1.0.2", + "date-fns": "^1.27.2", + "figures": "^1.7.0" }, "dependencies": { "ansi-styles": { @@ -34,11 +34,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -55,7 +55,7 @@ "integrity": "sha512-EfRzw+wgI0Zdb4ZlhSvjh3q7I+oenqEYPXvr7oH/2RnzQqGDrPr7IU1Pi2yzGwoXmkNUQbo6qvntnItvQj0F4Q==", "dev": true, "requires": { - "lodash.once": "4.1.1" + "lodash.once": "^4.1.1" } }, "@gulp-sourcemaps/map-sources": { @@ -64,8 +64,8 @@ "integrity": "sha1-iQrnxdjId/bThIYCFazp1+yUW9o=", "dev": true, "requires": { - "normalize-path": "2.1.1", - "through2": "2.0.3" + "normalize-path": "^2.0.1", + "through2": "^2.0.3" } }, "@types/blob-util": { @@ -92,8 +92,8 @@ "integrity": "sha512-7aIt9QMRdxuagLLI48dPz96YJdhu64p6FCa6n4qkGN5DQLHnrIjZpD9bXCvV2G0NwgZ1FAmfP214dxc5zNCfgQ==", "dev": true, "requires": { - "@types/chai": "4.0.8", - "@types/jquery": "3.2.16" + "@types/chai": "*", + "@types/jquery": "*" } }, "@types/jquery": { @@ -132,8 +132,8 @@ "integrity": "sha512-EkI/ZvJT4hglWo7Ipf9SX+J+R9htNOMjW8xiOhce7+0csqvgoF5IXqY5Ae1GqRgNtWCuaywR5HjVa1snkTqpOw==", "dev": true, "requires": { - "@types/chai": "4.0.8", - "@types/sinon": "4.0.0" + "@types/chai": "*", + "@types/sinon": "*" } }, "CSSselect": { @@ -142,8 +142,8 @@ "integrity": "sha1-+Kt+H4QYzmPNput713ioXX7EkrI=", "dev": true, "requires": { - "CSSwhat": "0.4.7", - "domutils": "1.4.3" + "CSSwhat": "0.4", + "domutils": "1.4" }, "dependencies": { "domutils": { @@ -152,7 +152,7 @@ "integrity": "sha1-CGVRN5bGswYDGFDhdVFrr4C3Km8=", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } } } @@ -174,7 +174,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "2.1.18", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -190,8 +190,8 @@ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "dev": true, "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" + "co": "^4.6.0", + "json-stable-stringify": "^1.0.1" } }, "align-text": { @@ -200,9 +200,9 @@ "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", "dev": true, "requires": { - "kind-of": "3.2.2", - "longest": "1.0.1", - "repeat-string": "1.6.1" + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" }, "dependencies": { "kind-of": { @@ -211,7 +211,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -249,7 +249,7 @@ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { - "color-convert": "1.9.1" + "color-convert": "^1.9.0" } }, "ansi-wrap": { @@ -264,7 +264,7 @@ "integrity": "sha1-nNnABpV+vpX62tW9YJiUKoE3N/Y=", "dev": true, "requires": { - "file-type": "3.9.0" + "file-type": "^3.1.0" }, "dependencies": { "file-type": { @@ -288,7 +288,7 @@ "dev": true, "optional": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -362,7 +362,7 @@ "integrity": "sha1-7emAiDMGZeaZ4evwIny8YDTmJ9s=", "dev": true, "requires": { - "array-uniq": "0.1.1" + "array-uniq": "^0.1.0" } }, "array-uniq": { @@ -407,7 +407,7 @@ "integrity": "sha1-LSFgx3iAMuTdbL4lAvH5osj2zeQ=", "dev": true, "requires": { - "lodash": "4.17.4" + "lodash": "^4.14.0" } }, "async-each-series": { @@ -435,8 +435,8 @@ "integrity": "sha1-reXOni2dcbt//DHWlvpeh66+tjQ=", "dev": true, "requires": { - "caniuse-db": "1.0.30000821", - "postcss": "2.2.6" + "caniuse-db": "^1.0.30000006", + "postcss": "~2.2.5" } }, "aws-sign2": { @@ -457,8 +457,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.5.4", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" } }, "balanced-match": { @@ -473,13 +473,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.2.1", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.1", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -488,7 +488,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } } } @@ -499,8 +499,8 @@ "integrity": "sha1-1k03XWinxkDZEuI1jRcNylu1RoE=", "dev": true, "requires": { - "concat-stream": "1.4.11", - "meow": "2.0.0" + "concat-stream": "~1.4.7", + "meow": "~2.0.0" }, "dependencies": { "camelcase": { @@ -515,8 +515,8 @@ "integrity": "sha1-vRoRv5sxoc5JNJOpMN4aC69K1+w=", "dev": true, "requires": { - "camelcase": "1.2.1", - "map-obj": "1.0.1" + "camelcase": "^1.0.1", + "map-obj": "^1.0.0" } }, "concat-stream": { @@ -525,9 +525,9 @@ "integrity": "sha512-X3JMh8+4je3U1cQpG87+f9lXHDrqcb2MVLg9L7o8b1UZ0DzhRrUpdn65ttzu10PpJPPI3MQNkis+oha6TSA9Mw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "1.1.14", - "typedarray": "0.0.6" + "inherits": "~2.0.1", + "readable-stream": "~1.1.9", + "typedarray": "~0.0.5" } }, "indent-string": { @@ -536,9 +536,9 @@ "integrity": "sha1-25m8xYPrarux5I3LsZmamGBBy2s=", "dev": true, "requires": { - "get-stdin": "4.0.1", - "minimist": "1.2.0", - "repeating": "1.1.3" + "get-stdin": "^4.0.1", + "minimist": "^1.1.0", + "repeating": "^1.1.0" } }, "isarray": { @@ -553,10 +553,10 @@ "integrity": "sha1-j1MKjs9dQNP0tN+Tw0cpAPuiqPE=", "dev": true, "requires": { - "camelcase-keys": "1.0.0", - "indent-string": "1.2.2", - "minimist": "1.2.0", - "object-assign": "1.0.0" + "camelcase-keys": "^1.0.0", + "indent-string": "^1.1.0", + "minimist": "^1.1.0", + "object-assign": "^1.0.0" } }, "object-assign": { @@ -571,10 +571,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "repeating": { @@ -583,7 +583,7 @@ "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "string_decoder": { @@ -601,7 +601,7 @@ "dev": true, "optional": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "beeper": { @@ -617,13 +617,13 @@ "dev": true, "optional": true, "requires": { - "archive-type": "3.2.0", - "decompress": "3.0.0", - "download": "4.4.3", - "exec-series": "1.0.3", - "rimraf": "2.6.2", - "tempfile": "1.1.1", - "url-regex": "3.2.0" + "archive-type": "^3.0.1", + "decompress": "^3.0.0", + "download": "^4.1.2", + "exec-series": "^1.0.0", + "rimraf": "^2.2.6", + "tempfile": "^1.0.0", + "url-regex": "^3.0.0" }, "dependencies": { "tempfile": { @@ -633,8 +633,8 @@ "dev": true, "optional": true, "requires": { - "os-tmpdir": "1.0.2", - "uuid": "2.0.3" + "os-tmpdir": "^1.0.0", + "uuid": "^2.0.1" } }, "uuid": { @@ -653,7 +653,7 @@ "dev": true, "optional": true, "requires": { - "executable": "1.1.0" + "executable": "^1.0.0" } }, "bin-version": { @@ -663,7 +663,7 @@ "dev": true, "optional": true, "requires": { - "find-versions": "1.2.1" + "find-versions": "^1.0.0" } }, "bin-version-check": { @@ -673,10 +673,10 @@ "dev": true, "optional": true, "requires": { - "bin-version": "1.0.4", - "minimist": "1.2.0", - "semver": "4.3.6", - "semver-truncate": "1.1.2" + "bin-version": "^1.0.0", + "minimist": "^1.1.0", + "semver": "^4.0.3", + "semver-truncate": "^1.0.0" } }, "bin-wrapper": { @@ -686,12 +686,12 @@ "dev": true, "optional": true, "requires": { - "bin-check": "2.0.0", - "bin-version-check": "2.1.0", - "download": "4.4.3", - "each-async": "1.1.1", - "lazy-req": "1.1.0", - "os-filter-obj": "1.0.3" + "bin-check": "^2.0.0", + "bin-version-check": "^2.1.0", + "download": "^4.0.0", + "each-async": "^1.1.1", + "lazy-req": "^1.0.0", + "os-filter-obj": "^1.0.0" } }, "binaryextensions": { @@ -706,8 +706,8 @@ "integrity": "sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA==", "dev": true, "requires": { - "readable-stream": "2.3.5", - "safe-buffer": "5.1.1" + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" } }, "bluebird": { @@ -722,15 +722,15 @@ "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", "requires": { "bytes": "3.0.0", - "content-type": "1.0.4", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.6.2", + "depd": "~1.1.1", + "http-errors": "~1.6.2", "iconv-lite": "0.4.19", - "on-finished": "2.3.0", + "on-finished": "~2.3.0", "qs": "6.5.1", "raw-body": "2.3.2", - "type-is": "1.6.16" + "type-is": "~1.6.15" } }, "boom": { @@ -739,7 +739,7 @@ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "brace-expansion": { @@ -748,7 +748,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -758,18 +758,18 @@ "integrity": "sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "define-property": "1.0.0", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "kind-of": "6.0.2", - "repeat-element": "1.1.2", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "kind-of": "^6.0.2", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -778,7 +778,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -787,7 +787,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -798,7 +798,7 @@ "integrity": "sha1-uzX4pRn2AOD6a4SFJByXnQFB+y0=", "dev": true, "requires": { - "pako": "0.2.9" + "pako": "~0.2.0" } }, "buffer-crc32": { @@ -819,10 +819,10 @@ "integrity": "sha1-APFfruOreh3aLN5tkSG//dB7ImI=", "dev": true, "requires": { - "file-type": "3.9.0", - "readable-stream": "2.3.5", - "uuid": "2.0.3", - "vinyl": "1.2.0" + "file-type": "^3.1.0", + "readable-stream": "^2.0.2", + "uuid": "^2.0.1", + "vinyl": "^1.0.0" }, "dependencies": { "file-type": { @@ -843,8 +843,8 @@ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } } @@ -867,15 +867,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.2.1", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.0", - "to-object-path": "0.3.0", - "union-value": "1.0.0", - "unset-value": "1.0.0" + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" } }, "cache-swap": { @@ -884,10 +884,10 @@ "integrity": "sha1-U8HepgwpOa80fvk7t6hq78bm3LQ=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "mkdirp": "0.5.1", - "object-assign": "4.1.1", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.1", + "object-assign": "^4.0.1", + "rimraf": "^2.4.0" }, "dependencies": { "minimist": { @@ -919,8 +919,8 @@ "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", "dev": true, "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" } }, "caniuse-db": { @@ -947,10 +947,10 @@ "integrity": "sha1-/7Im/n78VHKI3GLuPpcHPCEtEDQ=", "dev": true, "requires": { - "get-proxy": "1.1.0", - "is-obj": "1.0.1", - "object-assign": "3.0.0", - "tunnel-agent": "0.4.3" + "get-proxy": "^1.0.1", + "is-obj": "^1.0.0", + "object-assign": "^3.0.0", + "tunnel-agent": "^0.4.0" }, "dependencies": { "object-assign": { @@ -973,8 +973,8 @@ "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", "dev": true, "requires": { - "align-text": "0.1.4", - "lazy-cache": "1.0.4" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" } }, "chalk": { @@ -983,9 +983,9 @@ "integrity": "sha512-ZM4j2/ld/YZDc3Ma8PgN7gyAk+kHMMMyzLNryCPGhWrsfAuDVeuid5bpRFTDgMH9JBK2lA4dyyAkkZYF/WcqDQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "check-more-types": { @@ -1000,11 +1000,11 @@ "integrity": "sha1-+lrkLMYBIRM9KW0LRtmDIV9yaOo=", "dev": true, "requires": { - "CSSselect": "0.4.1", - "dom-serializer": "0.0.1", - "entities": "1.1.1", - "htmlparser2": "3.7.3", - "lodash": "2.4.2" + "CSSselect": "~0.4.0", + "dom-serializer": "~0.0.0", + "entities": "~1.1.1", + "htmlparser2": "~3.7.2", + "lodash": "~2.4.1" }, "dependencies": { "dom-serializer": { @@ -1013,8 +1013,8 @@ "integrity": "sha1-lYmCfx4y0iw3yCmtq9WbMkevjq8=", "dev": true, "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" } }, "domelementtype": { @@ -1029,7 +1029,7 @@ "integrity": "sha1-Wd+dzSJ+gIs2Wuc+H2aErD2Ub8I=", "dev": true, "requires": { - "domelementtype": "1.1.3" + "domelementtype": "1" } }, "entities": { @@ -1044,11 +1044,11 @@ "integrity": "sha1-amTHdjfAjG8w7CqBV6UzM758sF4=", "dev": true, "requires": { - "domelementtype": "1.1.3", - "domhandler": "2.2.1", - "domutils": "1.5.1", - "entities": "1.0.0", - "readable-stream": "1.1.14" + "domelementtype": "1", + "domhandler": "2.2", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" }, "dependencies": { "entities": { @@ -1077,10 +1077,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -1104,7 +1104,7 @@ "dev": true, "optional": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.1.3" }, "dependencies": { "ansi-styles": { @@ -1121,11 +1121,11 @@ "dev": true, "optional": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -1143,10 +1143,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -1155,7 +1155,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { @@ -1164,7 +1164,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -1173,7 +1173,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -1184,7 +1184,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -1193,7 +1193,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -1204,9 +1204,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -1223,7 +1223,7 @@ "integrity": "sha1-BZC1R4tRbEkD7cLYm9P9vdKGMow=", "dev": true, "requires": { - "commander": "2.2.0" + "commander": "2.2.x" }, "dependencies": { "commander": { @@ -1241,7 +1241,7 @@ "dev": true, "requires": { "exit": "0.1.2", - "glob": "7.1.2" + "glob": "^7.1.1" } }, "cli-cursor": { @@ -1250,7 +1250,7 @@ "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", "dev": true, "requires": { - "restore-cursor": "1.0.1" + "restore-cursor": "^1.0.1" } }, "cli-spinners": { @@ -1266,7 +1266,7 @@ "dev": true, "requires": { "slice-ansi": "0.0.4", - "string-width": "1.0.2" + "string-width": "^1.0.1" } }, "cliui": { @@ -1275,8 +1275,8 @@ "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", "dev": true, "requires": { - "center-align": "0.1.3", - "right-align": "0.1.3", + "center-align": "^0.1.1", + "right-align": "^0.1.1", "wordwrap": "0.0.2" } }, @@ -1304,9 +1304,9 @@ "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", "dev": true, "requires": { - "inherits": "2.0.3", - "process-nextick-args": "2.0.0", - "readable-stream": "2.3.5" + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" } }, "co": { @@ -1322,7 +1322,7 @@ "dev": true, "optional": true, "requires": { - "q": "1.5.1" + "q": "^1.1.2" } }, "code-point-at": { @@ -1337,8 +1337,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color-convert": { @@ -1347,7 +1347,7 @@ "integrity": "sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ==", "dev": true, "requires": { - "color-name": "1.1.3" + "color-name": "^1.1.1" } }, "color-name": { @@ -1375,7 +1375,7 @@ "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -1390,7 +1390,7 @@ "integrity": "sha1-EYe+Tz1M8MBCfUP3Tu8fc1AWFMA=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.18.0" } }, "component-emitter": { @@ -1411,9 +1411,9 @@ "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.5", - "typedarray": "0.0.6" + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "concat-with-sourcemaps": { @@ -1422,7 +1422,7 @@ "integrity": "sha512-YtnS0VEY+e2Khzsey/6mra9EoM6h/5gxaC0e3mcHpA5yfDxafhygytNmcJWodvUgyXzSiL5MSkPO6bQGgfliHw==", "dev": true, "requires": { - "source-map": "0.6.1" + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -1439,7 +1439,7 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "console-stream": { @@ -1508,7 +1508,7 @@ "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", "dev": true, "requires": { - "capture-stack-trace": "1.0.0" + "capture-stack-trace": "^1.0.0" } }, "cross-spawn": { @@ -1517,9 +1517,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.2", - "shebang-command": "1.2.0", - "which": "1.3.0" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" }, "dependencies": { "lru-cache": { @@ -1528,8 +1528,8 @@ "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } } } @@ -1540,7 +1540,7 @@ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, "requires": { - "boom": "2.10.1" + "boom": "2.x.x" } }, "css": { @@ -1549,10 +1549,10 @@ "integrity": "sha1-c6TIHehdtmTU7mdPfUcIXjstVdw=", "dev": true, "requires": { - "inherits": "2.0.3", - "source-map": "0.1.43", - "source-map-resolve": "0.3.1", - "urix": "0.1.0" + "inherits": "^2.0.1", + "source-map": "^0.1.38", + "source-map-resolve": "^0.3.0", + "urix": "^0.1.0" }, "dependencies": { "atob": { @@ -1567,7 +1567,7 @@ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "source-map-resolve": { @@ -1576,10 +1576,10 @@ "integrity": "sha1-YQ9hIqRFuN1RU1oqcbeD38Ekh2E=", "dev": true, "requires": { - "atob": "1.1.3", - "resolve-url": "0.2.1", - "source-map-url": "0.3.0", - "urix": "0.1.0" + "atob": "~1.1.0", + "resolve-url": "~0.2.1", + "source-map-url": "~0.3.0", + "urix": "~0.1.0" } }, "source-map-url": { @@ -1602,7 +1602,7 @@ "integrity": "sha1-JSzL8D9yOgCb3Ydw/n6ydBca/fo=", "dev": true, "requires": { - "source-map": "0.1.43" + "source-map": "~0.1.31" }, "dependencies": { "source-map": { @@ -1611,7 +1611,7 @@ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -1623,8 +1623,8 @@ "dev": true, "optional": true, "requires": { - "clap": "1.2.3", - "source-map": "0.5.7" + "clap": "^1.0.9", + "source-map": "^0.5.3" } }, "ctype": { @@ -1639,13 +1639,13 @@ "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", "dev": true, "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "cypress": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/cypress/-/cypress-1.4.2.tgz", - "integrity": "sha1-2VfWMWF6qH5kp+rnFQLy4XUHZjg=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cypress/-/cypress-2.1.0.tgz", + "integrity": "sha512-EKXGjKFKUkhXXfAkYixBN2Lo2Gji4ZGC+ezWflRf/co49+OyHarZaXp7Y/n826WjmMdpHTmkOw4wUWBgyFHEHQ==", "dev": true, "requires": { "@cypress/listr-verbose-renderer": "0.4.1", @@ -1698,9 +1698,9 @@ "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "4.5.0" + "ansi-styles": "^3.1.0", + "escape-string-regexp": "^1.0.5", + "supports-color": "^4.0.0" }, "dependencies": { "supports-color": { @@ -1709,7 +1709,7 @@ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -1741,7 +1741,7 @@ "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==", "dev": true, "requires": { - "has-flag": "2.0.0" + "has-flag": "^2.0.0" } } } @@ -1752,7 +1752,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -1795,8 +1795,8 @@ "integrity": "sha1-+gccXYdIRoVCSAdCHKSxawsaB2M=", "dev": true, "requires": { - "debug": "2.6.9", - "lazy-debug-legacy": "0.0.1", + "debug": "2.X", + "lazy-debug-legacy": "0.0.X", "object-assign": "4.1.0" }, "dependencies": { @@ -1826,15 +1826,15 @@ "integrity": "sha1-rx3VDQbjv8QyRh033hGzjA2ZG+0=", "dev": true, "requires": { - "buffer-to-vinyl": "1.1.0", - "concat-stream": "1.6.0", - "decompress-tar": "3.1.0", - "decompress-tarbz2": "3.1.0", - "decompress-targz": "3.1.0", - "decompress-unzip": "3.4.0", - "stream-combiner2": "1.1.1", - "vinyl-assign": "1.2.1", - "vinyl-fs": "github:gulpjs/vinyl-fs#59386caa67b191c3615ea2358bdc7d3611712a3d" + "buffer-to-vinyl": "^1.0.0", + "concat-stream": "^1.4.6", + "decompress-tar": "^3.0.0", + "decompress-tarbz2": "^3.0.0", + "decompress-targz": "^3.0.0", + "decompress-unzip": "^3.0.0", + "stream-combiner2": "^1.1.1", + "vinyl-assign": "^1.0.1", + "vinyl-fs": "^2.2.0" } }, "decompress-tar": { @@ -1843,12 +1843,12 @@ "integrity": "sha1-IXx4n5uURQ76rcXF5TeXj8MzxGY=", "dev": true, "requires": { - "is-tar": "1.0.0", - "object-assign": "2.1.1", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.5", - "through2": "0.6.5", - "vinyl": "0.4.6" + "is-tar": "^1.0.0", + "object-assign": "^2.0.0", + "strip-dirs": "^1.0.0", + "tar-stream": "^1.1.1", + "through2": "^0.6.1", + "vinyl": "^0.4.3" }, "dependencies": { "clone": { @@ -1875,10 +1875,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -1893,8 +1893,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "vinyl": { @@ -1903,8 +1903,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } } } @@ -1915,13 +1915,13 @@ "integrity": "sha1-iyOTVoE1X58YnYclag+L3ZbZZm0=", "dev": true, "requires": { - "is-bzip2": "1.0.0", - "object-assign": "2.1.1", - "seek-bzip": "1.0.5", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.5", - "through2": "0.6.5", - "vinyl": "0.4.6" + "is-bzip2": "^1.0.0", + "object-assign": "^2.0.0", + "seek-bzip": "^1.0.3", + "strip-dirs": "^1.0.0", + "tar-stream": "^1.1.1", + "through2": "^0.6.1", + "vinyl": "^0.4.3" }, "dependencies": { "clone": { @@ -1948,10 +1948,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -1966,8 +1966,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "vinyl": { @@ -1976,8 +1976,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } } } @@ -1988,12 +1988,12 @@ "integrity": "sha1-ssE9+YFmJomRtxXWRH9kLpaW9aA=", "dev": true, "requires": { - "is-gzip": "1.0.0", - "object-assign": "2.1.1", - "strip-dirs": "1.1.1", - "tar-stream": "1.5.5", - "through2": "0.6.5", - "vinyl": "0.4.6" + "is-gzip": "^1.0.0", + "object-assign": "^2.0.0", + "strip-dirs": "^1.0.0", + "tar-stream": "^1.1.1", + "through2": "^0.6.1", + "vinyl": "^0.4.3" }, "dependencies": { "clone": { @@ -2020,10 +2020,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -2038,8 +2038,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "vinyl": { @@ -2048,8 +2048,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } } } @@ -2060,13 +2060,13 @@ "integrity": "sha1-YUdbQVIGa74/7hL51inRX+ZHjus=", "dev": true, "requires": { - "is-zip": "1.0.0", - "read-all-stream": "3.1.0", - "stat-mode": "0.2.2", - "strip-dirs": "1.1.1", - "through2": "2.0.3", - "vinyl": "1.2.0", - "yauzl": "2.8.0" + "is-zip": "^1.0.0", + "read-all-stream": "^3.0.0", + "stat-mode": "^0.2.0", + "strip-dirs": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^1.0.0", + "yauzl": "^2.2.1" }, "dependencies": { "vinyl": { @@ -2075,8 +2075,8 @@ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } } @@ -2094,7 +2094,7 @@ "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", "dev": true, "requires": { - "clone": "1.0.4" + "clone": "^1.0.2" } }, "define-properties": { @@ -2103,8 +2103,8 @@ "integrity": "sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ=", "dev": true, "requires": { - "foreach": "2.0.5", - "object-keys": "1.0.11" + "foreach": "^2.0.5", + "object-keys": "^1.0.8" } }, "define-property": { @@ -2113,8 +2113,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" } }, "del": { @@ -2123,11 +2123,11 @@ "integrity": "sha1-LXJKcZtaz1wLhAtCJHFeg4QGpBk=", "dev": true, "requires": { - "each-async": "1.1.1", - "globby": "0.1.1", - "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.1", - "rimraf": "2.6.2" + "each-async": "^1.0.0", + "globby": "^0.1.1", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "rimraf": "^2.2.8" } }, "delayed-stream": { @@ -2170,8 +2170,8 @@ "integrity": "sha1-BzxpdUbOB4DOI75KKOKT5AvDDII=", "dev": true, "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" }, "dependencies": { "domelementtype": { @@ -2200,7 +2200,7 @@ "integrity": "sha1-LeWaCCLVAn+r/28DLCsloqir5zg=", "dev": true, "requires": { - "domelementtype": "1.3.0" + "domelementtype": "1" } }, "domutils": { @@ -2209,8 +2209,8 @@ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", "dev": true, "requires": { - "dom-serializer": "0.1.0", - "domelementtype": "1.3.0" + "dom-serializer": "0", + "domelementtype": "1" } }, "download": { @@ -2219,21 +2219,21 @@ "integrity": "sha1-qlX9rTktldS2jowr4D4MKqIbqaw=", "dev": true, "requires": { - "caw": "1.2.0", - "concat-stream": "1.6.0", - "each-async": "1.1.1", - "filenamify": "1.2.1", - "got": "5.7.1", - "gulp-decompress": "1.2.0", - "gulp-rename": "1.2.2", - "is-url": "1.2.4", - "object-assign": "4.1.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.5", - "stream-combiner2": "1.1.1", - "vinyl": "1.2.0", - "vinyl-fs": "github:gulpjs/vinyl-fs#59386caa67b191c3615ea2358bdc7d3611712a3d", - "ware": "1.3.0" + "caw": "^1.0.1", + "concat-stream": "^1.4.7", + "each-async": "^1.0.0", + "filenamify": "^1.0.1", + "got": "^5.0.0", + "gulp-decompress": "^1.2.0", + "gulp-rename": "^1.2.0", + "is-url": "^1.2.0", + "object-assign": "^4.0.1", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.2", + "stream-combiner2": "^1.1.1", + "vinyl": "^1.0.0", + "vinyl-fs": "^2.2.0", + "ware": "^1.2.0" }, "dependencies": { "vinyl": { @@ -2242,8 +2242,8 @@ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } } @@ -2261,7 +2261,7 @@ "integrity": "sha1-xhTc9n4vsUmVqRcR5aYX6KYKMds=", "dev": true, "requires": { - "readable-stream": "1.1.14" + "readable-stream": "~1.1.9" }, "dependencies": { "isarray": { @@ -2276,10 +2276,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -2296,10 +2296,10 @@ "integrity": "sha512-JzYSLYMhoVVBe8+mbHQ4KgpvHpm0DZpJuL8PY93Vyv1fW7jYJ90LoXa1di/CVbJM+TgMs91rbDapE/RNIfnJsA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.5", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" }, "dependencies": { "end-of-stream": { @@ -2308,7 +2308,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } } } @@ -2319,8 +2319,8 @@ "integrity": "sha1-3uUim98KtrogEqOV4bhpq/iBNHM=", "dev": true, "requires": { - "onetime": "1.1.0", - "set-immediate-shim": "1.0.1" + "onetime": "^1.0.0", + "set-immediate-shim": "^1.0.0" } }, "easy-table": { @@ -2329,7 +2329,7 @@ "integrity": "sha1-hvmrTBAvA3G3KXuSplHVgkvIy3M=", "dev": true, "requires": { - "wcwidth": "1.0.1" + "wcwidth": ">=1.0.1" } }, "ecc-jsbn": { @@ -2339,7 +2339,7 @@ "dev": true, "optional": true, "requires": { - "jsbn": "0.1.1" + "jsbn": "~0.1.0" } }, "ecdsa-sig-formatter": { @@ -2348,8 +2348,8 @@ "integrity": "sha1-S8kmJ07Dtau1AW5+HWCSGsJisqE=", "dev": true, "requires": { - "base64url": "2.0.0", - "safe-buffer": "5.1.1" + "base64url": "^2.0.0", + "safe-buffer": "^5.0.1" }, "dependencies": { "base64url": { @@ -2382,7 +2382,7 @@ "integrity": "sha1-jhdyBsPICDfYVjLouTWd/osvbq8=", "dev": true, "requires": { - "once": "1.3.3" + "once": "~1.3.0" }, "dependencies": { "once": { @@ -2391,7 +2391,7 @@ "integrity": "sha1-suJhVXzkwxTsgwTz+oJmPkKXyiA=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } } } @@ -2408,7 +2408,7 @@ "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", "dev": true, "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "es-abstract": { @@ -2417,11 +2417,11 @@ "integrity": "sha512-ZnQrE/lXTTQ39ulXZ+J1DTFazV9qBy61x2bY071B+qGco8Z8q1QddsLdt/EF8Ai9hcWH72dWS0kFqXLxOxqslA==", "dev": true, "requires": { - "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", + "function-bind": "^1.1.1", + "has": "^1.0.1", + "is-callable": "^1.1.3", + "is-regex": "^1.0.4" } }, "es-to-primitive": { @@ -2430,9 +2430,9 @@ "integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=", "dev": true, "requires": { - "is-callable": "1.1.3", - "is-date-object": "1.0.1", - "is-symbol": "1.0.1" + "is-callable": "^1.1.1", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.1" } }, "escape-html": { @@ -2464,13 +2464,13 @@ "integrity": "sha1-A4u7LqnqkDhbJvvBhU0LU58qvqM=", "dev": true, "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.0.7", + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.0.3", "pause-stream": "0.0.11", - "split": "0.2.10", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "split": "0.2", + "stream-combiner": "~0.0.3", + "through": "~2.3.1" } }, "exec-buffer": { @@ -2480,11 +2480,11 @@ "dev": true, "optional": true, "requires": { - "execa": "0.7.0", - "p-finally": "1.0.0", - "pify": "3.0.0", - "rimraf": "2.6.2", - "tempfile": "2.0.0" + "execa": "^0.7.0", + "p-finally": "^1.0.0", + "pify": "^3.0.0", + "rimraf": "^2.5.4", + "tempfile": "^2.0.0" }, "dependencies": { "pify": { @@ -2503,8 +2503,8 @@ "dev": true, "optional": true, "requires": { - "async-each-series": "1.1.0", - "object-assign": "4.1.1" + "async-each-series": "^1.1.0", + "object-assign": "^4.1.0" } }, "execa": { @@ -2514,13 +2514,13 @@ "dev": true, "optional": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } }, "executable": { @@ -2530,7 +2530,7 @@ "dev": true, "optional": true, "requires": { - "meow": "3.7.0" + "meow": "^3.1.0" } }, "exit": { @@ -2551,13 +2551,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -2566,7 +2566,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -2575,7 +2575,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -2584,7 +2584,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2593,7 +2593,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2604,7 +2604,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -2613,7 +2613,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2624,9 +2624,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -2643,7 +2643,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.3" + "fill-range": "^2.1.0" }, "dependencies": { "fill-range": { @@ -2652,11 +2652,11 @@ "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "1.1.7", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^1.1.3", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "is-number": { @@ -2665,7 +2665,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "isobject": { @@ -2683,7 +2683,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -2694,7 +2694,7 @@ "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", "dev": true, "requires": { - "homedir-polyfill": "1.0.1" + "homedir-polyfill": "^1.0.1" } }, "express": { @@ -2702,36 +2702,36 @@ "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.5", "array-flatten": "1.1.1", "body-parser": "1.18.2", "content-disposition": "0.5.2", - "content-type": "1.0.4", + "content-type": "~1.0.4", "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", - "methods": "1.1.2", - "on-finished": "2.3.0", - "parseurl": "1.3.2", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.3", + "proxy-addr": "~2.0.3", "qs": "6.5.1", - "range-parser": "1.2.0", + "range-parser": "~1.2.0", "safe-buffer": "5.1.1", "send": "0.16.2", "serve-static": "1.13.2", "setprototypeof": "1.1.0", - "statuses": "1.4.0", - "type-is": "1.6.16", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", - "vary": "1.1.2" + "vary": "~1.1.2" } }, "extend": { @@ -2746,8 +2746,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -2756,7 +2756,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -2767,14 +2767,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -2783,7 +2783,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -2792,7 +2792,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -2815,7 +2815,7 @@ "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", "dev": true, "requires": { - "fd-slicer": "1.0.1" + "fd-slicer": "~1.0.1" } } } @@ -2832,9 +2832,9 @@ "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", "dev": true, "requires": { - "ansi-gray": "0.1.1", - "color-support": "1.1.3", - "time-stamp": "1.1.0" + "ansi-gray": "^0.1.1", + "color-support": "^1.1.3", + "time-stamp": "^1.0.0" } }, "fd-slicer": { @@ -2843,7 +2843,7 @@ "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", "dev": true, "requires": { - "pend": "1.2.0" + "pend": "~1.2.0" } }, "figlet": { @@ -2858,8 +2858,8 @@ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" } }, "file-type": { @@ -2886,9 +2886,9 @@ "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=", "dev": true, "requires": { - "filename-reserved-regex": "1.0.0", - "strip-outer": "1.0.1", - "trim-repeated": "1.0.0" + "filename-reserved-regex": "^1.0.0", + "strip-outer": "^1.0.0", + "trim-repeated": "^1.0.0" } }, "fill-range": { @@ -2897,10 +2897,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -2909,7 +2909,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -2920,12 +2920,12 @@ "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.2", - "statuses": "1.4.0", - "unpipe": "1.0.0" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", + "unpipe": "~1.0.0" } }, "find-index": { @@ -2940,8 +2940,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "find-versions": { @@ -2951,10 +2951,10 @@ "dev": true, "optional": true, "requires": { - "array-uniq": "1.0.3", - "get-stdin": "4.0.1", - "meow": "3.7.0", - "semver-regex": "1.0.0" + "array-uniq": "^1.0.0", + "get-stdin": "^4.0.1", + "meow": "^3.5.0", + "semver-regex": "^1.0.0" }, "dependencies": { "array-uniq": { @@ -2972,10 +2972,10 @@ "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", "dev": true, "requires": { - "detect-file": "1.0.0", - "is-glob": "3.1.0", - "micromatch": "3.1.10", - "resolve-dir": "1.0.1" + "detect-file": "^1.0.0", + "is-glob": "^3.1.0", + "micromatch": "^3.0.4", + "resolve-dir": "^1.0.1" } }, "fined": { @@ -2984,11 +2984,11 @@ "integrity": "sha1-s33IRLdqL15wgeiE98CuNE8VNHY=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "is-plain-object": "2.0.4", - "object.defaults": "1.1.0", - "object.pick": "1.3.0", - "parse-filepath": "1.0.2" + "expand-tilde": "^2.0.2", + "is-plain-object": "^2.0.3", + "object.defaults": "^1.1.0", + "object.pick": "^1.2.0", + "parse-filepath": "^1.0.1" } }, "first-chunk-stream": { @@ -3009,8 +3009,8 @@ "integrity": "sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.5" + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" } }, "for-in": { @@ -3025,7 +3025,7 @@ "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "foreach": { @@ -3052,9 +3052,9 @@ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.12" } }, "forwarded": { @@ -3068,7 +3068,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -3088,9 +3088,9 @@ "integrity": "sha1-f8DGyJV/mD9X8waiTlud3Y0N2IA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "3.0.1", - "universalify": "0.1.1" + "graceful-fs": "^4.1.2", + "jsonfile": "^3.0.0", + "universalify": "^0.1.0" } }, "fs.realpath": { @@ -3111,8 +3111,8 @@ "integrity": "sha1-NXf8+1Qmvjp7jrrakmcSKdjMgc4=", "dev": true, "requires": { - "jws": "3.0.0", - "request": "2.81.0" + "jws": "~3.0.0", + "request": "^2.54.0" } }, "gaze": { @@ -3121,7 +3121,7 @@ "integrity": "sha1-QLcJU30k0dRXZ9takIaJ3+aaxE8=", "dev": true, "requires": { - "globule": "0.1.0" + "globule": "~0.1.0" } }, "generate-function": { @@ -3136,7 +3136,7 @@ "integrity": "sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA=", "dev": true, "requires": { - "is-property": "1.0.2" + "is-property": "^1.0.0" } }, "get-proxy": { @@ -3145,7 +3145,7 @@ "integrity": "sha1-iUhUSRvFkbDxR9euVw9cZ4tyVus=", "dev": true, "requires": { - "rc": "1.2.6" + "rc": "^1.1.2" } }, "get-stdin": { @@ -3181,7 +3181,7 @@ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" }, "dependencies": { "assert-plus": { @@ -3199,9 +3199,9 @@ "dev": true, "optional": true, "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" + "bin-build": "^2.0.0", + "bin-wrapper": "^3.0.0", + "logalot": "^2.0.0" } }, "glob": { @@ -3210,12 +3210,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -3224,8 +3224,8 @@ "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "glob-parent": { @@ -3234,7 +3234,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "is-extglob": { @@ -3249,7 +3249,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -3260,8 +3260,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" } }, "glob-stream": { @@ -3270,12 +3270,12 @@ "integrity": "sha1-kXCl8St5Awb9/lmPMT+PeVT9FDs=", "dev": true, "requires": { - "glob": "4.5.3", - "glob2base": "0.0.12", - "minimatch": "2.0.10", - "ordered-read-streams": "0.1.0", - "through2": "0.6.5", - "unique-stream": "1.0.0" + "glob": "^4.3.1", + "glob2base": "^0.0.12", + "minimatch": "^2.0.1", + "ordered-read-streams": "^0.1.0", + "through2": "^0.6.1", + "unique-stream": "^1.0.0" }, "dependencies": { "glob": { @@ -3284,10 +3284,10 @@ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.4.0" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^2.0.1", + "once": "^1.3.0" } }, "isarray": { @@ -3302,7 +3302,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.0.0" } }, "readable-stream": { @@ -3311,10 +3311,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -3329,8 +3329,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -3341,7 +3341,7 @@ "integrity": "sha1-uVtKjfdLOcgymLDAXJeLTZo7cQs=", "dev": true, "requires": { - "gaze": "0.5.2" + "gaze": "^0.5.1" } }, "glob2base": { @@ -3350,7 +3350,7 @@ "integrity": "sha1-nUGbPijxLoOjYhZKJ3BVkiycDVY=", "dev": true, "requires": { - "find-index": "0.1.1" + "find-index": "^0.1.1" } }, "global-dirs": { @@ -3359,7 +3359,7 @@ "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=", "dev": true, "requires": { - "ini": "1.3.5" + "ini": "^1.3.4" } }, "global-modules": { @@ -3368,9 +3368,9 @@ "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", "dev": true, "requires": { - "global-prefix": "1.0.2", - "is-windows": "1.0.2", - "resolve-dir": "1.0.1" + "global-prefix": "^1.0.1", + "is-windows": "^1.0.1", + "resolve-dir": "^1.0.0" } }, "global-prefix": { @@ -3379,11 +3379,11 @@ "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "homedir-polyfill": "1.0.1", - "ini": "1.3.5", - "is-windows": "1.0.2", - "which": "1.3.0" + "expand-tilde": "^2.0.2", + "homedir-polyfill": "^1.0.1", + "ini": "^1.3.4", + "is-windows": "^1.0.1", + "which": "^1.2.14" } }, "globby": { @@ -3392,10 +3392,10 @@ "integrity": "sha1-y+xj33JLS+pFi3mhbMDjsfLKhiA=", "dev": true, "requires": { - "array-differ": "0.1.0", - "array-union": "0.1.0", - "async": "0.9.2", - "glob": "4.5.3" + "array-differ": "^0.1.0", + "array-union": "^0.1.0", + "async": "^0.9.0", + "glob": "^4.0.2" }, "dependencies": { "async": { @@ -3410,10 +3410,10 @@ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.4.0" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^2.0.1", + "once": "^1.3.0" } }, "minimatch": { @@ -3422,7 +3422,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.0.0" } } } @@ -3433,9 +3433,9 @@ "integrity": "sha1-2cjt3h2nnRJaFRt5UzuXhnY0auU=", "dev": true, "requires": { - "glob": "3.1.21", - "lodash": "1.0.2", - "minimatch": "0.2.14" + "glob": "~3.1.21", + "lodash": "~1.0.1", + "minimatch": "~0.2.11" }, "dependencies": { "glob": { @@ -3444,9 +3444,9 @@ "integrity": "sha1-0p4KBV3qUTj00H7UDomC6DwgZs0=", "dev": true, "requires": { - "graceful-fs": "1.2.3", - "inherits": "1.0.2", - "minimatch": "0.2.14" + "graceful-fs": "~1.2.0", + "inherits": "1", + "minimatch": "~0.2.11" } }, "graceful-fs": { @@ -3473,8 +3473,8 @@ "integrity": "sha1-x054BXT2PG+aCQ6Q775u9TpqdWo=", "dev": true, "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" + "lru-cache": "2", + "sigmund": "~1.0.0" } } } @@ -3485,7 +3485,7 @@ "integrity": "sha512-ynYqXLoluBKf9XGR1gA59yEJisIL7YHEH4xr3ZziHB5/yl4qWfaK8Js9jGe6gBGCSCKVqiyO30WnRZADvemUNw==", "dev": true, "requires": { - "sparkles": "1.0.0" + "sparkles": "^1.0.0" } }, "googleapis": { @@ -3494,10 +3494,10 @@ "integrity": "sha1-4QFQrJ6LJftReZ8Q7ZRsW5+AZKo=", "dev": true, "requires": { - "async": "0.9.2", - "gapitoken": "0.1.5", - "request": "2.51.0", - "string-template": "0.2.1" + "async": "~0.9.0", + "gapitoken": "~0.1.2", + "request": "~2.51.0", + "string-template": "~0.2.0" }, "dependencies": { "asn1": { @@ -3530,7 +3530,7 @@ "integrity": "sha1-wGt5evCF6gC8Unr8jvzxHeIjIFQ=", "dev": true, "requires": { - "readable-stream": "1.0.34" + "readable-stream": "~1.0.26" } }, "boom": { @@ -3539,7 +3539,7 @@ "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", "dev": true, "requires": { - "hoek": "0.9.1" + "hoek": "0.9.x" } }, "caseless": { @@ -3563,7 +3563,7 @@ "integrity": "sha1-7ZH/HxetE9N0gohZT4pIoNJvMlw=", "dev": true, "requires": { - "boom": "0.4.2" + "boom": "0.4.x" } }, "delayed-stream": { @@ -3584,9 +3584,9 @@ "integrity": "sha1-Jvi8JtpkQOKZy9z7aQNcT3em5GY=", "dev": true, "requires": { - "async": "0.9.2", - "combined-stream": "0.0.7", - "mime-types": "2.0.14" + "async": "~0.9.0", + "combined-stream": "~0.0.4", + "mime-types": "~2.0.3" }, "dependencies": { "mime-types": { @@ -3595,7 +3595,7 @@ "integrity": "sha1-MQ4VnbI+B3+Lsit0jav6SVcUCqY=", "dev": true, "requires": { - "mime-db": "1.12.0" + "mime-db": "~1.12.0" } } } @@ -3606,10 +3606,10 @@ "integrity": "sha1-h81JH5tG5OKurKM1QWdmiF0tHtk=", "dev": true, "requires": { - "boom": "0.4.2", - "cryptiles": "0.2.2", - "hoek": "0.9.1", - "sntp": "0.2.4" + "boom": "0.4.x", + "cryptiles": "0.2.x", + "hoek": "0.9.x", + "sntp": "0.2.x" } }, "hoek": { @@ -3625,7 +3625,7 @@ "dev": true, "requires": { "asn1": "0.1.11", - "assert-plus": "0.1.5", + "assert-plus": "^0.1.5", "ctype": "0.5.3" } }, @@ -3671,10 +3671,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "request": { @@ -3683,22 +3683,22 @@ "integrity": "sha1-NdALvswBLlX5B7G9ng29V3v+8m4=", "dev": true, "requires": { - "aws-sign2": "0.5.0", - "bl": "0.9.5", - "caseless": "0.8.0", - "combined-stream": "0.0.7", - "forever-agent": "0.5.2", - "form-data": "0.2.0", + "aws-sign2": "~0.5.0", + "bl": "~0.9.0", + "caseless": "~0.8.0", + "combined-stream": "~0.0.5", + "forever-agent": "~0.5.0", + "form-data": "~0.2.0", "hawk": "1.1.1", - "http-signature": "0.10.1", - "json-stringify-safe": "5.0.1", - "mime-types": "1.0.2", - "node-uuid": "1.4.8", - "oauth-sign": "0.5.0", - "qs": "2.3.3", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.4.3" + "http-signature": "~0.10.0", + "json-stringify-safe": "~5.0.0", + "mime-types": "~1.0.1", + "node-uuid": "~1.4.0", + "oauth-sign": "~0.5.0", + "qs": "~2.3.1", + "stringstream": "~0.0.4", + "tough-cookie": ">=0.12.0", + "tunnel-agent": "~0.4.0" } }, "sntp": { @@ -3707,7 +3707,7 @@ "integrity": "sha1-+4hfGLDzqtGJ+CSGJTa87ux1CQA=", "dev": true, "requires": { - "hoek": "0.9.1" + "hoek": "0.9.x" } }, "string_decoder": { @@ -3730,21 +3730,21 @@ "integrity": "sha1-X4FjWmHkplifGAVp6k44FoClHzU=", "dev": true, "requires": { - "create-error-class": "3.0.2", - "duplexer2": "0.1.4", - "is-redirect": "1.0.0", - "is-retry-allowed": "1.1.0", - "is-stream": "1.1.0", - "lowercase-keys": "1.0.1", - "node-status-codes": "1.0.0", - "object-assign": "4.1.1", - "parse-json": "2.2.0", - "pinkie-promise": "2.0.1", - "read-all-stream": "3.1.0", - "readable-stream": "2.3.5", - "timed-out": "3.1.3", - "unzip-response": "1.0.2", - "url-parse-lax": "1.0.0" + "create-error-class": "^3.0.1", + "duplexer2": "^0.1.4", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "node-status-codes": "^1.0.0", + "object-assign": "^4.0.1", + "parse-json": "^2.1.0", + "pinkie-promise": "^2.0.0", + "read-all-stream": "^3.0.0", + "readable-stream": "^2.0.5", + "timed-out": "^3.0.0", + "unzip-response": "^1.0.2", + "url-parse-lax": "^1.0.0" }, "dependencies": { "duplexer2": { @@ -3753,7 +3753,7 @@ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "readable-stream": "2.3.5" + "readable-stream": "^2.0.2" } } } @@ -3764,9 +3764,9 @@ "integrity": "sha1-R4il3F15y5nun9RKIuOdTxpwuas=", "dev": true, "requires": { - "googleapis": "1.1.5", - "minimist": "0.2.0", - "valid-url": "1.0.9" + "googleapis": "^1.0.2", + "minimist": "^0.2.0", + "valid-url": "^1.0.9" }, "dependencies": { "minimist": { @@ -3795,19 +3795,19 @@ "integrity": "sha1-VxzkWSjdQK9lFPxAEYZgFsE4RbQ=", "dev": true, "requires": { - "archy": "1.0.0", - "chalk": "1.1.3", - "deprecated": "0.0.1", - "gulp-util": "3.0.8", - "interpret": "1.1.0", - "liftoff": "2.5.0", - "minimist": "1.2.0", - "orchestrator": "0.3.8", - "pretty-hrtime": "1.0.3", - "semver": "4.3.6", - "tildify": "1.2.0", - "v8flags": "2.1.1", - "vinyl-fs": "0.3.14" + "archy": "^1.0.0", + "chalk": "^1.0.0", + "deprecated": "^0.0.1", + "gulp-util": "^3.0.0", + "interpret": "^1.0.0", + "liftoff": "^2.1.0", + "minimist": "^1.1.0", + "orchestrator": "^0.3.0", + "pretty-hrtime": "^1.0.0", + "semver": "^4.1.0", + "tildify": "^1.0.0", + "v8flags": "^2.0.2", + "vinyl-fs": "^0.3.0" }, "dependencies": { "ansi-styles": { @@ -3822,11 +3822,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "clone": { @@ -3841,7 +3841,7 @@ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", "dev": true, "requires": { - "natives": "1.1.2" + "natives": "^1.1.0" } }, "isarray": { @@ -3856,10 +3856,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -3880,8 +3880,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "vinyl": { @@ -3890,8 +3890,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } }, "vinyl-fs": { @@ -3900,14 +3900,14 @@ "integrity": "sha1-mmhRzhysHBzqX+hsCTHWIMLPqeY=", "dev": true, "requires": { - "defaults": "1.0.3", - "glob-stream": "3.1.18", - "glob-watcher": "0.0.6", - "graceful-fs": "3.0.11", - "mkdirp": "0.5.0", - "strip-bom": "1.0.0", - "through2": "0.6.5", - "vinyl": "0.4.6" + "defaults": "^1.0.0", + "glob-stream": "^3.1.5", + "glob-watcher": "^0.0.6", + "graceful-fs": "^3.0.0", + "mkdirp": "^0.5.0", + "strip-bom": "^1.0.0", + "through2": "^0.6.1", + "vinyl": "^0.4.0" } } } @@ -3918,11 +3918,11 @@ "integrity": "sha1-5CsA1Zcz3aRMPyAd0h5Ny02oRzM=", "dev": true, "requires": { - "autoprefixer-core": "3.1.2", - "gulp-util": "3.0.8", - "object-assign": "1.0.0", - "through2": "0.6.5", - "vinyl-sourcemaps-apply": "0.1.4" + "autoprefixer-core": "^3.0.1", + "gulp-util": "^3.0.0", + "object-assign": "^1.0.0", + "through2": "^0.6.2", + "vinyl-sourcemaps-apply": "^0.1.3" }, "dependencies": { "isarray": { @@ -3943,10 +3943,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -3961,8 +3961,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -3973,15 +3973,15 @@ "integrity": "sha1-GaKYpgcoxG3RUd2M2sfMblCzBqk=", "dev": true, "requires": { - "bluebird": "2.11.0", - "cache-swap": "0.2.3", - "gulp-util": "3.0.8", - "object-assign": "3.0.0", - "object.omit": "1.1.0", - "object.pick": "1.3.0", - "through2": "0.6.5", - "try-json-parse": "0.1.1", - "vinyl": "0.5.3" + "bluebird": "^2.9.27", + "cache-swap": "^0.2.0", + "gulp-util": "^3.0.5", + "object-assign": "^3.0.0", + "object.omit": "^1.1.0", + "object.pick": "^1.1.1", + "through2": "^0.6.5", + "try-json-parse": "^0.1.1", + "vinyl": "^0.5.0" }, "dependencies": { "bluebird": { @@ -4008,10 +4008,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -4026,8 +4026,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -4038,9 +4038,9 @@ "integrity": "sha1-Yz0WyV2IUEYorQJmVmPO5aR5M1M=", "dev": true, "requires": { - "concat-with-sourcemaps": "1.0.5", - "through2": "2.0.3", - "vinyl": "2.1.0" + "concat-with-sourcemaps": "^1.0.0", + "through2": "^2.0.0", + "vinyl": "^2.0.0" }, "dependencies": { "clone": { @@ -4067,12 +4067,12 @@ "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", "dev": true, "requires": { - "clone": "2.1.2", - "clone-buffer": "1.0.0", - "clone-stats": "1.0.0", - "cloneable-readable": "1.1.2", - "remove-trailing-separator": "1.1.0", - "replace-ext": "1.0.0" + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" } } } @@ -4083,10 +4083,10 @@ "integrity": "sha1-jutlpeAV+O2FMsr+KEVJYGJvDcc=", "dev": true, "requires": { - "archive-type": "3.2.0", - "decompress": "3.0.0", - "gulp-util": "3.0.8", - "readable-stream": "2.3.5" + "archive-type": "^3.0.0", + "decompress": "^3.0.0", + "gulp-util": "^3.0.1", + "readable-stream": "^2.0.2" } }, "gulp-if": { @@ -4095,9 +4095,9 @@ "integrity": "sha1-m9nBYDLswo4BVL+wWCjSMxZvLak=", "dev": true, "requires": { - "gulp-match": "0.2.1", - "ternary-stream": "1.2.3", - "through2": "0.6.5" + "gulp-match": "~0.2.1", + "ternary-stream": "^1.2.0", + "through2": "~0.6.2" }, "dependencies": { "isarray": { @@ -4112,10 +4112,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -4130,8 +4130,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -4142,16 +4142,16 @@ "integrity": "sha1-7upNRR+9ZWWdkzQ/7Z92qhl2P6Y=", "dev": true, "requires": { - "chalk": "1.1.3", - "gulp-util": "3.0.8", - "imagemin": "5.3.1", - "imagemin-gifsicle": "5.2.0", - "imagemin-mozjpeg": "6.0.0", - "imagemin-optipng": "5.2.1", - "imagemin-svgo": "5.2.4", - "plur": "2.1.2", - "pretty-bytes": "2.0.1", - "through2-concurrent": "1.1.1" + "chalk": "^1.0.0", + "gulp-util": "^3.0.0", + "imagemin": "^5.0.0", + "imagemin-gifsicle": "^5.0.0", + "imagemin-mozjpeg": "^6.0.0", + "imagemin-optipng": "^5.0.0", + "imagemin-svgo": "^5.0.1", + "plur": "^2.0.0", + "pretty-bytes": "^2.0.1", + "through2-concurrent": "^1.1.0" }, "dependencies": { "ansi-styles": { @@ -4166,11 +4166,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -4187,12 +4187,12 @@ "integrity": "sha1-I/vRuv3W+/5h6mRmenSAmpYdA94=", "dev": true, "requires": { - "gulp-util": "3.0.8", - "jshint": "2.9.5", - "lodash": "3.10.1", - "minimatch": "2.0.10", + "gulp-util": "^3.0.0", + "jshint": "^2.7.0", + "lodash": "^3.0.1", + "minimatch": "^2.0.1", "rcloader": "0.1.2", - "through2": "0.6.5" + "through2": "~0.6.1" }, "dependencies": { "isarray": { @@ -4213,7 +4213,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.0.0" } }, "readable-stream": { @@ -4222,10 +4222,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -4240,8 +4240,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -4252,7 +4252,7 @@ "integrity": "sha1-Qq7x749MHMuoZP4olIvnre9uZh4=", "dev": true, "requires": { - "findup-sync": "0.1.3", + "findup-sync": "^0.1.2", "multimatch": "1.0.0" }, "dependencies": { @@ -4262,8 +4262,8 @@ "integrity": "sha1-fz56l7gjksZTvwZYm9hRkOk8NoM=", "dev": true, "requires": { - "glob": "3.2.11", - "lodash": "2.4.2" + "glob": "~3.2.9", + "lodash": "~2.4.1" } }, "glob": { @@ -4272,8 +4272,8 @@ "integrity": "sha1-Spc/Y1uRkPcV0QmH1cAP0oFevj0=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimatch": "0.3.0" + "inherits": "2", + "minimatch": "0.3" } }, "lodash": { @@ -4288,8 +4288,8 @@ "integrity": "sha1-J12O2qxPG7MyZHIInnlJyDlGmd0=", "dev": true, "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" + "lru-cache": "2", + "sigmund": "~1.0.0" } } } @@ -4300,7 +4300,7 @@ "integrity": "sha1-C+0I2ovW6JaG+J/7AEM3+LrQbSI=", "dev": true, "requires": { - "minimatch": "1.0.0" + "minimatch": "^1.0.0" }, "dependencies": { "minimatch": { @@ -4309,8 +4309,8 @@ "integrity": "sha1-4N0hILSeG3JM6NcUxSCCKpQ4V20=", "dev": true, "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" + "lru-cache": "2", + "sigmund": "~1.0.0" } } } @@ -4327,8 +4327,8 @@ "integrity": "sha1-4ivJwD6dBRsyiBzFib0+jE5UFoo=", "dev": true, "requires": { - "event-stream": "3.0.20", - "istextorbinary": "1.0.2", + "event-stream": "~3.0.18", + "istextorbinary": "~1.0.0", "replacestream": "0.1.3" } }, @@ -4338,11 +4338,11 @@ "integrity": "sha1-iSOge0rBMaAYJdW0gt4xc3tfnJA=", "dev": true, "requires": { - "chalk": "1.1.3", - "gulp-util": "3.0.8", - "gzip-size": "1.0.0", - "pretty-bytes": "2.0.1", - "through2": "2.0.3" + "chalk": "^1.0.0", + "gulp-util": "^3.0.0", + "gzip-size": "^1.0.0", + "pretty-bytes": "^2.0.1", + "through2": "^2.0.0" }, "dependencies": { "ansi-styles": { @@ -4357,11 +4357,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -4378,17 +4378,17 @@ "integrity": "sha1-tDfR89mAzyboEYSCNxjOFa5ll7Y=", "dev": true, "requires": { - "@gulp-sourcemaps/map-sources": "1.0.0", - "acorn": "4.0.13", - "convert-source-map": "1.5.1", - "css": "2.2.1", - "debug-fabulous": "0.0.4", - "detect-newline": "2.1.0", - "graceful-fs": "4.1.11", - "source-map": "0.6.1", - "strip-bom": "2.0.0", - "through2": "2.0.3", - "vinyl": "1.2.0" + "@gulp-sourcemaps/map-sources": "1.X", + "acorn": "4.X", + "convert-source-map": "1.X", + "css": "2.X", + "debug-fabulous": "0.0.X", + "detect-newline": "2.X", + "graceful-fs": "4.X", + "source-map": "~0.6.0", + "strip-bom": "2.X", + "through2": "2.X", + "vinyl": "1.X" }, "dependencies": { "source-map": { @@ -4403,7 +4403,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "vinyl": { @@ -4412,8 +4412,8 @@ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } } @@ -4425,8 +4425,8 @@ "integrity": "sha1-96N3FbLQPRO65tr7i2fcJJ+SF6k=", "dev": true, "requires": { - "gulp-util": "3.0.8", - "object-assign": "2.1.1", + "gulp-util": "~3.0.1", + "object-assign": "^2.0.0", "uncss": "0.8.1" }, "dependencies": { @@ -4444,17 +4444,17 @@ "integrity": "sha1-s/RpLxVrVCEApFfhrBzsT2znYP4=", "dev": true, "requires": { - "brace-expansion": "1.1.11", - "event-stream": "3.3.4", - "gulp-concat": "2.6.1", - "gulp-if": "1.2.5", - "gulp-util": "3.0.8", - "is-relative-url": "1.0.0", - "lodash": "3.10.1", - "multimatch": "2.1.0", - "node-useref": "0.3.15", - "through2": "0.6.5", - "vinyl-fs": "1.0.0" + "brace-expansion": "^1.1.0", + "event-stream": "^3.3.1", + "gulp-concat": "^2.5.2", + "gulp-if": "^1.2.5", + "gulp-util": "^3.0.1", + "is-relative-url": "^1.0.0", + "lodash": "^3.3.1", + "multimatch": "^2.0.0", + "node-useref": "^0.3.1", + "through2": "^0.6.1", + "vinyl-fs": "^1.0.0" }, "dependencies": { "array-differ": { @@ -4469,7 +4469,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -4490,13 +4490,13 @@ "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "dev": true, "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" } }, "glob": { @@ -4505,10 +4505,10 @@ "integrity": "sha1-xstz0yJsHv7wTePFbQEvAzd+4V8=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "2.0.10", - "once": "1.4.0" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^2.0.1", + "once": "^1.3.0" }, "dependencies": { "minimatch": { @@ -4517,7 +4517,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.0.0" } } } @@ -4528,12 +4528,12 @@ "integrity": "sha1-uELfENaIx+trz869hG84UilrMgA=", "dev": true, "requires": { - "glob": "4.5.3", - "glob2base": "0.0.12", - "minimatch": "2.0.10", - "ordered-read-streams": "0.1.0", - "through2": "0.6.5", - "unique-stream": "2.2.1" + "glob": "^4.3.1", + "glob2base": "^0.0.12", + "minimatch": "^2.0.1", + "ordered-read-streams": "^0.1.0", + "through2": "^0.6.1", + "unique-stream": "^2.0.2" }, "dependencies": { "minimatch": { @@ -4542,7 +4542,7 @@ "integrity": "sha1-jQh8OcazjAAbl/ynzm0OHoCvusc=", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.0.0" } } } @@ -4553,7 +4553,7 @@ "integrity": "sha1-aK62Yefizo02NDgbLsQV8AxrwqQ=", "dev": true, "requires": { - "gaze": "0.5.2" + "gaze": "^0.5.1" } }, "graceful-fs": { @@ -4562,7 +4562,7 @@ "integrity": "sha1-dhPHeKGv6mLyXGMKCG1/Osu92Bg=", "dev": true, "requires": { - "natives": "1.1.2" + "natives": "^1.1.0" } }, "isarray": { @@ -4589,10 +4589,10 @@ "integrity": "sha1-nHkGoi+0wCkZ4vX3UWG0zb1LKis=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-union": "1.0.2", - "arrify": "1.0.1", - "minimatch": "3.0.4" + "array-differ": "^1.0.0", + "array-union": "^1.0.1", + "arrify": "^1.0.0", + "minimatch": "^3.0.0" } }, "object-assign": { @@ -4607,10 +4607,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "split": { @@ -4619,7 +4619,7 @@ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "dev": true, "requires": { - "through": "2.3.8" + "through": "2" } }, "string_decoder": { @@ -4634,8 +4634,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "unique-stream": { @@ -4644,8 +4644,8 @@ "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", "dev": true, "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" + "json-stable-stringify": "^1.0.0", + "through2-filter": "^2.0.0" } }, "vinyl": { @@ -4654,8 +4654,8 @@ "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" + "clone": "^0.2.0", + "clone-stats": "^0.0.1" } }, "vinyl-fs": { @@ -4664,16 +4664,16 @@ "integrity": "sha1-0VdS5owtrXQ2Tn6FNHNzU1RpLt8=", "dev": true, "requires": { - "duplexify": "3.5.4", - "glob-stream": "4.1.1", - "glob-watcher": "0.0.8", - "graceful-fs": "3.0.11", - "merge-stream": "0.1.8", - "mkdirp": "0.5.0", - "object-assign": "2.1.1", - "strip-bom": "1.0.0", - "through2": "0.6.5", - "vinyl": "0.4.6" + "duplexify": "^3.2.0", + "glob-stream": "^4.0.1", + "glob-watcher": "^0.0.8", + "graceful-fs": "^3.0.0", + "merge-stream": "^0.1.7", + "mkdirp": "^0.5.0", + "object-assign": "^2.0.0", + "strip-bom": "^1.0.0", + "through2": "^0.6.1", + "vinyl": "^0.4.0" } } } @@ -4684,24 +4684,24 @@ "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-uniq": "1.0.3", - "beeper": "1.1.1", - "chalk": "1.1.3", - "dateformat": "2.2.0", - "fancy-log": "1.3.2", - "gulplog": "1.0.0", - "has-gulplog": "0.1.0", - "lodash._reescape": "3.0.0", - "lodash._reevaluate": "3.0.0", - "lodash._reinterpolate": "3.0.0", - "lodash.template": "3.6.2", - "minimist": "1.2.0", - "multipipe": "0.1.2", - "object-assign": "3.0.0", + "array-differ": "^1.0.0", + "array-uniq": "^1.0.2", + "beeper": "^1.0.0", + "chalk": "^1.0.0", + "dateformat": "^2.0.0", + "fancy-log": "^1.1.0", + "gulplog": "^1.0.0", + "has-gulplog": "^0.1.0", + "lodash._reescape": "^3.0.0", + "lodash._reevaluate": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.template": "^3.0.0", + "minimist": "^1.1.0", + "multipipe": "^0.1.2", + "object-assign": "^3.0.0", "replace-ext": "0.0.1", - "through2": "2.0.3", - "vinyl": "0.5.3" + "through2": "^2.0.0", + "vinyl": "^0.5.0" }, "dependencies": { "ansi-styles": { @@ -4728,11 +4728,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "object-assign": { @@ -4755,10 +4755,10 @@ "integrity": "sha1-AvclbsFYYmMp3vzqG6TYeuSdpDs=", "dev": true, "requires": { - "gulp-util": "3.0.8", - "mkdirp": "0.5.0", - "through2": "0.6.5", - "vulcanize": "0.4.3" + "gulp-util": "^3.0.0", + "mkdirp": "^0.5.0", + "through2": "^0.6.1", + "vulcanize": "^0.4.2" }, "dependencies": { "isarray": { @@ -4773,10 +4773,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -4791,8 +4791,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -4803,7 +4803,7 @@ "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=", "dev": true, "requires": { - "glogg": "1.0.1" + "glogg": "^1.0.0" } }, "gzip-size": { @@ -4812,8 +4812,8 @@ "integrity": "sha1-Zs+LEBBHInuVus5uodoMF37Vwi8=", "dev": true, "requires": { - "browserify-zlib": "0.1.4", - "concat-stream": "1.6.0" + "browserify-zlib": "^0.1.4", + "concat-stream": "^1.4.1" } }, "har-schema": { @@ -4828,8 +4828,8 @@ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", "dev": true, "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" + "ajv": "^4.9.1", + "har-schema": "^1.0.5" } }, "has": { @@ -4838,7 +4838,7 @@ "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.0.2" } }, "has-ansi": { @@ -4847,7 +4847,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "has-flag": { @@ -4862,7 +4862,7 @@ "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=", "dev": true, "requires": { - "sparkles": "1.0.0" + "sparkles": "^1.0.0" } }, "has-value": { @@ -4871,9 +4871,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -4882,8 +4882,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -4892,7 +4892,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4903,8 +4903,8 @@ "integrity": "sha1-eNfL/B5tZjA/55g3NlmEUXsvbuE=", "dev": true, "requires": { - "is-stream": "1.1.0", - "pinkie-promise": "2.0.1" + "is-stream": "^1.0.1", + "pinkie-promise": "^2.0.0" } }, "hawk": { @@ -4913,10 +4913,10 @@ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" + "boom": "2.x.x", + "cryptiles": "2.x.x", + "hoek": "2.x.x", + "sntp": "1.x.x" } }, "hoek": { @@ -4931,7 +4931,7 @@ "integrity": "sha1-TCu8inWJmP7r9e1oWA921GdotLw=", "dev": true, "requires": { - "parse-passwd": "1.0.0" + "parse-passwd": "^1.0.0" } }, "hosted-git-info": { @@ -4953,11 +4953,11 @@ "integrity": "sha1-mWwosZFRaovoZQGn15dX5ccMEGg=", "dev": true, "requires": { - "domelementtype": "1.3.0", - "domhandler": "2.3.0", - "domutils": "1.5.1", - "entities": "1.0.0", - "readable-stream": "1.1.14" + "domelementtype": "1", + "domhandler": "2.3", + "domutils": "1.5", + "entities": "1.0", + "readable-stream": "1.1" }, "dependencies": { "isarray": { @@ -4972,10 +4972,10 @@ "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -4994,7 +4994,7 @@ "depd": "1.1.1", "inherits": "2.0.3", "setprototypeof": "1.0.3", - "statuses": "1.4.0" + "statuses": ">= 1.3.1 < 2" }, "dependencies": { "depd": { @@ -5015,9 +5015,9 @@ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", "dev": true, "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.14.1" + "assert-plus": "^0.2.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" } }, "iconv-lite": { @@ -5031,12 +5031,12 @@ "integrity": "sha1-8Zwu7h5xumxlWMUV+fyWaAGJptQ=", "dev": true, "requires": { - "file-type": "4.4.0", - "globby": "6.1.0", - "make-dir": "1.2.0", - "p-pipe": "1.2.0", - "pify": "2.3.0", - "replace-ext": "1.0.0" + "file-type": "^4.1.0", + "globby": "^6.1.0", + "make-dir": "^1.0.0", + "p-pipe": "^1.1.0", + "pify": "^2.3.0", + "replace-ext": "^1.0.0" }, "dependencies": { "array-union": { @@ -5045,7 +5045,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -5060,11 +5060,11 @@ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.2", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "replace-ext": { @@ -5082,9 +5082,9 @@ "dev": true, "optional": true, "requires": { - "exec-buffer": "3.2.0", - "gifsicle": "3.0.4", - "is-gif": "1.0.0" + "exec-buffer": "^3.0.0", + "gifsicle": "^3.0.0", + "is-gif": "^1.0.0" } }, "imagemin-mozjpeg": { @@ -5094,9 +5094,9 @@ "dev": true, "optional": true, "requires": { - "exec-buffer": "3.2.0", - "is-jpg": "1.0.1", - "mozjpeg": "4.1.1" + "exec-buffer": "^3.0.0", + "is-jpg": "^1.0.0", + "mozjpeg": "^4.0.0" } }, "imagemin-optipng": { @@ -5106,9 +5106,9 @@ "dev": true, "optional": true, "requires": { - "exec-buffer": "3.2.0", - "is-png": "1.1.0", - "optipng-bin": "3.1.4" + "exec-buffer": "^3.0.0", + "is-png": "^1.0.0", + "optipng-bin": "^3.0.0" } }, "imagemin-svgo": { @@ -5118,8 +5118,8 @@ "dev": true, "optional": true, "requires": { - "is-svg": "2.1.0", - "svgo": "0.7.2" + "is-svg": "^2.0.0", + "svgo": "^0.7.0" } }, "indent-string": { @@ -5128,7 +5128,7 @@ "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "inflight": { @@ -5137,8 +5137,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -5182,8 +5182,8 @@ "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", "dev": true, "requires": { - "is-relative": "1.0.0", - "is-windows": "1.0.2" + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" } }, "is-absolute-url": { @@ -5198,7 +5198,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-arrayish": { @@ -5219,7 +5219,7 @@ "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", "dev": true, "requires": { - "builtin-modules": "1.1.1" + "builtin-modules": "^1.0.0" } }, "is-bzip2": { @@ -5240,7 +5240,7 @@ "integrity": "sha1-9zkzayYyNlBhqdSCcM1WrjNpMY4=", "dev": true, "requires": { - "ci-info": "1.1.3" + "ci-info": "^1.0.0" } }, "is-data-descriptor": { @@ -5249,7 +5249,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-date-object": { @@ -5264,9 +5264,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } }, "is-dotfile": { @@ -5281,7 +5281,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -5302,7 +5302,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -5311,7 +5311,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-gif": { @@ -5327,7 +5327,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } }, "is-gzip": { @@ -5342,8 +5342,8 @@ "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=", "dev": true, "requires": { - "global-dirs": "0.1.1", - "is-path-inside": "1.0.1" + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" } }, "is-jpg": { @@ -5365,11 +5365,11 @@ "integrity": "sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg==", "dev": true, "requires": { - "generate-function": "2.0.0", - "generate-object-property": "1.2.0", - "is-my-ip-valid": "1.0.0", - "jsonpointer": "4.0.1", - "xtend": "4.0.1" + "generate-function": "^2.0.0", + "generate-object-property": "^1.1.0", + "is-my-ip-valid": "^1.0.0", + "jsonpointer": "^4.0.0", + "xtend": "^4.0.0" } }, "is-natural-number": { @@ -5384,7 +5384,7 @@ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -5393,7 +5393,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -5410,7 +5410,7 @@ "integrity": "sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ==", "dev": true, "requires": { - "is-number": "4.0.0" + "is-number": "^4.0.0" }, "dependencies": { "is-number": { @@ -5433,7 +5433,7 @@ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { - "is-path-inside": "1.0.1" + "is-path-inside": "^1.0.0" } }, "is-path-inside": { @@ -5442,7 +5442,7 @@ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.1" } }, "is-plain-object": { @@ -5451,7 +5451,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-png": { @@ -5497,7 +5497,7 @@ "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", "dev": true, "requires": { - "has": "1.0.1" + "has": "^1.0.1" } }, "is-relative": { @@ -5506,7 +5506,7 @@ "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", "dev": true, "requires": { - "is-unc-path": "1.0.0" + "is-unc-path": "^1.0.0" } }, "is-relative-url": { @@ -5515,7 +5515,7 @@ "integrity": "sha1-h6nTXop4m0ngebTX1p1kYS6ODh8=", "dev": true, "requires": { - "is-absolute-url": "1.0.0" + "is-absolute-url": "^1.0.0" } }, "is-retry-allowed": { @@ -5537,7 +5537,7 @@ "dev": true, "optional": true, "requires": { - "html-comment-regex": "1.1.1" + "html-comment-regex": "^1.1.0" } }, "is-symbol": { @@ -5564,7 +5564,7 @@ "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", "dev": true, "requires": { - "unc-path-regex": "0.1.2" + "unc-path-regex": "^0.1.2" } }, "is-url": { @@ -5633,8 +5633,8 @@ "integrity": "sha1-rOGTVNGpoBc+/rEITOD4ewrX3s8=", "dev": true, "requires": { - "binaryextensions": "1.0.1", - "textextensions": "1.0.2" + "binaryextensions": "~1.0.0", + "textextensions": "~1.0.0" } }, "items": { @@ -5649,11 +5649,11 @@ "integrity": "sha1-M4WseQGSEwy+Iw6ALsAskhW7/to=", "dev": true, "requires": { - "hoek": "4.2.1", - "isemail": "2.2.1", - "items": "2.1.1", - "moment": "2.21.0", - "topo": "2.0.2" + "hoek": "4.x.x", + "isemail": "2.x.x", + "items": "2.x.x", + "moment": "2.x.x", + "topo": "2.x.x" }, "dependencies": { "hoek": { @@ -5677,8 +5677,8 @@ "dev": true, "optional": true, "requires": { - "argparse": "1.0.10", - "esprima": "2.7.3" + "argparse": "^1.0.7", + "esprima": "^2.6.0" } }, "jsbn": { @@ -5694,14 +5694,14 @@ "integrity": "sha1-HnJSkVzmgbQIJ+4UJIxG006apiw=", "dev": true, "requires": { - "cli": "1.0.1", - "console-browserify": "1.1.0", - "exit": "0.1.2", - "htmlparser2": "3.8.3", - "lodash": "3.7.0", - "minimatch": "3.0.4", - "shelljs": "0.3.0", - "strip-json-comments": "1.0.4" + "cli": "~1.0.0", + "console-browserify": "1.1.x", + "exit": "0.1.x", + "htmlparser2": "3.8.x", + "lodash": "3.7.x", + "minimatch": "~3.0.2", + "shelljs": "0.3.x", + "strip-json-comments": "1.0.x" }, "dependencies": { "lodash": { @@ -5724,10 +5724,10 @@ "integrity": "sha1-6Z88w0CvsY4qdwL4eY10AMoxRGo=", "dev": true, "requires": { - "chalk": "1.1.3", - "log-symbols": "1.0.2", - "string-length": "1.0.1", - "text-table": "0.2.0" + "chalk": "^1.0.0", + "log-symbols": "^1.0.0", + "string-length": "^1.0.0", + "text-table": "^0.2.0" }, "dependencies": { "ansi-styles": { @@ -5742,11 +5742,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -5775,7 +5775,7 @@ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", "dev": true, "requires": { - "jsonify": "0.0.0" + "jsonify": "~0.0.0" } }, "json-stringify-safe": { @@ -5790,7 +5790,7 @@ "integrity": "sha1-pezG9l9T9mLEQVx2daAzHQmS7GY=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "jsonify": { @@ -5831,9 +5831,9 @@ "integrity": "sha1-/Xlgnx53Limdzo3bdtAGWd2DUR8=", "dev": true, "requires": { - "base64url": "0.0.6", - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.9" + "base64url": "~0.0.4", + "buffer-equal-constant-time": "^1.0.1", + "ecdsa-sig-formatter": "^1.0.0" }, "dependencies": { "base64url": { @@ -5850,8 +5850,8 @@ "integrity": "sha1-2l8meJfdTpz4E3l52zP8VKPAVBg=", "dev": true, "requires": { - "base64url": "1.0.6", - "jwa": "1.0.2" + "base64url": "~1.0.4", + "jwa": "~1.0.0" } }, "kew": { @@ -5872,7 +5872,7 @@ "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.9" } }, "lazy-ass": { @@ -5906,7 +5906,7 @@ "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", "dev": true, "requires": { - "readable-stream": "2.3.5" + "readable-stream": "^2.0.5" } }, "liftoff": { @@ -5915,14 +5915,14 @@ "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", "dev": true, "requires": { - "extend": "3.0.1", - "findup-sync": "2.0.0", - "fined": "1.1.0", - "flagged-respawn": "1.0.0", - "is-plain-object": "2.0.4", - "object.map": "1.0.1", - "rechoir": "0.6.2", - "resolve": "1.6.0" + "extend": "^3.0.0", + "findup-sync": "^2.0.0", + "fined": "^1.0.1", + "flagged-respawn": "^1.0.0", + "is-plain-object": "^2.0.4", + "object.map": "^1.0.0", + "rechoir": "^0.6.2", + "resolve": "^1.1.7" } }, "listr": { @@ -5931,22 +5931,22 @@ "integrity": "sha1-a84sD1YD+klYDqF81qAMwOX6RRo=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "figures": "1.7.0", - "indent-string": "2.1.0", - "is-promise": "2.1.0", - "is-stream": "1.1.0", - "listr-silent-renderer": "1.1.1", - "listr-update-renderer": "0.2.0", - "listr-verbose-renderer": "0.4.1", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "ora": "0.2.3", - "p-map": "1.2.0", - "rxjs": "5.5.8", - "stream-to-observable": "0.1.0", - "strip-ansi": "3.0.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "figures": "^1.7.0", + "indent-string": "^2.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.2.0", + "listr-verbose-renderer": "^0.4.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "ora": "^0.2.3", + "p-map": "^1.1.1", + "rxjs": "^5.0.0-beta.11", + "stream-to-observable": "^0.1.0", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-styles": { @@ -5961,11 +5961,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -5988,14 +5988,14 @@ "integrity": "sha1-yoDhd5tOcCZoB+ju0a1qvjmFUPk=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-truncate": "0.2.1", - "elegant-spinner": "1.0.1", - "figures": "1.7.0", - "indent-string": "3.2.0", - "log-symbols": "1.0.2", - "log-update": "1.0.2", - "strip-ansi": "3.0.1" + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^1.0.2", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-styles": { @@ -6010,11 +6010,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "indent-string": { @@ -6037,10 +6037,10 @@ "integrity": "sha1-ggb0z21S3cWCfl/RSYng6WWTOjU=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "date-fns": "1.29.0", - "figures": "1.7.0" + "chalk": "^1.1.3", + "cli-cursor": "^1.0.2", + "date-fns": "^1.27.2", + "figures": "^1.7.0" }, "dependencies": { "ansi-styles": { @@ -6055,11 +6055,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -6076,11 +6076,11 @@ "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" }, "dependencies": { "strip-bom": { @@ -6089,7 +6089,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -6166,7 +6166,7 @@ "integrity": "sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg=", "dev": true, "requires": { - "lodash._root": "3.0.1" + "lodash._root": "^3.0.0" } }, "lodash.isarguments": { @@ -6193,9 +6193,9 @@ "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", "dev": true, "requires": { - "lodash._getnative": "3.9.1", - "lodash.isarguments": "3.1.0", - "lodash.isarray": "3.0.4" + "lodash._getnative": "^3.0.0", + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" } }, "lodash.once": { @@ -6216,15 +6216,15 @@ "integrity": "sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8=", "dev": true, "requires": { - "lodash._basecopy": "3.0.1", - "lodash._basetostring": "3.0.1", - "lodash._basevalues": "3.0.0", - "lodash._isiterateecall": "3.0.9", - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0", - "lodash.keys": "3.1.2", - "lodash.restparam": "3.6.1", - "lodash.templatesettings": "3.1.1" + "lodash._basecopy": "^3.0.0", + "lodash._basetostring": "^3.0.0", + "lodash._basevalues": "^3.0.0", + "lodash._isiterateecall": "^3.0.0", + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0", + "lodash.keys": "^3.0.0", + "lodash.restparam": "^3.0.0", + "lodash.templatesettings": "^3.0.0" } }, "lodash.templatesettings": { @@ -6233,8 +6233,8 @@ "integrity": "sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU=", "dev": true, "requires": { - "lodash._reinterpolate": "3.0.0", - "lodash.escape": "3.2.0" + "lodash._reinterpolate": "^3.0.0", + "lodash.escape": "^3.0.0" } }, "log-symbols": { @@ -6243,7 +6243,7 @@ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" }, "dependencies": { "ansi-styles": { @@ -6258,11 +6258,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -6279,8 +6279,8 @@ "integrity": "sha1-GZKfZMQJPS0ucHWh2tivWcKWuNE=", "dev": true, "requires": { - "ansi-escapes": "1.4.0", - "cli-cursor": "1.0.2" + "ansi-escapes": "^1.0.0", + "cli-cursor": "^1.0.2" } }, "logalot": { @@ -6290,8 +6290,8 @@ "dev": true, "optional": true, "requires": { - "figures": "1.7.0", - "squeak": "1.3.0" + "figures": "^1.3.5", + "squeak": "^1.0.0" } }, "longest": { @@ -6306,8 +6306,8 @@ "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lowercase-keys": { @@ -6323,10 +6323,10 @@ "dev": true, "optional": true, "requires": { - "get-stdin": "4.0.1", - "indent-string": "2.1.0", - "longest": "1.0.1", - "meow": "3.7.0" + "get-stdin": "^4.0.1", + "indent-string": "^2.1.0", + "longest": "^1.0.0", + "meow": "^3.3.0" } }, "lru-cache": { @@ -6341,7 +6341,7 @@ "integrity": "sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" }, "dependencies": { "pify": { @@ -6358,7 +6358,7 @@ "integrity": "sha1-V7713IXSOSO6I3ZzJNjo+PPZaUs=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.1.0" }, "dependencies": { "kind-of": { @@ -6367,7 +6367,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -6396,7 +6396,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "media-typer": { @@ -6416,16 +6416,16 @@ "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", "dev": true, "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.4.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" } }, "merge-descriptors": { @@ -6439,7 +6439,7 @@ "integrity": "sha1-SKB7O0oSHXSj7b/c20sIrb8CQLE=", "dev": true, "requires": { - "through2": "0.6.5" + "through2": "^0.6.1" }, "dependencies": { "isarray": { @@ -6454,10 +6454,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -6472,8 +6472,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -6489,19 +6489,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.1", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "extglob": "2.0.4", - "fragment-cache": "0.2.1", - "kind-of": "6.0.2", - "nanomatch": "1.2.9", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" } }, "mime": { @@ -6519,7 +6519,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" } }, "minimatch": { @@ -6528,7 +6528,7 @@ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -6543,8 +6543,8 @@ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -6553,7 +6553,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -6588,9 +6588,9 @@ "dev": true, "optional": true, "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" + "bin-build": "^2.0.0", + "bin-wrapper": "^3.0.0", + "logalot": "^2.0.0" } }, "ms": { @@ -6604,9 +6604,9 @@ "integrity": "sha1-3N90mJb1FIDg4cSNq5y6Qe30ZKs=", "dev": true, "requires": { - "array-differ": "1.0.0", - "array-union": "1.0.2", - "minimatch": "1.0.0" + "array-differ": "^1.0.0", + "array-union": "^1.0.0", + "minimatch": "^1.0.0" }, "dependencies": { "array-differ": { @@ -6621,7 +6621,7 @@ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -6636,8 +6636,8 @@ "integrity": "sha1-4N0hILSeG3JM6NcUxSCCKpQ4V20=", "dev": true, "requires": { - "lru-cache": "2.7.3", - "sigmund": "1.0.1" + "lru-cache": "2", + "sigmund": "~1.0.0" } } } @@ -6657,18 +6657,18 @@ "integrity": "sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-odd": "2.0.0", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-odd": "^2.0.0", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "natives": { @@ -6706,7 +6706,7 @@ "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", "dev": true, "requires": { - "abbrev": "1.1.1" + "abbrev": "1" } }, "normalize-package-data": { @@ -6715,10 +6715,10 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.6.0", - "is-builtin-module": "1.0.0", - "semver": "4.3.6", - "validate-npm-package-license": "3.0.3" + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -6727,7 +6727,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "npm-run-all": { @@ -6736,15 +6736,15 @@ "integrity": "sha512-Z2aRlajMK4SQ8u19ZA75NZZu7wupfCNQWdYosIi8S6FgBdGf/8Y6Hgyjdc8zU2cYmIRVCx1nM80tJPkdEd+UYg==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "chalk": "2.3.2", - "cross-spawn": "5.1.0", - "memorystream": "0.3.1", - "minimatch": "3.0.4", - "ps-tree": "1.1.0", - "read-pkg": "3.0.0", - "shell-quote": "1.6.1", - "string.prototype.padend": "3.0.0" + "ansi-styles": "^3.2.0", + "chalk": "^2.1.0", + "cross-spawn": "^5.1.0", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "ps-tree": "^1.1.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" }, "dependencies": { "load-json-file": { @@ -6753,10 +6753,10 @@ "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" } }, "parse-json": { @@ -6765,8 +6765,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.1", - "json-parse-better-errors": "1.0.1" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } }, "path-type": { @@ -6775,7 +6775,7 @@ "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" } }, "pify": { @@ -6790,9 +6790,9 @@ "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.4.0", - "path-type": "3.0.0" + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" } }, "strip-bom": { @@ -6809,7 +6809,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "number-is-nan": { @@ -6836,9 +6836,9 @@ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -6847,7 +6847,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { @@ -6856,7 +6856,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-data-descriptor": { @@ -6865,7 +6865,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-descriptor": { @@ -6874,9 +6874,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -6893,7 +6893,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -6910,7 +6910,7 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.defaults": { @@ -6919,10 +6919,10 @@ "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", "dev": true, "requires": { - "array-each": "1.0.1", - "array-slice": "1.1.0", - "for-own": "1.0.0", - "isobject": "3.0.1" + "array-each": "^1.0.1", + "array-slice": "^1.0.0", + "for-own": "^1.0.0", + "isobject": "^3.0.0" } }, "object.map": { @@ -6931,8 +6931,8 @@ "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", "dev": true, "requires": { - "for-own": "1.0.0", - "make-iterator": "1.0.0" + "for-own": "^1.0.0", + "make-iterator": "^1.0.0" } }, "object.omit": { @@ -6941,8 +6941,8 @@ "integrity": "sha1-nRfqFneOUFfeundSxvVfFJaCnpQ=", "dev": true, "requires": { - "for-own": "0.1.5", - "isobject": "1.0.2" + "for-own": "^0.1.3", + "isobject": "^1.0.0" }, "dependencies": { "for-own": { @@ -6951,7 +6951,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "isobject": { @@ -6968,7 +6968,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "on-finished": { @@ -6985,7 +6985,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -7001,9 +7001,9 @@ "dev": true, "optional": true, "requires": { - "bin-build": "2.2.0", - "bin-wrapper": "3.0.2", - "logalot": "2.1.0" + "bin-build": "^2.0.0", + "bin-wrapper": "^3.0.0", + "logalot": "^2.0.0" } }, "ora": { @@ -7012,10 +7012,10 @@ "integrity": "sha1-N1J9Igrc1Tw5tzVx11QVbV22V6Q=", "dev": true, "requires": { - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-spinners": "0.1.2", - "object-assign": "4.1.1" + "chalk": "^1.1.1", + "cli-cursor": "^1.0.2", + "cli-spinners": "^0.1.2", + "object-assign": "^4.0.1" }, "dependencies": { "ansi-styles": { @@ -7030,11 +7030,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -7051,9 +7051,9 @@ "integrity": "sha1-FOfp4nZPcxX7rBhOUGx6pt+UrX4=", "dev": true, "requires": { - "end-of-stream": "0.1.5", - "sequencify": "0.0.7", - "stream-consume": "0.1.1" + "end-of-stream": "~0.1.5", + "sequencify": "~0.0.7", + "stream-consume": "~0.1.0" } }, "ordered-read-streams": { @@ -7111,9 +7111,9 @@ "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", "dev": true, "requires": { - "is-absolute": "1.0.0", - "map-cache": "0.2.2", - "path-root": "0.1.1" + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" } }, "parse-glob": { @@ -7122,10 +7122,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "is-extglob": { @@ -7140,7 +7140,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -7151,7 +7151,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "^1.2.0" } }, "parse-passwd": { @@ -7183,7 +7183,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "path-is-absolute": { @@ -7216,7 +7216,7 @@ "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", "dev": true, "requires": { - "path-root-regex": "0.1.2" + "path-root-regex": "^0.1.0" } }, "path-root-regex": { @@ -7236,9 +7236,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pause-stream": { @@ -7247,7 +7247,7 @@ "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "dev": true, "requires": { - "through": "2.3.8" + "through": "~2.3" } }, "pend": { @@ -7268,14 +7268,14 @@ "integrity": "sha1-RCSsog4U0lXAsIia9va4lz2hDg0=", "dev": true, "requires": { - "extract-zip": "1.5.0", - "fs-extra": "0.26.7", - "hasha": "2.2.0", - "kew": "0.7.0", - "progress": "1.1.8", - "request": "2.67.0", - "request-progress": "2.0.1", - "which": "1.2.14" + "extract-zip": "~1.5.0", + "fs-extra": "~0.26.4", + "hasha": "^2.2.0", + "kew": "~0.7.0", + "progress": "~1.1.8", + "request": "~2.67.0", + "request-progress": "~2.0.1", + "which": "~1.2.2" }, "dependencies": { "ansi-styles": { @@ -7290,7 +7290,7 @@ "integrity": "sha1-/FQhoo/UImA2w7OJGmaiW8ZNIm4=", "dev": true, "requires": { - "readable-stream": "2.0.6" + "readable-stream": "~2.0.5" } }, "caseless": { @@ -7305,11 +7305,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "concat-stream": { @@ -7318,9 +7318,9 @@ "integrity": "sha1-U/fUPFHF5D+ByP3QMyHGMb5o1hE=", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.0.6", - "typedarray": "0.0.6" + "inherits": "~2.0.1", + "readable-stream": "~2.0.0", + "typedarray": "~0.0.5" } }, "debug": { @@ -7347,9 +7347,9 @@ "integrity": "sha1-rjFduaSQf6BlUCMEpm13M0de43w=", "dev": true, "requires": { - "async": "2.1.4", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" + "async": "^2.0.1", + "combined-stream": "^1.0.5", + "mime-types": "^2.1.11" } }, "fs-extra": { @@ -7358,11 +7358,11 @@ "integrity": "sha1-muH92UiXeY7at20JGM9C0MMYT6k=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "jsonfile": "2.4.0", - "klaw": "1.3.1", - "path-is-absolute": "1.0.1", - "rimraf": "2.6.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^2.1.0", + "klaw": "^1.0.0", + "path-is-absolute": "^1.0.0", + "rimraf": "^2.2.8" } }, "har-validator": { @@ -7371,10 +7371,10 @@ "integrity": "sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0=", "dev": true, "requires": { - "chalk": "1.1.3", - "commander": "2.11.0", - "is-my-json-valid": "2.17.2", - "pinkie-promise": "2.0.1" + "chalk": "^1.1.1", + "commander": "^2.9.0", + "is-my-json-valid": "^2.12.4", + "pinkie-promise": "^2.0.0" } }, "jsonfile": { @@ -7383,7 +7383,7 @@ "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", "dev": true, "requires": { - "graceful-fs": "4.1.11" + "graceful-fs": "^4.1.6" } }, "node-uuid": { @@ -7410,12 +7410,12 @@ "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "1.0.7", - "string_decoder": "0.10.31", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" } }, "request": { @@ -7424,26 +7424,26 @@ "integrity": "sha1-ivdHgOK/EeoK6aqWXBHxGv0nJ0I=", "dev": true, "requires": { - "aws-sign2": "0.6.0", - "bl": "1.0.3", - "caseless": "0.11.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "1.0.1", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "node-uuid": "1.4.8", - "oauth-sign": "0.8.2", - "qs": "5.2.1", - "stringstream": "0.0.5", - "tough-cookie": "2.2.2", - "tunnel-agent": "0.4.3" + "aws-sign2": "~0.6.0", + "bl": "~1.0.0", + "caseless": "~0.11.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~1.0.0-rc3", + "har-validator": "~2.0.2", + "hawk": "~3.1.0", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "node-uuid": "~1.4.7", + "oauth-sign": "~0.8.0", + "qs": "~5.2.0", + "stringstream": "~0.0.4", + "tough-cookie": "~2.2.0", + "tunnel-agent": "~0.4.1" } }, "request-progress": { @@ -7452,7 +7452,7 @@ "integrity": "sha1-XTa7V5YcZzqlt4jbyBQf3yO0Tgg=", "dev": true, "requires": { - "throttleit": "1.0.0" + "throttleit": "^1.0.0" } }, "string_decoder": { @@ -7491,7 +7491,7 @@ "integrity": "sha1-mofEN48D6CfOyvGs31bHNsAcFOU=", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "yauzl": { @@ -7500,7 +7500,7 @@ "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", "dev": true, "requires": { - "fd-slicer": "1.0.1" + "fd-slicer": "~1.0.1" } } } @@ -7523,7 +7523,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "plur": { @@ -7532,7 +7532,7 @@ "integrity": "sha1-dIJFLBoPUI4+NE6uwxLJHCncZVo=", "dev": true, "requires": { - "irregular-plurals": "1.4.0" + "irregular-plurals": "^1.0.0" } }, "pluralize": { @@ -7553,8 +7553,8 @@ "integrity": "sha1-wENE4kSeRYa5Vfvkp093CA2EVx8=", "dev": true, "requires": { - "js-base64": "2.1.9", - "source-map": "0.1.43" + "js-base64": "~2.1.5", + "source-map": "~0.1.40" }, "dependencies": { "source-map": { @@ -7563,7 +7563,7 @@ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -7586,9 +7586,9 @@ "integrity": "sha1-FV7E0ANvQTkecEXW2+SWPVJdJk8=", "dev": true, "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0", - "number-is-nan": "1.0.1" + "get-stdin": "^4.0.1", + "meow": "^3.1.0", + "number-is-nan": "^1.0.0" } }, "pretty-hrtime": { @@ -7614,7 +7614,7 @@ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", "requires": { - "forwarded": "0.1.2", + "forwarded": "~0.1.2", "ipaddr.js": "1.6.0" } }, @@ -7624,7 +7624,7 @@ "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", "dev": true, "requires": { - "event-stream": "3.3.4" + "event-stream": "~3.3.0" }, "dependencies": { "event-stream": { @@ -7633,13 +7633,13 @@ "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "dev": true, "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" } }, "map-stream": { @@ -7654,7 +7654,7 @@ "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "dev": true, "requires": { - "through": "2.3.8" + "through": "2" } } } @@ -7671,11 +7671,11 @@ "integrity": "sha1-0mOcWQHq+bbRTeqfkJVWvIgom64=", "dev": true, "requires": { - "chalk": "0.5.1", + "chalk": "^0.5.1", "gpagespeed": "0.0.8", - "minimist": "1.2.0", - "prepend-http": "1.0.4", - "pretty-bytes": "1.0.4" + "minimist": "^1.1.0", + "prepend-http": "^1.0.0", + "pretty-bytes": "^1.0.1" }, "dependencies": { "ansi-regex": { @@ -7696,11 +7696,11 @@ "integrity": "sha1-Zjs6ZItotV0EaQ1JFnqoN4WPIXQ=", "dev": true, "requires": { - "ansi-styles": "1.1.0", - "escape-string-regexp": "1.0.5", - "has-ansi": "0.1.0", - "strip-ansi": "0.3.0", - "supports-color": "0.2.0" + "ansi-styles": "^1.1.0", + "escape-string-regexp": "^1.0.0", + "has-ansi": "^0.1.0", + "strip-ansi": "^0.3.0", + "supports-color": "^0.2.0" } }, "has-ansi": { @@ -7709,7 +7709,7 @@ "integrity": "sha1-hPJlqujA5qiKEtcCKJS3VoiUxi4=", "dev": true, "requires": { - "ansi-regex": "0.2.1" + "ansi-regex": "^0.2.0" } }, "pretty-bytes": { @@ -7718,8 +7718,8 @@ "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", "dev": true, "requires": { - "get-stdin": "4.0.1", - "meow": "3.7.0" + "get-stdin": "^4.0.1", + "meow": "^3.1.0" } }, "strip-ansi": { @@ -7728,7 +7728,7 @@ "integrity": "sha1-JfSOoiynkYfzF0pNuHWTR7sSYiA=", "dev": true, "requires": { - "ansi-regex": "0.2.1" + "ansi-regex": "^0.2.1" } }, "supports-color": { @@ -7775,8 +7775,8 @@ "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -7785,7 +7785,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -7812,10 +7812,10 @@ "integrity": "sha1-6xiYnG1PTxYsOZ953dKfODVWgJI=", "dev": true, "requires": { - "deep-extend": "0.4.2", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "~0.4.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" } }, "rcfinder": { @@ -7824,7 +7824,7 @@ "integrity": "sha1-8+gPOH3fmugK4wpBADKWQuroERU=", "dev": true, "requires": { - "lodash.clonedeep": "4.5.0" + "lodash.clonedeep": "^4.3.2" } }, "rcloader": { @@ -7833,8 +7833,8 @@ "integrity": "sha1-oJY6ZDfQnvjLktky0trUl7DRc2w=", "dev": true, "requires": { - "lodash": "2.4.2", - "rcfinder": "0.1.9" + "lodash": "~2.4.1", + "rcfinder": "~0.1.6" }, "dependencies": { "lodash": { @@ -7851,8 +7851,8 @@ "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", "dev": true, "requires": { - "pinkie-promise": "2.0.1", - "readable-stream": "2.3.5" + "pinkie-promise": "^2.0.0", + "readable-stream": "^2.0.0" } }, "read-pkg": { @@ -7861,9 +7861,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" } }, "read-pkg-up": { @@ -7872,8 +7872,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" } }, "readable-stream": { @@ -7882,13 +7882,13 @@ "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.0.3", + "util-deprecate": "~1.0.1" } }, "rechoir": { @@ -7897,7 +7897,7 @@ "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", "dev": true, "requires": { - "resolve": "1.6.0" + "resolve": "^1.1.6" } }, "redent": { @@ -7906,8 +7906,8 @@ "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", "dev": true, "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, "regenerator-runtime": { @@ -7922,7 +7922,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -7931,8 +7931,8 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, "remove-trailing-separator": { @@ -7959,7 +7959,7 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "replace-ext": { @@ -7974,7 +7974,7 @@ "integrity": "sha1-4BjTo3ckYAzNDABZkNiiG3tU/zQ=", "dev": true, "requires": { - "through": "2.3.8" + "through": "~2.3.4" } }, "request": { @@ -7983,28 +7983,28 @@ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", "dev": true, "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" + "aws-sign2": "~0.6.0", + "aws4": "^1.2.1", + "caseless": "~0.12.0", + "combined-stream": "~1.0.5", + "extend": "~3.0.0", + "forever-agent": "~0.6.1", + "form-data": "~2.1.1", + "har-validator": "~4.2.1", + "hawk": "~3.1.3", + "http-signature": "~1.1.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.7", + "oauth-sign": "~0.8.1", + "performance-now": "^0.2.0", + "qs": "~6.4.0", + "safe-buffer": "^5.0.1", + "stringstream": "~0.0.4", + "tough-cookie": "~2.3.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.0.0" }, "dependencies": { "qs": { @@ -8021,7 +8021,7 @@ "integrity": "sha1-ByHBBdipasayzossia4tXs/Pazo=", "dev": true, "requires": { - "throttleit": "0.0.2" + "throttleit": "~0.0.2" } }, "resolve": { @@ -8030,7 +8030,7 @@ "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==", "dev": true, "requires": { - "path-parse": "1.0.5" + "path-parse": "^1.0.5" } }, "resolve-dir": { @@ -8039,8 +8039,8 @@ "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", "dev": true, "requires": { - "expand-tilde": "2.0.2", - "global-modules": "1.0.0" + "expand-tilde": "^2.0.0", + "global-modules": "^1.0.0" } }, "resolve-url": { @@ -8055,8 +8055,8 @@ "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", "dev": true, "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" + "exit-hook": "^1.0.0", + "onetime": "^1.0.0" } }, "ret": { @@ -8071,7 +8071,7 @@ "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", "dev": true, "requires": { - "align-text": "0.1.4" + "align-text": "^0.1.1" } }, "rimraf": { @@ -8080,7 +8080,7 @@ "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", "dev": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "run-sequence": { @@ -8089,8 +8089,8 @@ "integrity": "sha1-UJWgvr6YczsBQL0I3YDsAw3azes=", "dev": true, "requires": { - "chalk": "2.3.2", - "gulp-util": "3.0.8" + "chalk": "*", + "gulp-util": "*" } }, "rx": { @@ -8100,9 +8100,9 @@ "dev": true }, "rxjs": { - "version": "5.5.8", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.8.tgz", - "integrity": "sha512-Bz7qou7VAIoGiglJZbzbXa4vpX5BmTTN2Dj/se6+SwADtw4SihqBIiEa7VmTXJ8pynvq0iFr5Gx9VLyye1rIxQ==", + "version": "5.5.10", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.10.tgz", + "integrity": "sha512-SRjimIDUHJkon+2hFo7xnvNC4ZEHGzCRwh9P7nzX3zPkCGFEg/tuElrNR7L/rZMagnK2JeH2jQwPRpmyXyLB6A==", "dev": true, "requires": { "symbol-observable": "1.0.1" @@ -8119,7 +8119,7 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" } }, "sax": { @@ -8135,7 +8135,7 @@ "integrity": "sha1-z+kXyz0nS8/6x5J1ivUxc+sfq9w=", "dev": true, "requires": { - "commander": "2.8.1" + "commander": "~2.8.1" }, "dependencies": { "commander": { @@ -8144,7 +8144,7 @@ "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=", "dev": true, "requires": { - "graceful-readlink": "1.0.1" + "graceful-readlink": ">= 1.0.0" } } } @@ -8169,7 +8169,7 @@ "dev": true, "optional": true, "requires": { - "semver": "5.5.0" + "semver": "^5.3.0" }, "dependencies": { "semver": { @@ -8187,18 +8187,18 @@ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.2", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" } }, "sequencify": { @@ -8213,10 +8213,10 @@ "integrity": "sha512-s7F8h2NrslMkG50KxvlGdj+ApSwaLex0vexuJ9iFf3GLTIp1ph/l1qZvRe9T9TJEYZgmq72ZwJ2VYiAEtChknw==", "dev": true, "requires": { - "etag": "1.8.1", + "etag": "~1.8.1", "fresh": "0.5.2", "ms": "2.0.0", - "parseurl": "1.3.2", + "parseurl": "~1.3.2", "safe-buffer": "5.1.1" } }, @@ -8225,9 +8225,9 @@ "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.2", "send": "0.16.2" } }, @@ -8243,10 +8243,10 @@ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -8255,7 +8255,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -8271,7 +8271,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -8286,10 +8286,10 @@ "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", "dev": true, "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" + "array-filter": "~0.0.0", + "array-map": "~0.0.0", + "array-reduce": "~0.0.0", + "jsonify": "~0.0.0" } }, "shelljs": { @@ -8322,14 +8322,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.1", - "use": "3.1.0" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "define-property": { @@ -8338,7 +8338,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -8347,7 +8347,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -8356,7 +8356,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -8365,7 +8365,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8376,7 +8376,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -8385,7 +8385,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8396,9 +8396,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -8415,9 +8415,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -8426,7 +8426,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } } } @@ -8437,7 +8437,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -8446,7 +8446,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8457,7 +8457,7 @@ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, "requires": { - "hoek": "2.16.3" + "hoek": "2.x.x" } }, "source-map": { @@ -8472,11 +8472,11 @@ "integrity": "sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A==", "dev": true, "requires": { - "atob": "2.1.0", - "decode-uri-component": "0.2.0", - "resolve-url": "0.2.1", - "source-map-url": "0.4.0", - "urix": "0.1.0" + "atob": "^2.0.0", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-url": { @@ -8497,8 +8497,8 @@ "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", "dev": true, "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.0" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -8513,8 +8513,8 @@ "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "dev": true, "requires": { - "spdx-exceptions": "2.1.0", - "spdx-license-ids": "3.0.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -8529,7 +8529,7 @@ "integrity": "sha1-Zwl8YB1pfOE2j0GPBs0gHPBSGlc=", "dev": true, "requires": { - "through": "2.3.8" + "through": "2" } }, "split-string": { @@ -8538,7 +8538,7 @@ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -8555,9 +8555,9 @@ "dev": true, "optional": true, "requires": { - "chalk": "1.1.3", - "console-stream": "0.1.1", - "lpad-align": "1.1.2" + "chalk": "^1.0.0", + "console-stream": "^0.1.1", + "lpad-align": "^1.0.1" }, "dependencies": { "ansi-styles": { @@ -8574,11 +8574,11 @@ "dev": true, "optional": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -8596,14 +8596,14 @@ "integrity": "sha1-Ew9Zde3a2WPx1W+SuaxsUfqfg+s=", "dev": true, "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "tweetnacl": "~0.14.0" }, "dependencies": { "assert-plus": { @@ -8644,13 +8644,13 @@ "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" } } } @@ -8667,8 +8667,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -8677,7 +8677,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "is-accessor-descriptor": { @@ -8686,7 +8686,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -8695,7 +8695,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8706,7 +8706,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -8715,7 +8715,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -8726,9 +8726,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" } }, "kind-of": { @@ -8750,7 +8750,7 @@ "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "dev": true, "requires": { - "duplexer": "0.1.1" + "duplexer": "~0.1.1" } }, "stream-combiner2": { @@ -8759,8 +8759,8 @@ "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, "requires": { - "duplexer2": "0.1.4", - "readable-stream": "2.3.5" + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" }, "dependencies": { "duplexer2": { @@ -8769,7 +8769,7 @@ "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { - "readable-stream": "2.3.5" + "readable-stream": "^2.0.2" } } } @@ -8798,7 +8798,7 @@ "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", "dev": true, "requires": { - "strip-ansi": "3.0.1" + "strip-ansi": "^3.0.0" } }, "string-template": { @@ -8813,9 +8813,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string.prototype.padend": { @@ -8824,9 +8824,9 @@ "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", "dev": true, "requires": { - "define-properties": "1.1.2", - "es-abstract": "1.11.0", - "function-bind": "1.1.1" + "define-properties": "^1.1.2", + "es-abstract": "^1.4.3", + "function-bind": "^1.0.2" } }, "string_decoder": { @@ -8835,7 +8835,7 @@ "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "stringstream": { @@ -8850,7 +8850,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-bom": { @@ -8859,8 +8859,8 @@ "integrity": "sha1-hbiGLzhEtabV7IRnqTWYFzo295Q=", "dev": true, "requires": { - "first-chunk-stream": "1.0.0", - "is-utf8": "0.2.1" + "first-chunk-stream": "^1.0.0", + "is-utf8": "^0.2.0" } }, "strip-bom-stream": { @@ -8869,8 +8869,8 @@ "integrity": "sha1-5xRDmFd9Uaa+0PoZlPoF9D/ZiO4=", "dev": true, "requires": { - "first-chunk-stream": "1.0.0", - "strip-bom": "2.0.0" + "first-chunk-stream": "^1.0.0", + "strip-bom": "^2.0.0" }, "dependencies": { "strip-bom": { @@ -8879,7 +8879,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } } } @@ -8890,12 +8890,12 @@ "integrity": "sha1-lgu9EoeETzl1pFWKoQOoJV4kVqA=", "dev": true, "requires": { - "chalk": "1.1.3", - "get-stdin": "4.0.1", - "is-absolute": "0.1.7", - "is-natural-number": "2.1.1", - "minimist": "1.2.0", - "sum-up": "1.0.3" + "chalk": "^1.0.0", + "get-stdin": "^4.0.1", + "is-absolute": "^0.1.5", + "is-natural-number": "^2.0.0", + "minimist": "^1.1.0", + "sum-up": "^1.0.1" }, "dependencies": { "ansi-styles": { @@ -8910,11 +8910,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "is-absolute": { @@ -8923,7 +8923,7 @@ "integrity": "sha1-hHSREZ/MtftDYhfMc39/qtUPYD8=", "dev": true, "requires": { - "is-relative": "0.1.3" + "is-relative": "^0.1.0" } }, "is-relative": { @@ -8952,7 +8952,7 @@ "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", "dev": true, "requires": { - "get-stdin": "4.0.1" + "get-stdin": "^4.0.1" } }, "strip-json-comments": { @@ -8967,7 +8967,7 @@ "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.2" } }, "sum-up": { @@ -8976,7 +8976,7 @@ "integrity": "sha1-HGYfZnBX9jvLeHWqFDi8FiUlFW4=", "dev": true, "requires": { - "chalk": "1.1.3" + "chalk": "^1.0.0" }, "dependencies": { "ansi-styles": { @@ -8991,11 +8991,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" } }, "supports-color": { @@ -9012,7 +9012,7 @@ "integrity": "sha512-0aP01LLIskjKs3lq52EC0aGBAJhLq7B2Rd8HC/DR/PtNNpcLilNmHC12O+hu0usQpo7wtHNRqtrhBwtDb0+dNg==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "svgo": { @@ -9022,13 +9022,13 @@ "dev": true, "optional": true, "requires": { - "coa": "1.0.4", - "colors": "1.1.2", - "csso": "2.3.2", - "js-yaml": "3.7.0", - "mkdirp": "0.5.1", - "sax": "1.2.4", - "whet.extend": "0.9.9" + "coa": "~1.0.1", + "colors": "~1.1.2", + "csso": "~2.3.1", + "js-yaml": "~3.7.0", + "mkdirp": "~0.5.1", + "sax": "~1.2.1", + "whet.extend": "~0.9.9" }, "dependencies": { "minimist": { @@ -9062,10 +9062,10 @@ "integrity": "sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg==", "dev": true, "requires": { - "bl": "1.2.2", - "end-of-stream": "1.4.1", - "readable-stream": "2.3.5", - "xtend": "4.0.1" + "bl": "^1.0.0", + "end-of-stream": "^1.0.0", + "readable-stream": "^2.0.0", + "xtend": "^4.0.0" }, "dependencies": { "end-of-stream": { @@ -9074,7 +9074,7 @@ "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", "dev": true, "requires": { - "once": "1.4.0" + "once": "^1.4.0" } } } @@ -9093,8 +9093,8 @@ "dev": true, "optional": true, "requires": { - "temp-dir": "1.0.0", - "uuid": "3.2.1" + "temp-dir": "^1.0.0", + "uuid": "^3.0.1" } }, "ternary-stream": { @@ -9103,10 +9103,10 @@ "integrity": "sha1-8Zafg4R/lkImG8FC4X7iAKrag/0=", "dev": true, "requires": { - "duplexer2": "0.0.2", - "fork-stream": "0.0.4", - "merge-stream": "0.1.8", - "through2": "0.6.5" + "duplexer2": "~0.0.2", + "fork-stream": "~0.0.4", + "merge-stream": "~0.1.6", + "through2": "~0.6.3" }, "dependencies": { "isarray": { @@ -9121,10 +9121,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "string_decoder": { @@ -9139,8 +9139,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -9175,8 +9175,8 @@ "integrity": "sha1-AARWmzfHx0ujnEPzzteNGtlBQL4=", "dev": true, "requires": { - "readable-stream": "2.3.5", - "xtend": "4.0.1" + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" } }, "through2-concurrent": { @@ -9185,7 +9185,7 @@ "integrity": "sha1-EctOpMnjG8puTB5tukjRxyjDUks=", "dev": true, "requires": { - "through2": "2.0.3" + "through2": "^2.0.0" } }, "through2-filter": { @@ -9194,8 +9194,8 @@ "integrity": "sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw=", "dev": true, "requires": { - "through2": "2.0.3", - "xtend": "4.0.1" + "through2": "~2.0.0", + "xtend": "~4.0.0" } }, "tildify": { @@ -9204,7 +9204,7 @@ "integrity": "sha1-3OwD9V3Km3qj5bBPIYF+tW5jWIo=", "dev": true, "requires": { - "os-homedir": "1.0.2" + "os-homedir": "^1.0.0" } }, "time-stamp": { @@ -9225,7 +9225,7 @@ "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.1" } }, "to-absolute-glob": { @@ -9234,7 +9234,7 @@ "integrity": "sha1-HN+kcqnvUMI57maZm2YsoOs5k38=", "dev": true, "requires": { - "extend-shallow": "2.0.1" + "extend-shallow": "^2.0.1" }, "dependencies": { "extend-shallow": { @@ -9243,7 +9243,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -9254,7 +9254,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -9263,7 +9263,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -9274,10 +9274,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -9286,8 +9286,8 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "topo": { @@ -9296,7 +9296,7 @@ "integrity": "sha1-zVYVdSU5BXwNwEkaYhw7xvvh0YI=", "dev": true, "requires": { - "hoek": "4.2.1" + "hoek": "4.x.x" }, "dependencies": { "hoek": { @@ -9313,7 +9313,7 @@ "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", "dev": true, "requires": { - "punycode": "1.4.1" + "punycode": "^1.4.1" } }, "trim-newlines": { @@ -9328,7 +9328,7 @@ "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.2" } }, "try-json-parse": { @@ -9343,7 +9343,7 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -9359,7 +9359,7 @@ "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.18" + "mime-types": "~2.1.18" } }, "typedarray": { @@ -9374,9 +9374,9 @@ "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", "dev": true, "requires": { - "source-map": "0.5.7", - "uglify-to-browserify": "1.0.2", - "yargs": "3.10.0" + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" } }, "uglify-to-browserify": { @@ -9398,13 +9398,13 @@ "integrity": "sha1-K7WqjnevNCF4rfNvabGK4sxVEGM=", "dev": true, "requires": { - "async": "0.6.2", - "commander": "2.2.0", - "css": "1.6.0", - "node-phantom-simple": "1.2.0", - "phantomjs": "1.9.20", - "request": "2.34.0", - "underscore": "1.6.0" + "async": "~0.6.2", + "commander": "~2.2.0", + "css": "~1.6.0", + "node-phantom-simple": "~1.2.0", + "phantomjs": "~1.9.7-1", + "request": "~2.34.0", + "underscore": "~1.6.0" }, "dependencies": { "asn1": { @@ -9440,7 +9440,7 @@ "integrity": "sha1-emNune1O/O+xnO9JR6PGffrukRs=", "dev": true, "requires": { - "hoek": "0.9.1" + "hoek": "0.9.x" } }, "combined-stream": { @@ -9466,7 +9466,7 @@ "dev": true, "optional": true, "requires": { - "boom": "0.4.2" + "boom": "0.4.x" } }, "css": { @@ -9499,9 +9499,9 @@ "dev": true, "optional": true, "requires": { - "async": "0.9.2", - "combined-stream": "0.0.7", - "mime": "1.2.11" + "async": "~0.9.0", + "combined-stream": "~0.0.4", + "mime": "~1.2.11" }, "dependencies": { "async": { @@ -9520,10 +9520,10 @@ "dev": true, "optional": true, "requires": { - "boom": "0.4.2", - "cryptiles": "0.2.2", - "hoek": "0.9.1", - "sntp": "0.2.4" + "boom": "0.4.x", + "cryptiles": "0.2.x", + "hoek": "0.9.x", + "sntp": "0.2.x" } }, "hoek": { @@ -9540,7 +9540,7 @@ "optional": true, "requires": { "asn1": "0.1.11", - "assert-plus": "0.1.5", + "assert-plus": "^0.1.5", "ctype": "0.5.3" } }, @@ -9575,18 +9575,18 @@ "integrity": "sha1-tdi5UmrdSi1GKfTUFxJFc5lkRa4=", "dev": true, "requires": { - "aws-sign2": "0.5.0", - "forever-agent": "0.5.2", - "form-data": "0.1.4", - "hawk": "1.0.0", - "http-signature": "0.10.1", - "json-stringify-safe": "5.0.1", - "mime": "1.2.11", - "node-uuid": "1.4.8", - "oauth-sign": "0.3.0", - "qs": "0.6.6", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.3.0" + "aws-sign2": "~0.5.0", + "forever-agent": "~0.5.0", + "form-data": "~0.1.0", + "hawk": "~1.0.0", + "http-signature": "~0.10.0", + "json-stringify-safe": "~5.0.0", + "mime": "~1.2.9", + "node-uuid": "~1.4.0", + "oauth-sign": "~0.3.0", + "qs": "~0.6.0", + "tough-cookie": ">=0.12.0", + "tunnel-agent": "~0.3.0" } }, "sntp": { @@ -9596,7 +9596,7 @@ "dev": true, "optional": true, "requires": { - "hoek": "0.9.1" + "hoek": "0.9.x" } }, "tunnel-agent": { @@ -9620,10 +9620,10 @@ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "0.4.3" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^0.4.3" }, "dependencies": { "extend-shallow": { @@ -9632,7 +9632,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "set-value": { @@ -9641,10 +9641,10 @@ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "to-object-path": "0.3.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.1", + "to-object-path": "^0.3.0" } } } @@ -9672,8 +9672,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -9682,9 +9682,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -9742,7 +9742,7 @@ "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", "dev": true, "requires": { - "prepend-http": "1.0.4" + "prepend-http": "^1.0.1" } }, "url-regex": { @@ -9752,7 +9752,7 @@ "dev": true, "optional": true, "requires": { - "ip-regex": "1.0.3" + "ip-regex": "^1.0.1" } }, "use": { @@ -9761,7 +9761,7 @@ "integrity": "sha512-6UJEQM/L+mzC3ZJNM56Q4DFGLX/evKGRg15UJHGB9X5j5Z3AFbgZvjUh2yq/UJUY4U5dh7Fal++XbNg1uzpRAw==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.2" } }, "user-home": { @@ -9793,7 +9793,7 @@ "integrity": "sha1-qrGh+jDUX4jdMhFIh1rALAtV5bQ=", "dev": true, "requires": { - "user-home": "1.1.1" + "user-home": "^1.1.1" } }, "vali-date": { @@ -9814,8 +9814,8 @@ "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", "dev": true, "requires": { - "spdx-correct": "3.0.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "value-or-function": { @@ -9835,9 +9835,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" + "extsprintf": "^1.2.0" }, "dependencies": { "assert-plus": { @@ -9854,8 +9854,8 @@ "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", "dev": true, "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } }, @@ -9865,31 +9865,32 @@ "integrity": "sha1-TRmIkbVRWRHXcajNnFSApGoHSkU=", "dev": true, "requires": { - "object-assign": "4.1.1", - "readable-stream": "2.3.5" + "object-assign": "^4.0.1", + "readable-stream": "^2.0.0" } }, "vinyl-fs": { "version": "github:gulpjs/vinyl-fs#59386caa67b191c3615ea2358bdc7d3611712a3d", - "dev": true, - "requires": { - "duplexify": "3.5.4", - "flush-write-stream": "1.0.3", - "glob-stream": "5.3.5", - "graceful-fs": "4.1.11", - "gulp-sourcemaps": "1.12.1", - "is-valid-glob": "0.3.0", - "lazystream": "1.0.0", - "lodash.isequal": "4.5.0", - "merge-stream": "1.0.1", - "object-assign": "4.1.1", - "strip-bom": "2.0.0", - "strip-bom-stream": "1.0.0", - "through2": "2.0.3", - "through2-filter": "2.0.0", - "vali-date": "1.0.0", - "value-or-function": "1.2.1", - "vinyl": "1.2.0" + "from": "github:gulpjs/vinyl-fs#59386ca", + "dev": true, + "requires": { + "duplexify": "^3.2.0", + "flush-write-stream": "^1.0.0", + "glob-stream": "^5.3.2", + "graceful-fs": "^4.0.0", + "gulp-sourcemaps": "^1.5.2", + "is-valid-glob": "^0.3.0", + "lazystream": "^1.0.0", + "lodash.isequal": "^4.0.0", + "merge-stream": "^1.0.0", + "object-assign": "^4.0.0", + "strip-bom": "^2.0.0", + "strip-bom-stream": "^1.0.0", + "through2": "^2.0.0", + "through2-filter": "^2.0.0", + "vali-date": "^1.0.0", + "value-or-function": "^1.2.0", + "vinyl": "^1.0.0" }, "dependencies": { "arr-diff": { @@ -9898,7 +9899,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -9913,9 +9914,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "expand-brackets": { @@ -9924,7 +9925,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -9933,7 +9934,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "for-own": { @@ -9942,7 +9943,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "glob": { @@ -9951,11 +9952,11 @@ "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", "dev": true, "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-stream": { @@ -9964,14 +9965,14 @@ "integrity": "sha1-pVZlqajM3EGRWofHAeMtTgFvrSI=", "dev": true, "requires": { - "extend": "3.0.1", - "glob": "5.0.15", - "glob-parent": "3.1.0", - "micromatch": "2.3.11", - "ordered-read-streams": "0.3.0", - "through2": "0.6.5", - "to-absolute-glob": "0.1.1", - "unique-stream": "2.2.1" + "extend": "^3.0.0", + "glob": "^5.0.3", + "glob-parent": "^3.0.0", + "micromatch": "^2.3.7", + "ordered-read-streams": "^0.3.0", + "through2": "^0.6.0", + "to-absolute-glob": "^0.1.1", + "unique-stream": "^2.0.2" }, "dependencies": { "readable-stream": { @@ -9980,10 +9981,10 @@ "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", "isarray": "0.0.1", - "string_decoder": "0.10.31" + "string_decoder": "~0.10.x" } }, "through2": { @@ -9992,8 +9993,8 @@ "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", "dev": true, "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } } } @@ -10010,7 +10011,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "isarray": { @@ -10025,7 +10026,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "merge-stream": { @@ -10034,7 +10035,7 @@ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "dev": true, "requires": { - "readable-stream": "2.3.5" + "readable-stream": "^2.0.1" } }, "micromatch": { @@ -10043,19 +10044,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "object.omit": { @@ -10064,8 +10065,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "ordered-read-streams": { @@ -10074,8 +10075,8 @@ "integrity": "sha1-cTfmmzKYuzQiR6G77jiByA4v14s=", "dev": true, "requires": { - "is-stream": "1.1.0", - "readable-stream": "2.3.5" + "is-stream": "^1.0.1", + "readable-stream": "^2.0.1" } }, "string_decoder": { @@ -10090,7 +10091,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "unique-stream": { @@ -10099,8 +10100,8 @@ "integrity": "sha1-WqADz76Uxf+GbE59ZouxxNuts2k=", "dev": true, "requires": { - "json-stable-stringify": "1.0.1", - "through2-filter": "2.0.0" + "json-stable-stringify": "^1.0.0", + "through2-filter": "^2.0.0" } }, "vinyl": { @@ -10109,8 +10110,8 @@ "integrity": "sha1-XIgDbPVl5d8FVYv8kR+GVt8hiIQ=", "dev": true, "requires": { - "clone": "1.0.4", - "clone-stats": "0.0.1", + "clone": "^1.0.0", + "clone-stats": "^0.0.1", "replace-ext": "0.0.1" } } @@ -10122,7 +10123,7 @@ "integrity": "sha1-xfy9Q+LyOEI8LcmL3db3m3K8NFs=", "dev": true, "requires": { - "source-map": "0.1.43" + "source-map": "^0.1.39" }, "dependencies": { "source-map": { @@ -10131,7 +10132,7 @@ "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } } } @@ -10142,19 +10143,20 @@ "integrity": "sha1-CYw69Ckb7oPXOx7JTpSCnFY3k+8=", "dev": true, "requires": { - "cheerio": "0.17.0", - "clean-css": "2.2.23", + "cheerio": "^0.17.0", + "clean-css": "^2.2.11", "dom-serializer": "git://github.com/azakus/dom-serializer.git#0d41a71761704338bece9d1af6b9c4f18cf571e6", - "nopt": "3.0.6", - "uglify-js": "2.8.29" + "nopt": "^3.0.1", + "uglify-js": "^2.4.15" }, "dependencies": { "dom-serializer": { "version": "git://github.com/azakus/dom-serializer.git#0d41a71761704338bece9d1af6b9c4f18cf571e6", + "from": "dom-serializer@git://github.com/azakus/dom-serializer.git#0d41a71761704338bece9d1af6b9c4f18cf571e6", "dev": true, "requires": { - "domelementtype": "1.1.3", - "entities": "1.1.1" + "domelementtype": "~1.1.1", + "entities": "~1.1.1" } }, "domelementtype": { @@ -10177,11 +10179,11 @@ "integrity": "sha1-CoT9BwJMb8Joyw6r5YW+IXqvK6o=", "dev": true, "requires": { - "core-js": "2.5.4", - "joi": "9.2.0", - "minimist": "1.2.0", - "request": "2.81.0", - "rx": "4.1.0" + "core-js": "^2.4.1", + "joi": "^9.2.0", + "minimist": "^1.2.0", + "request": "^2.78.0", + "rx": "^4.1.0" } }, "ware": { @@ -10190,7 +10192,7 @@ "integrity": "sha1-0bFPOdLiy0q4xAmPdW/ksWTkc9Q=", "dev": true, "requires": { - "wrap-fn": "0.1.5" + "wrap-fn": "^0.1.0" } }, "wcwidth": { @@ -10200,7 +10202,7 @@ "dev": true, "optional": true, "requires": { - "defaults": "1.0.3" + "defaults": "^1.0.3" } }, "whet.extend": { @@ -10216,7 +10218,7 @@ "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" } }, "window-size": { @@ -10272,9 +10274,9 @@ "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", "dev": true, "requires": { - "camelcase": "1.2.1", - "cliui": "2.1.0", - "decamelize": "1.2.0", + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", "window-size": "0.1.0" }, "dependencies": { @@ -10292,8 +10294,8 @@ "integrity": "sha1-eUUK/yKyqcWkHvVOAtuQfM+/nuI=", "dev": true, "requires": { - "buffer-crc32": "0.2.13", - "fd-slicer": "1.0.1" + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.0.1" } } } diff --git a/sublime-gulp.log b/sublime-gulp.log new file mode 100644 index 0000000000..d51108fdbe --- /dev/null +++ b/sublime-gulp.log @@ -0,0 +1,8 @@ +Remember that you can report errors and get help in https://github.com/NicoSantangelo/sublime-gulp + +05-14-2018 00:41: +(node:11740) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated. + + +05-14-2018 00:43: +(node:11810) [DEP0013] DeprecationWarning: Calling an asynchronous function without callback is deprecated.