From dd607db9d527e2257e61fdaa39630e58aa376143 Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 09:50:31 -0500 Subject: [PATCH 01/21] Update yarn build to fix babel --- dist/alt.js | 105 +++++++++++++++++++++--------------------- dist/alt.min.js | 2 +- package.json | 2 +- test/batching-test.js | 2 +- 4 files changed, 56 insertions(+), 55 deletions(-) diff --git a/dist/alt.js b/dist/alt.js index cbe0f296..68192cd5 100644 --- a/dist/alt.js +++ b/dist/alt.js @@ -52,14 +52,14 @@ return /******/ (function(modules) { // webpackBootstrap /************************************************************************/ /******/ ([ /* 0 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { module.exports = __webpack_require__(1); -/***/ }, +/***/ }), /* 1 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -102,7 +102,7 @@ return /******/ (function(modules) { // webpackBootstrap var Alt = function () { function Alt() { - var config = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0]; + var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; _classCallCheck(this, Alt); @@ -229,7 +229,7 @@ return /******/ (function(modules) { // webpackBootstrap function createActions(ActionsClass) { var _this3 = this; - var exportObj = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + var exportObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; var actions = {}; var key = utils.uid(this._actionsRegistry, ActionsClass.displayName || ActionsClass.name || 'Unknown'); @@ -439,9 +439,9 @@ return /******/ (function(modules) { // webpackBootstrap exports['default'] = Alt; module.exports = exports['default']; -/***/ }, +/***/ }), /* 2 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { /** * Copyright (c) 2014-2015, Facebook, Inc. @@ -455,9 +455,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports.Dispatcher = __webpack_require__(3); -/***/ }, +/***/ }), /* 3 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** * Copyright (c) 2014-2015, Facebook, Inc. @@ -692,9 +692,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = Dispatcher; /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4))) -/***/ }, +/***/ }), /* 4 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { // shim for using process in browser var process = module.exports = {}; @@ -866,6 +866,10 @@ return /******/ (function(modules) { // webpackBootstrap process.removeListener = noop; process.removeAllListeners = noop; process.emit = noop; + process.prependListener = noop; + process.prependOnceListener = noop; + + process.listeners = function (name) { return [] } process.binding = function (name) { throw new Error('process.binding is not supported'); @@ -878,9 +882,9 @@ return /******/ (function(modules) { // webpackBootstrap process.umask = function() { return 0; }; -/***/ }, +/***/ }), /* 5 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(process) {/** * Copyright 2013-2015, Facebook, Inc. @@ -933,9 +937,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = invariant; /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4))) -/***/ }, +/***/ }), /* 6 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -958,27 +962,25 @@ return /******/ (function(modules) { // webpackBootstrap fn.eachObject(function (key, value) { var store = instance.stores[key]; if (store) { - (function () { - var config = store.StoreModel.config; - - var state = store.state; - if (config.onDeserialize) obj[key] = config.onDeserialize(value) || value; - if (fn.isMutableObject(state)) { - fn.eachObject(function (k) { - return delete state[k]; - }, [state]); - fn.assign(state, obj[key]); - } else { - store.state = obj[key]; - } - onStore(store, store.state); - })(); + var config = store.StoreModel.config; + + var state = store.state; + if (config.onDeserialize) obj[key] = config.onDeserialize(value) || value; + if (fn.isMutableObject(state)) { + fn.eachObject(function (k) { + return delete state[k]; + }, [state]); + fn.assign(state, obj[key]); + } else { + store.state = obj[key]; + } + onStore(store, store.state); } }, [obj]); } function snapshot(instance) { - var storeNames = arguments.length <= 1 || arguments[1] === undefined ? [] : arguments[1]; + var storeNames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var stores = storeNames.length ? storeNames : Object.keys(instance.stores); return stores.reduce(function (obj, storeHandle) { @@ -1010,9 +1012,9 @@ return /******/ (function(modules) { // webpackBootstrap }, {}); } -/***/ }, +/***/ }), /* 7 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { 'use strict'; @@ -1051,9 +1053,9 @@ return /******/ (function(modules) { // webpackBootstrap return target; } -/***/ }, +/***/ }), /* 8 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -1268,9 +1270,9 @@ return /******/ (function(modules) { // webpackBootstrap return storeInstance; } -/***/ }, +/***/ }), /* 9 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -1314,7 +1316,7 @@ return /******/ (function(modules) { // webpackBootstrap } function getPrototypeChain(Obj) { - var methods = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + var methods = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return Obj === Function.prototype ? methods : getPrototypeChain(Object.getPrototypeOf(Obj), fn.assign(getInternalMethods(Obj, true), methods)); } @@ -1390,9 +1392,9 @@ return /******/ (function(modules) { // webpackBootstrap /* istanbul ignore next */ function NoopClass() {} -/***/ }, +/***/ }), /* 10 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -1516,9 +1518,8 @@ return /******/ (function(modules) { // webpackBootstrap if (!fn.isFunction(cb)) throw new TypeError('listen expects a function'); - var _transmitter$subscrib = this.transmitter.subscribe(cb); - - var dispose = _transmitter$subscrib.dispose; + var _transmitter$subscrib = this.transmitter.subscribe(cb), + dispose = _transmitter$subscrib.dispose; this.subscriptions.push({ cb: cb, dispose: dispose }); return function () { @@ -1557,9 +1558,9 @@ return /******/ (function(modules) { // webpackBootstrap exports['default'] = AltStore; module.exports = exports['default']; -/***/ }, +/***/ }), /* 11 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { "use strict"; @@ -1614,9 +1615,9 @@ return /******/ (function(modules) { // webpackBootstrap module.exports = transmitter; -/***/ }, +/***/ }), /* 12 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -1856,9 +1857,9 @@ return /******/ (function(modules) { // webpackBootstrap exports['default'] = StoreMixin; module.exports = exports['default']; -/***/ }, +/***/ }), /* 13 */ -/***/ function(module, exports, __webpack_require__) { +/***/ (function(module, exports, __webpack_require__) { 'use strict'; @@ -1943,9 +1944,9 @@ return /******/ (function(modules) { // webpackBootstrap } module.exports = exports['default']; -/***/ }, +/***/ }), /* 14 */ -/***/ function(module, exports) { +/***/ (function(module, exports) { module.exports = isPromise; @@ -1954,7 +1955,7 @@ return /******/ (function(modules) { // webpackBootstrap } -/***/ } +/***/ }) /******/ ]) }); ; \ No newline at end of file diff --git a/dist/alt.min.js b/dist/alt.min.js index f940e8bc..5be95f77 100644 --- a/dist/alt.min.js +++ b/dist/alt.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Alt=e():t.Alt=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(6)},function(t,e){"use strict";function n(t){var e=t.constructor;return!!t&&"[object Object]"===Object.prototype.toString.call(t)&&o(e)&&!Object.isFrozen(t)&&(e instanceof e||"AltStore"===t.type)}function r(t,e){e.forEach(function(e){Object.keys(Object(e)).forEach(function(n){t(n,e[n])})})}function i(t){for(var e=arguments.length,n=Array(e>1?e-1:0),i=1;i1?e-1:0),r=1;r1)for(var n=1;n1?r-1:0),o=1;o2?i-2:0),a=2;a2?u-2:0),l=2;l2?n-2:0),i=2;i2?n-2:0),i=2;i0}return t}()})}return t}(),exportPublicMethods:function(){function t(t){var e=this;c.eachObject(function(t,n){if(!c.isFunction(n))throw new TypeError("exportPublicMethods expects a function");e.publicMethods[t]=n},[t])}return t}(),emitChange:function(){function t(){this.getInstance().emitChange()}return t}(),on:function(){function t(t,e){"error"===t&&(this.handlesOwnErrors=!0);var n=this.lifecycleEvents[t]||(0,a["default"])();return this.lifecycleEvents[t]=n,n.subscribe(e.bind(this))}return t}(),bindAction:function(){function t(t,e){if(!t)throw new ReferenceError("Invalid action reference passed in");if(!c.isFunction(e))throw new TypeError("bindAction expects a function");var n=t.id?t.id:t;this.actionListeners[n]=this.actionListeners[n]||[],this.actionListeners[n].push(e.bind(this)),this.boundListeners.push(n)}return t}(),bindActions:function(){function t(t){var e=this;c.eachObject(function(t,n){var r=/./,i=t.replace(r,function(t){return"on"+String(t[0].toUpperCase())});if(e[t]&&e[i])throw new ReferenceError("You have multiple action handlers bound to an action: "+(String(t)+" and "+String(i)));var o=e[t]||e[i];o&&e.bindAction(n,o)},[t])}return t}(),bindListeners:function(){function t(t){var e=this;c.eachObject(function(t,n){var r=e[t];if(!r)throw new ReferenceError(String(t)+" defined but does not exist in "+String(e.displayName));Array.isArray(n)?n.forEach(function(t){e.bindAction(t,r)}):e.bindAction(n,r)},[t])}return t}()};e["default"]=u,t.exports=e["default"]},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}function i(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e["default"]=t,e}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e,n){if(n){var r=e.StoreModel.config,i=g.isFunction(n)?n(e.state):n;e.state=r.setState.call(t,e.state,i),t.alt.dispatcher.isDispatching()||t.emitChange()}}function u(t,e,n,r){return g.assign(t,m["default"],{displayName:n,alt:e,dispatcher:e.dispatcher,preventDefault:function(){function t(){this.getInstance().preventDefault=!0}return t}(),boundListeners:[],lifecycleEvents:{},actionListeners:{},publicMethods:{},handlesOwnErrors:!1},r)}function f(t,e){e.config=g.assign({getState:function(){function t(t){return Array.isArray(t)?t.slice():g.isMutableObject(t)?g.assign({},t):t}return t}(),setState:function(){function t(t,e){return g.isMutableObject(e)?g.assign(t,e):e}return t}()},t,e.config)}function l(t,e){return t.reduce(function(t,e){return e(t)},e)}function p(t,e,n){var r=void 0,i=u({},t,n,g.assign({getInstance:function(){function t(){return r}return t}(),setState:function(){function t(t){c(this,r,t)}return t}()},e));return i.bindListeners&&m["default"].bindListeners.call(i,i.bindListeners),i.observe&&m["default"].bindListeners.call(i,i.observe(t)),i.lifecycle&&g.eachObject(function(t,e){m["default"].on.call(i,t,e)},[i.lifecycle]),r=g.assign(new w["default"](t,i,void 0!==i.state?i.state:{},e),i.publicMethods,{displayName:n,config:e.config})}function h(t,e,n){var r=void 0,i=e.config,f=function(t){function e(){o(this,e);for(var n=arguments.length,r=Array(n),i=0;i3?l-3:0),h=3;h1?e-1:0),i=1;i1&&void 0!==arguments[1]?arguments[1]:{};return t===Function.prototype?e:o(Object.getPrototypeOf(t),y.assign(i(t,!0),e))}function a(t){"undefined"!=typeof console&&console.warn(new ReferenceError(t))}function s(t,e){for(var n=0,r=e;Object.hasOwnProperty.call(t,r);)r=e+String(++n);return r}function c(t){return t.replace(/[a-z]([A-Z])/g,function(t){return String(t[0])+"_"+String(t[1].toLowerCase())}).toUpperCase()}function u(t){if(void 0===t)return null;for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r1)for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{};s(this,t),this.config=e,this.serialize=e.serialize||JSON.stringify,this.deserialize=e.deserialize||JSON.parse,this.dispatcher=e.dispatcher||new c.Dispatcher,this.batchingFunction=e.batchingFunction||function(t){return t()},this.actions={global:{}},this.stores={},this.storeTransforms=e.storeTransforms||[],this.trapAsync=!1,this._actionsRegistry={},this._initSnapshot={},this._lastSnapshot={}}return t.prototype.dispatch=function(){function t(t,e,n){var r=this;this.batchingFunction(function(){var i=Math.random().toString(18).substr(2,16);if(t.hasOwnProperty("type")&&t.hasOwnProperty("payload")){var o={id:t.type,namespace:t.type,name:t.type};return r.dispatcher.dispatch(v.fsa(i,t.type,t.payload,o))}return t.id&&t.dispatch?v.dispatch(i,t,e,r):r.dispatcher.dispatch(v.fsa(i,t,e,n))})}return t}(),t.prototype.createUnsavedStore=function(){function t(t){var e=t.displayName||"";d.createStoreConfig(this.config,t);for(var n=d.transformStore(this.storeTransforms,t),r=arguments.length,i=Array(r>1?r-1:0),o=1;o2?i-2:0),a=2;a1&&void 0!==arguments[1]?arguments[1]:{},r={},i=v.uid(this._actionsRegistry,t.displayName||t.name||"Unknown");if(p.isFunction(t)){p.assign(r,v.getPrototypeChain(t));for(var c=function(t){function e(){s(this,e);for(var n=arguments.length,r=Array(n),i=0;i2?u-2:0),l=2;l2?n-2:0),i=2;i2?n-2:0),i=2;i0}return t}()})}return t}(),exportPublicMethods:function(){function t(t){var e=this;c.eachObject(function(t,n){if(!c.isFunction(n))throw new TypeError("exportPublicMethods expects a function");e.publicMethods[t]=n},[t])}return t}(),emitChange:function(){function t(){this.getInstance().emitChange()}return t}(),on:function(){function t(t,e){"error"===t&&(this.handlesOwnErrors=!0);var n=this.lifecycleEvents[t]||(0,a.default)();return this.lifecycleEvents[t]=n,n.subscribe(e.bind(this))}return t}(),bindAction:function(){function t(t,e){if(!t)throw new ReferenceError("Invalid action reference passed in");if(!c.isFunction(e))throw new TypeError("bindAction expects a function");var n=t.id?t.id:t;this.actionListeners[n]=this.actionListeners[n]||[],this.actionListeners[n].push(e.bind(this)),this.boundListeners.push(n)}return t}(),bindActions:function(){function t(t){var e=this;c.eachObject(function(t,n){var r=/./,i=t.replace(r,function(t){return"on"+String(t[0].toUpperCase())});if(e[t]&&e[i])throw new ReferenceError("You have multiple action handlers bound to an action: "+(String(t)+" and "+String(i)));var o=e[t]||e[i];o&&e.bindAction(n,o)},[t])}return t}(),bindListeners:function(){function t(t){var e=this;c.eachObject(function(t,n){var r=e[t];if(!r)throw new ReferenceError(String(t)+" defined but does not exist in "+String(e.displayName));Array.isArray(n)?n.forEach(function(t){e.bindAction(t,r)}):e.bindAction(n,r)},[t])}return t}()};e.default=u,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e,n){if(n){var r=e.StoreModel.config,i=g.isFunction(n)?n(e.state):n;e.state=r.setState.call(t,e.state,i),t.alt.dispatcher.isDispatching()||t.emitChange()}}function u(t,e,n,r){return g.assign(t,m.default,{displayName:n,alt:e,dispatcher:e.dispatcher,preventDefault:function(){function t(){this.getInstance().preventDefault=!0}return t}(),boundListeners:[],lifecycleEvents:{},actionListeners:{},publicMethods:{},handlesOwnErrors:!1},r)}function f(t,e){e.config=g.assign({getState:function(){function t(t){return Array.isArray(t)?t.slice():g.isMutableObject(t)?g.assign({},t):t}return t}(),setState:function(){function t(t,e){return g.isMutableObject(e)?g.assign(t,e):e}return t}()},t,e.config)}function l(t,e){return t.reduce(function(t,e){return e(t)},e)}function p(t,e,n){var r=void 0,i=u({},t,n,g.assign({getInstance:function(){function t(){return r}return t}(),setState:function(){function t(t){c(this,r,t)}return t}()},e));return i.bindListeners&&m.default.bindListeners.call(i,i.bindListeners),i.observe&&m.default.bindListeners.call(i,i.observe(t)),i.lifecycle&&g.eachObject(function(t,e){m.default.on.call(i,t,e)},[i.lifecycle]),r=g.assign(new w.default(t,i,void 0!==i.state?i.state:{},e),i.publicMethods,{displayName:n,config:e.config})}function h(t,e,n){var r=void 0,i=e.config,f=function(t){function e(){o(this,e);for(var n=arguments.length,r=Array(n),i=0;i3?l-3:0),h=3;h1&&void 0!==arguments[1]?arguments[1]:[],n=e.length?e:Object.keys(t.stores);return n.reduce(function(e,n){var r=n.displayName||n,i=t.stores[r],o=i.StoreModel.config;i.lifecycle("snapshot");var a=o.onSerialize&&o.onSerialize(i.state);return e[r]=a?a:i.getState(),e},{})}function a(t,e){var n=t.deserialize(t.serialize(t.stores[e].state));t._initSnapshot[e]=n,t._lastSnapshot[e]=n}function s(t,e,n){return n.reduce(function(t,n){var r=n.displayName||n;if(!e[r])throw new ReferenceError(String(r)+" is not a valid store");return t[r]=e[r],t},{})}Object.defineProperty(e,"__esModule",{value:!0}),e.setAppState=i,e.snapshot=o,e.saveInitialSnapshot=a,e.filterSnapshots=s;var c=n(1),u=r(c)},function(t,e,n){(function(e){"use strict";var n=function(t,n,r,i,o,a,s,c){if("production"!==e.env.NODE_ENV&&void 0===n)throw new Error("invariant requires an error message argument");if(!t){var u;if(void 0===n)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var f=[r,i,o,a,s,c],l=0;u=new Error("Invariant Violation: "+n.replace(/%s/g,function(){return f[l++]}))}throw u.framesToPop=1,u}};t.exports=n}).call(e,n(3))},function(t,e,n){t.exports.Dispatcher=n(13)},function(t,e,n){(function(r){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}e.__esModule=!0;var o=n(11),a="ID_",s=function(){function t(){i(this,t),this._callbacks={},this._isDispatching=!1,this._isHandled={},this._isPending={},this._lastID=1}return t.prototype.register=function(t){var e=a+this._lastID++;return this._callbacks[e]=t,e},t.prototype.unregister=function(t){this._callbacks[t]?void 0:"production"!==r.env.NODE_ENV?o(!1,"Dispatcher.unregister(...): `%s` does not map to a registered callback.",t):o(!1),delete this._callbacks[t]},t.prototype.waitFor=function(t){this._isDispatching?void 0:"production"!==r.env.NODE_ENV?o(!1,"Dispatcher.waitFor(...): Must be invoked while dispatching."):o(!1);for(var e=0;e { this.switchComponent() }, 10) + return null }, switchComponent() { From e51c6580cbdfb4c3c3c1a5f621b5cd72b87b0acc Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 10:01:35 -0500 Subject: [PATCH 02/21] Fix issues with old version of react causing tests to fail --- dist/alt.min.js | 2 +- package.json | 9 +- test/batching-test.js | 6 +- yarn.lock | 4314 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 4322 insertions(+), 9 deletions(-) create mode 100644 yarn.lock diff --git a/dist/alt.min.js b/dist/alt.min.js index 5be95f77..59b8c8d6 100644 --- a/dist/alt.min.js +++ b/dist/alt.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Alt=e():t.Alt=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(6)},function(t,e){"use strict";function n(t){var e=t.constructor;return!!t&&"[object Object]"===Object.prototype.toString.call(t)&&o(e)&&!Object.isFrozen(t)&&(e instanceof e||"AltStore"===t.type)}function r(t,e){e.forEach(function(e){Object.keys(Object(e)).forEach(function(n){t(n,e[n])})})}function i(t){for(var e=arguments.length,n=Array(e>1?e-1:0),i=1;i1&&void 0!==arguments[1]?arguments[1]:{};return t===Function.prototype?e:o(Object.getPrototypeOf(t),y.assign(i(t,!0),e))}function a(t){"undefined"!=typeof console&&console.warn(new ReferenceError(t))}function s(t,e){for(var n=0,r=e;Object.hasOwnProperty.call(t,r);)r=e+String(++n);return r}function c(t){return t.replace(/[a-z]([A-Z])/g,function(t){return String(t[0])+"_"+String(t[1].toLowerCase())}).toUpperCase()}function u(t){if(void 0===t)return null;for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r1)for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{};s(this,t),this.config=e,this.serialize=e.serialize||JSON.stringify,this.deserialize=e.deserialize||JSON.parse,this.dispatcher=e.dispatcher||new c.Dispatcher,this.batchingFunction=e.batchingFunction||function(t){return t()},this.actions={global:{}},this.stores={},this.storeTransforms=e.storeTransforms||[],this.trapAsync=!1,this._actionsRegistry={},this._initSnapshot={},this._lastSnapshot={}}return t.prototype.dispatch=function(){function t(t,e,n){var r=this;this.batchingFunction(function(){var i=Math.random().toString(18).substr(2,16);if(t.hasOwnProperty("type")&&t.hasOwnProperty("payload")){var o={id:t.type,namespace:t.type,name:t.type};return r.dispatcher.dispatch(v.fsa(i,t.type,t.payload,o))}return t.id&&t.dispatch?v.dispatch(i,t,e,r):r.dispatcher.dispatch(v.fsa(i,t,e,n))})}return t}(),t.prototype.createUnsavedStore=function(){function t(t){var e=t.displayName||"";d.createStoreConfig(this.config,t);for(var n=d.transformStore(this.storeTransforms,t),r=arguments.length,i=Array(r>1?r-1:0),o=1;o2?i-2:0),a=2;a1&&void 0!==arguments[1]?arguments[1]:{},r={},i=v.uid(this._actionsRegistry,t.displayName||t.name||"Unknown");if(p.isFunction(t)){p.assign(r,v.getPrototypeChain(t));for(var c=function(t){function e(){s(this,e);for(var n=arguments.length,r=Array(n),i=0;i2?u-2:0),l=2;l2?n-2:0),i=2;i2?n-2:0),i=2;i0}return t}()})}return t}(),exportPublicMethods:function(){function t(t){var e=this;c.eachObject(function(t,n){if(!c.isFunction(n))throw new TypeError("exportPublicMethods expects a function");e.publicMethods[t]=n},[t])}return t}(),emitChange:function(){function t(){this.getInstance().emitChange()}return t}(),on:function(){function t(t,e){"error"===t&&(this.handlesOwnErrors=!0);var n=this.lifecycleEvents[t]||(0,a.default)();return this.lifecycleEvents[t]=n,n.subscribe(e.bind(this))}return t}(),bindAction:function(){function t(t,e){if(!t)throw new ReferenceError("Invalid action reference passed in");if(!c.isFunction(e))throw new TypeError("bindAction expects a function");var n=t.id?t.id:t;this.actionListeners[n]=this.actionListeners[n]||[],this.actionListeners[n].push(e.bind(this)),this.boundListeners.push(n)}return t}(),bindActions:function(){function t(t){var e=this;c.eachObject(function(t,n){var r=/./,i=t.replace(r,function(t){return"on"+String(t[0].toUpperCase())});if(e[t]&&e[i])throw new ReferenceError("You have multiple action handlers bound to an action: "+(String(t)+" and "+String(i)));var o=e[t]||e[i];o&&e.bindAction(n,o)},[t])}return t}(),bindListeners:function(){function t(t){var e=this;c.eachObject(function(t,n){var r=e[t];if(!r)throw new ReferenceError(String(t)+" defined but does not exist in "+String(e.displayName));Array.isArray(n)?n.forEach(function(t){e.bindAction(t,r)}):e.bindAction(n,r)},[t])}return t}()};e.default=u,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e,n){if(n){var r=e.StoreModel.config,i=g.isFunction(n)?n(e.state):n;e.state=r.setState.call(t,e.state,i),t.alt.dispatcher.isDispatching()||t.emitChange()}}function u(t,e,n,r){return g.assign(t,m.default,{displayName:n,alt:e,dispatcher:e.dispatcher,preventDefault:function(){function t(){this.getInstance().preventDefault=!0}return t}(),boundListeners:[],lifecycleEvents:{},actionListeners:{},publicMethods:{},handlesOwnErrors:!1},r)}function f(t,e){e.config=g.assign({getState:function(){function t(t){return Array.isArray(t)?t.slice():g.isMutableObject(t)?g.assign({},t):t}return t}(),setState:function(){function t(t,e){return g.isMutableObject(e)?g.assign(t,e):e}return t}()},t,e.config)}function l(t,e){return t.reduce(function(t,e){return e(t)},e)}function p(t,e,n){var r=void 0,i=u({},t,n,g.assign({getInstance:function(){function t(){return r}return t}(),setState:function(){function t(t){c(this,r,t)}return t}()},e));return i.bindListeners&&m.default.bindListeners.call(i,i.bindListeners),i.observe&&m.default.bindListeners.call(i,i.observe(t)),i.lifecycle&&g.eachObject(function(t,e){m.default.on.call(i,t,e)},[i.lifecycle]),r=g.assign(new w.default(t,i,void 0!==i.state?i.state:{},e),i.publicMethods,{displayName:n,config:e.config})}function h(t,e,n){var r=void 0,i=e.config,f=function(t){function e(){o(this,e);for(var n=arguments.length,r=Array(n),i=0;i3?l-3:0),h=3;h1&&void 0!==arguments[1]?arguments[1]:[],n=e.length?e:Object.keys(t.stores);return n.reduce(function(e,n){var r=n.displayName||n,i=t.stores[r],o=i.StoreModel.config;i.lifecycle("snapshot");var a=o.onSerialize&&o.onSerialize(i.state);return e[r]=a?a:i.getState(),e},{})}function a(t,e){var n=t.deserialize(t.serialize(t.stores[e].state));t._initSnapshot[e]=n,t._lastSnapshot[e]=n}function s(t,e,n){return n.reduce(function(t,n){var r=n.displayName||n;if(!e[r])throw new ReferenceError(String(r)+" is not a valid store");return t[r]=e[r],t},{})}Object.defineProperty(e,"__esModule",{value:!0}),e.setAppState=i,e.snapshot=o,e.saveInitialSnapshot=a,e.filterSnapshots=s;var c=n(1),u=r(c)},function(t,e,n){(function(e){"use strict";var n=function(t,n,r,i,o,a,s,c){if("production"!==e.env.NODE_ENV&&void 0===n)throw new Error("invariant requires an error message argument");if(!t){var u;if(void 0===n)u=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var f=[r,i,o,a,s,c],l=0;u=new Error("Invariant Violation: "+n.replace(/%s/g,function(){return f[l++]}))}throw u.framesToPop=1,u}};t.exports=n}).call(e,n(3))},function(t,e,n){t.exports.Dispatcher=n(13)},function(t,e,n){(function(r){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}e.__esModule=!0;var o=n(11),a="ID_",s=function(){function t(){i(this,t),this._callbacks={},this._isDispatching=!1,this._isHandled={},this._isPending={},this._lastID=1}return t.prototype.register=function(t){var e=a+this._lastID++;return this._callbacks[e]=t,e},t.prototype.unregister=function(t){this._callbacks[t]?void 0:"production"!==r.env.NODE_ENV?o(!1,"Dispatcher.unregister(...): `%s` does not map to a registered callback.",t):o(!1),delete this._callbacks[t]},t.prototype.waitFor=function(t){this._isDispatching?void 0:"production"!==r.env.NODE_ENV?o(!1,"Dispatcher.waitFor(...): Must be invoked while dispatching."):o(!1);for(var e=0;e1?e-1:0),i=1;i1&&void 0!==arguments[1]?arguments[1]:{};return t===Function.prototype?e:o(Object.getPrototypeOf(t),y.assign(i(t,!0),e))}function a(t){"undefined"!=typeof console&&console.warn(new ReferenceError(t))}function s(t,e){for(var n=0,r=e;Object.hasOwnProperty.call(t,r);)r=e+String(++n);return r}function c(t){return t.replace(/[a-z]([A-Z])/g,function(t){return String(t[0])+"_"+String(t[1].toLowerCase())}).toUpperCase()}function u(t){if(void 0===t)return null;for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r1)for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{};s(this,t),this.config=e,this.serialize=e.serialize||JSON.stringify,this.deserialize=e.deserialize||JSON.parse,this.dispatcher=e.dispatcher||new c.Dispatcher,this.batchingFunction=e.batchingFunction||function(t){return t()},this.actions={global:{}},this.stores={},this.storeTransforms=e.storeTransforms||[],this.trapAsync=!1,this._actionsRegistry={},this._initSnapshot={},this._lastSnapshot={}}return t.prototype.dispatch=function(){function t(t,e,n){var r=this;this.batchingFunction(function(){var i=Math.random().toString(18).substr(2,16);if(t.hasOwnProperty("type")&&t.hasOwnProperty("payload")){var o={id:t.type,namespace:t.type,name:t.type};return r.dispatcher.dispatch(v.fsa(i,t.type,t.payload,o))}return t.id&&t.dispatch?v.dispatch(i,t,e,r):r.dispatcher.dispatch(v.fsa(i,t,e,n))})}return t}(),t.prototype.createUnsavedStore=function(){function t(t){var e=t.displayName||"";d.createStoreConfig(this.config,t);for(var n=d.transformStore(this.storeTransforms,t),r=arguments.length,i=Array(r>1?r-1:0),o=1;o2?i-2:0),a=2;a1&&void 0!==arguments[1]?arguments[1]:{},r={},i=v.uid(this._actionsRegistry,t.displayName||t.name||"Unknown");if(p.isFunction(t)){p.assign(r,v.getPrototypeChain(t));for(var c=function(t){function e(){s(this,e);for(var n=arguments.length,r=Array(n),i=0;i2?u-2:0),l=2;l2?n-2:0),i=2;i2?n-2:0),i=2;i0}return t}()})}return t}(),exportPublicMethods:function(){function t(t){var e=this;c.eachObject(function(t,n){if(!c.isFunction(n))throw new TypeError("exportPublicMethods expects a function");e.publicMethods[t]=n},[t])}return t}(),emitChange:function(){function t(){this.getInstance().emitChange()}return t}(),on:function(){function t(t,e){"error"===t&&(this.handlesOwnErrors=!0);var n=this.lifecycleEvents[t]||(0,a.default)();return this.lifecycleEvents[t]=n,n.subscribe(e.bind(this))}return t}(),bindAction:function(){function t(t,e){if(!t)throw new ReferenceError("Invalid action reference passed in");if(!c.isFunction(e))throw new TypeError("bindAction expects a function");var n=t.id?t.id:t;this.actionListeners[n]=this.actionListeners[n]||[],this.actionListeners[n].push(e.bind(this)),this.boundListeners.push(n)}return t}(),bindActions:function(){function t(t){var e=this;c.eachObject(function(t,n){var r=/./,i=t.replace(r,function(t){return"on"+String(t[0].toUpperCase())});if(e[t]&&e[i])throw new ReferenceError("You have multiple action handlers bound to an action: "+(String(t)+" and "+String(i)));var o=e[t]||e[i];o&&e.bindAction(n,o)},[t])}return t}(),bindListeners:function(){function t(t){var e=this;c.eachObject(function(t,n){var r=e[t];if(!r)throw new ReferenceError(String(t)+" defined but does not exist in "+String(e.displayName));Array.isArray(n)?n.forEach(function(t){e.bindAction(t,r)}):e.bindAction(n,r)},[t])}return t}()};e.default=u,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e,n){if(n){var r=e.StoreModel.config,i=g.isFunction(n)?n(e.state):n;e.state=r.setState.call(t,e.state,i),t.alt.dispatcher.isDispatching()||t.emitChange()}}function u(t,e,n,r){return g.assign(t,m.default,{displayName:n,alt:e,dispatcher:e.dispatcher,preventDefault:function(){function t(){this.getInstance().preventDefault=!0}return t}(),boundListeners:[],lifecycleEvents:{},actionListeners:{},publicMethods:{},handlesOwnErrors:!1},r)}function f(t,e){e.config=g.assign({getState:function(){function t(t){return Array.isArray(t)?t.slice():g.isMutableObject(t)?g.assign({},t):t}return t}(),setState:function(){function t(t,e){return g.isMutableObject(e)?g.assign(t,e):e}return t}()},t,e.config)}function l(t,e){return t.reduce(function(t,e){return e(t)},e)}function p(t,e,n){var r=void 0,i=u({},t,n,g.assign({getInstance:function(){function t(){return r}return t}(),setState:function(){function t(t){c(this,r,t)}return t}()},e));return i.bindListeners&&m.default.bindListeners.call(i,i.bindListeners),i.observe&&m.default.bindListeners.call(i,i.observe(t)),i.lifecycle&&g.eachObject(function(t,e){m.default.on.call(i,t,e)},[i.lifecycle]),r=g.assign(new w.default(t,i,void 0!==i.state?i.state:{},e),i.publicMethods,{displayName:n,config:e.config})}function h(t,e,n){var r=void 0,i=e.config,f=function(t){function e(){o(this,e);for(var n=arguments.length,r=Array(n),i=0;i3?l-3:0),h=3;h1&&void 0!==arguments[1]?arguments[1]:[],n=e.length?e:Object.keys(t.stores);return n.reduce(function(e,n){var r=n.displayName||n,i=t.stores[r],o=i.StoreModel.config;i.lifecycle("snapshot");var a=o.onSerialize&&o.onSerialize(i.state);return e[r]=a?a:i.getState(),e},{})}function a(t,e){var n=t.deserialize(t.serialize(t.stores[e].state));t._initSnapshot[e]=n,t._lastSnapshot[e]=n}function s(t,e,n){return n.reduce(function(t,n){var r=n.displayName||n;if(!e[r])throw new ReferenceError(String(r)+" is not a valid store");return t[r]=e[r],t},{})}Object.defineProperty(e,"__esModule",{value:!0}),e.setAppState=i,e.snapshot=o,e.saveInitialSnapshot=a,e.filterSnapshots=s;var c=n(1),u=r(c)},function(t,e,n){t.exports.Dispatcher=n(12)},function(t,e,n){(function(r){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}e.__esModule=!0;var o=n(13),a="ID_",s=function(){function t(){i(this,t),this._callbacks={},this._isDispatching=!1,this._isHandled={},this._isPending={},this._lastID=1}return t.prototype.register=function(t){var e=a+this._lastID++;return this._callbacks[e]=t,e},t.prototype.unregister=function(t){this._callbacks[t]?void 0:"production"!==r.env.NODE_ENV?o(!1,"Dispatcher.unregister(...): `%s` does not map to a registered callback.",t):o(!1),delete this._callbacks[t]},t.prototype.waitFor=function(t){this._isDispatching?void 0:"production"!==r.env.NODE_ENV?o(!1,"Dispatcher.waitFor(...): Must be invoked while dispatching."):o(!1);for(var e=0;e", "Josh Perez ", "Jonathan Lehman " ], diff --git a/test/batching-test.js b/test/batching-test.js index 6722d836..981f9aa7 100644 --- a/test/batching-test.js +++ b/test/batching-test.js @@ -2,7 +2,6 @@ import { jsdom } from 'jsdom' import Alt from '../' import React from 'react' import { assert } from 'chai' -import sinon from 'sinon' import TestUtils from 'react-addons-test-utils' import ReactDom from 'react-dom' @@ -20,7 +19,7 @@ const Actions = { uhoh() { return null - } + }, } function Store(actions) { @@ -45,9 +44,8 @@ class ComponentA extends React.Component { render() { if (this.state.active) { return - } else { - return
} + return
} } diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..f6bbf399 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4314 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abbrev@1: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +abbrev@1.0.x: + version "1.0.9" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + +acorn-globals@^1.0.4: + version "1.0.9" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf" + dependencies: + acorn "^2.1.0" + +acorn-to-esprima@^2.0.4: + version "2.0.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn-to-esprima/-/acorn-to-esprima-2.0.8.tgz#003f0c642eb92132f417d3708f14ada82adf2eb1" + +acorn@^1.2.1: + version "1.2.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn/-/acorn-1.2.2.tgz#c8ce27de0acc76d896d2b1fad3df588d9e82f014" + +acorn@^2.1.0: + version "2.7.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" + +acorn@^3.0.0: + version "3.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + +acorn@^4.0.3: + version "4.0.13" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + +ajv@^4.9.1: + version "4.11.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +ajv@^5.1.0: + version "5.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.3.0" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +alt-search-docs@1.0.6: + version "1.0.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/alt-search-docs/-/alt-search-docs-1.0.6.tgz#adf03aa4fb231a730dca947542adfc5eb700ba51" + dependencies: + alt "^0.16.5" + axios "^0.5.4" + classnames "^2.1.1" + es6-promise "^2.1.1" + lunr "^0.5.9" + marked "^0.3.3" + react "^0.13.3" + react-text-highlight "^0.1.1" + +alt@^0.16.5: + version "0.16.10" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/alt/-/alt-0.16.10.tgz#56c622c14a1f4b784ad7422f4c8aaac659f2f09d" + dependencies: + es-symbol "1.1.2" + eventemitter3 "0.1.6" + flux "2.0.3" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-escapes@^1.1.0: + version "1.4.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-styles@^2.1.0, ansi-styles@^2.2.1: + version "2.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + +anymatch@^1.3.0: + version "1.3.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +argparse@^1.0.2, argparse@^1.0.7: + version "1.0.9" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + dependencies: + sprintf-js "~1.0.2" + +"argparse@~ 0.1.11": + version "0.1.16" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c" + dependencies: + underscore "~1.7.0" + underscore.string "~2.4.0" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +array-find-index@^1.0.1: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + +array-union@^1.0.1: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + dependencies: + array-uniq "^1.0.1" + +array-uniq@^1.0.0, array-uniq@^1.0.1: + version "1.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + +array-unique@^0.2.1: + version "0.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +arrify@^1.0.0: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + +asap@~2.0.3: + version "2.0.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +asn1@0.1.11: + version "0.1.11" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" + +asn1@~0.2.3: + version "0.2.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.1.5: + version "0.1.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +assert@^1.1.1: + version "1.4.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + dependencies: + util "0.10.3" + +assertion-error@1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b" + +ast-types@0.9.6: + version "0.9.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" + +async-each@^1.0.0: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async@1.x, async@^1.3.0, async@^1.4.0: + version "1.5.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +async@^0.9.0, async@~0.9.0: + version "0.9.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + +async@~0.2.6: + version "0.2.10" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + +asynckit@^0.4.0: + version "0.4.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.5.0: + version "0.5.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: + version "1.6.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +axios@^0.5.4: + version "0.5.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/axios/-/axios-0.5.4.tgz#e06f852257838133e69094d925ccb419de94fdfb" + dependencies: + es6-promise "^2.0.1" + +babel-cli@6.6.5: + version "6.6.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-cli/-/babel-cli-6.6.5.tgz#554a7e8d0c4bc939967a89f4165750fe3887c522" + dependencies: + babel-core "^6.6.5" + babel-polyfill "^6.6.0" + babel-register "^6.6.5" + babel-runtime "^5.0.0" + bin-version-check "^2.1.0" + chalk "1.1.1" + commander "^2.8.1" + convert-source-map "^1.1.0" + fs-readdir-recursive "^0.1.0" + glob "^5.0.5" + lodash "^3.2.0" + log-symbols "^1.0.2" + output-file-sync "^1.1.0" + path-exists "^1.0.0" + path-is-absolute "^1.0.0" + request "^2.65.0" + slash "^1.0.0" + source-map "^0.5.0" + v8flags "^2.0.10" + optionalDependencies: + chokidar "^1.0.0" + +babel-code-frame@^6.20.0, babel-code-frame@^6.26.0: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@6.21.0: + version "6.21.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-core/-/babel-core-6.21.0.tgz#75525480c21c803f826ef3867d22c19f080a3724" + dependencies: + babel-code-frame "^6.20.0" + babel-generator "^6.21.0" + babel-helpers "^6.16.0" + babel-messages "^6.8.0" + babel-register "^6.18.0" + babel-runtime "^6.20.0" + babel-template "^6.16.0" + babel-traverse "^6.21.0" + babel-types "^6.21.0" + babylon "^6.11.0" + convert-source-map "^1.1.0" + debug "^2.1.1" + json5 "^0.5.0" + lodash "^4.2.0" + minimatch "^3.0.2" + path-is-absolute "^1.0.0" + private "^0.1.6" + slash "^1.0.0" + source-map "^0.5.0" + +babel-core@^6.26.0, babel-core@^6.6.5: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.0" + debug "^2.6.8" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.7" + slash "^1.0.0" + source-map "^0.5.6" + +babel-eslint@5.0.0: + version "5.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-eslint/-/babel-eslint-5.0.0.tgz#47cfed8880090ffdf8569fa82adab5757ea5512f" + dependencies: + acorn-to-esprima "^2.0.4" + babel-traverse "^6.0.20" + babel-types "^6.0.19" + babylon "^6.0.18" + lodash.assign "^3.2.0" + lodash.pick "^3.1.0" + +babel-generator@^6.21.0, babel-generator@^6.26.0: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.6" + trim-right "^1.0.1" + +babel-helper-bindify-decorators@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + dependencies: + babel-helper-explode-assignable-expression "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-builder-react-jsx@^6.24.1: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + esutils "^2.0.2" + +babel-helper-call-delegate@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-define-map@^6.24.1, babel-helper-define-map@^6.6.5: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-explode-assignable-expression@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + dependencies: + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-explode-class@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + dependencies: + babel-helper-bindify-decorators "^6.24.1" + babel-runtime "^6.22.0" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-function-name@^6.24.1, babel-helper-function-name@^6.6.0: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + dependencies: + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-get-function-arity@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-hoist-variables@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-optimise-call-expression@^6.24.1, babel-helper-optimise-call-expression@^6.6.0: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-helper-regex@^6.24.1: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + dependencies: + babel-runtime "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-helper-remap-async-to-generator@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helper-replace-supers@^6.24.1, babel-helper-replace-supers@^6.6.5: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + dependencies: + babel-helper-optimise-call-expression "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-helpers@^6.16.0, babel-helpers@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-loader@6.2.4: + version "6.2.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-loader/-/babel-loader-6.2.4.tgz#aa70aff8ddc223a5952e839a43a6c3a4c8bfa1e9" + dependencies: + loader-utils "^0.2.11" + mkdirp "^0.5.1" + object-assign "^4.0.1" + +babel-messages@^6.23.0, babel-messages@^6.6.5, babel-messages@^6.8.0: + version "6.23.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-add-module-exports@^0.1.2: + version "0.1.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.1.4.tgz#1a5b6d761ee1f663d845b4ea6878712de31c107a" + dependencies: + babel-template "^6.5.0" + +babel-plugin-check-es2015-constants@^6.22.0: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-external-helpers-2@6.3.13: + version "6.3.13" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-external-helpers-2/-/babel-plugin-external-helpers-2-6.3.13.tgz#f680986ca5aed35c5844c42f7f07a6cd61a3a852" + dependencies: + babel-runtime "^5.0.0" + +babel-plugin-syntax-async-functions@^6.8.0: + version "6.13.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + +babel-plugin-syntax-async-generators@^6.5.0: + version "6.13.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + +babel-plugin-syntax-class-constructor-call@^6.18.0: + version "6.18.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + +babel-plugin-syntax-class-properties@^6.8.0: + version "6.13.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + +babel-plugin-syntax-decorators@^6.13.0: + version "6.13.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + +babel-plugin-syntax-do-expressions@^6.8.0: + version "6.13.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" + +babel-plugin-syntax-dynamic-import@^6.18.0: + version "6.18.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + +babel-plugin-syntax-exponentiation-operator@^6.8.0: + version "6.13.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + +babel-plugin-syntax-export-extensions@^6.8.0: + version "6.13.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + +babel-plugin-syntax-flow@^6.18.0: + version "6.18.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + +babel-plugin-syntax-function-bind@^6.8.0: + version "6.13.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" + +babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: + version "6.18.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + +babel-plugin-syntax-object-rest-spread@^6.8.0: + version "6.13.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + +babel-plugin-syntax-trailing-function-commas@^6.22.0: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + +babel-plugin-transform-async-generator-functions@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-generators "^6.5.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-async-to-generator@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + dependencies: + babel-helper-remap-async-to-generator "^6.24.1" + babel-plugin-syntax-async-functions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-class-constructor-call@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" + dependencies: + babel-plugin-syntax-class-constructor-call "^6.18.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-class-properties@^6.24.1, babel-plugin-transform-class-properties@^6.6.0: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + dependencies: + babel-helper-function-name "^6.24.1" + babel-plugin-syntax-class-properties "^6.8.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-decorators@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + dependencies: + babel-helper-explode-class "^6.24.1" + babel-plugin-syntax-decorators "^6.13.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-do-expressions@^6.3.13: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" + dependencies: + babel-plugin-syntax-do-expressions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-arrow-functions@^6.22.0: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-block-scoping@^6.24.1: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + dependencies: + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" + +babel-plugin-transform-es2015-classes@6.6.5: + version "6.6.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.6.5.tgz#b0273c58277c970d5d15517f61e45f731a65c61a" + dependencies: + babel-helper-define-map "^6.6.5" + babel-helper-function-name "^6.6.0" + babel-helper-optimise-call-expression "^6.6.0" + babel-helper-replace-supers "^6.6.5" + babel-messages "^6.6.5" + babel-runtime "^5.0.0" + babel-template "^6.6.5" + babel-traverse "^6.6.5" + babel-types "^6.6.5" + +babel-plugin-transform-es2015-classes@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + dependencies: + babel-helper-define-map "^6.24.1" + babel-helper-function-name "^6.24.1" + babel-helper-optimise-call-expression "^6.24.1" + babel-helper-replace-supers "^6.24.1" + babel-messages "^6.23.0" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-computed-properties@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-destructuring@^6.22.0: + version "6.23.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-duplicate-keys@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-for-of@^6.22.0: + version "6.23.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-function-name@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + dependencies: + babel-helper-function-name "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-literals@^6.22.0: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-modules-amd@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + dependencies: + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-commonjs@^6.24.1: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + dependencies: + babel-plugin-transform-strict-mode "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" + +babel-plugin-transform-es2015-modules-systemjs@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + dependencies: + babel-helper-hoist-variables "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-modules-umd@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + dependencies: + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + +babel-plugin-transform-es2015-object-super@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + dependencies: + babel-helper-replace-supers "^6.24.1" + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-parameters@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + dependencies: + babel-helper-call-delegate "^6.24.1" + babel-helper-get-function-arity "^6.24.1" + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-traverse "^6.24.1" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-shorthand-properties@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-spread@^6.22.0: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-sticky-regex@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-plugin-transform-es2015-template-literals@^6.0.14, babel-plugin-transform-es2015-template-literals@^6.22.0: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-typeof-symbol@^6.22.0: + version "6.23.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es2015-unicode-regex@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + dependencies: + babel-helper-regex "^6.24.1" + babel-runtime "^6.22.0" + regexpu-core "^2.0.0" + +babel-plugin-transform-es3-member-expression-literals@^6.0.14: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-es3-property-literals@^6.0.14: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-exponentiation-operator@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + dependencies: + babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" + babel-plugin-syntax-exponentiation-operator "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-export-extensions@^6.22.0: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + dependencies: + babel-plugin-syntax-export-extensions "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-flow-strip-types@^6.22.0: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + dependencies: + babel-plugin-syntax-flow "^6.18.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-function-bind@^6.3.13: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" + dependencies: + babel-plugin-syntax-function-bind "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-jscript@^6.0.14: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-jscript/-/babel-plugin-transform-jscript-6.22.0.tgz#6e8af12b7aba49e0a809152616ac05690b3352dc" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-object-rest-spread@^6.22.0: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + dependencies: + babel-plugin-syntax-object-rest-spread "^6.8.0" + babel-runtime "^6.26.0" + +babel-plugin-transform-react-display-name@^6.23.0: + version "6.25.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + dependencies: + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-self@^6.22.0: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx-source@^6.22.0: + version "6.22.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + dependencies: + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-react-jsx@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + dependencies: + babel-helper-builder-react-jsx "^6.24.1" + babel-plugin-syntax-jsx "^6.8.0" + babel-runtime "^6.22.0" + +babel-plugin-transform-regenerator@^6.24.1: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + dependencies: + regenerator-transform "^0.10.0" + +babel-plugin-transform-strict-mode@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + dependencies: + babel-runtime "^6.22.0" + babel-types "^6.24.1" + +babel-polyfill@^6.6.0: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + dependencies: + babel-runtime "^6.26.0" + core-js "^2.5.0" + regenerator-runtime "^0.10.5" + +babel-preset-airbnb@1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-airbnb/-/babel-preset-airbnb-1.0.1.tgz#bc0561b4b221257ccb35e00723e79b50cd86760c" + dependencies: + babel-plugin-transform-es2015-template-literals "^6.0.14" + babel-plugin-transform-es3-member-expression-literals "^6.0.14" + babel-plugin-transform-es3-property-literals "^6.0.14" + babel-plugin-transform-jscript "^6.0.14" + babel-preset-es2015 "^6.1.2" + babel-preset-react "^6.1.2" + +babel-preset-es2015@^6.1.2: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" + dependencies: + babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-transform-es2015-arrow-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" + babel-plugin-transform-es2015-block-scoping "^6.24.1" + babel-plugin-transform-es2015-classes "^6.24.1" + babel-plugin-transform-es2015-computed-properties "^6.24.1" + babel-plugin-transform-es2015-destructuring "^6.22.0" + babel-plugin-transform-es2015-duplicate-keys "^6.24.1" + babel-plugin-transform-es2015-for-of "^6.22.0" + babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-literals "^6.22.0" + babel-plugin-transform-es2015-modules-amd "^6.24.1" + babel-plugin-transform-es2015-modules-commonjs "^6.24.1" + babel-plugin-transform-es2015-modules-systemjs "^6.24.1" + babel-plugin-transform-es2015-modules-umd "^6.24.1" + babel-plugin-transform-es2015-object-super "^6.24.1" + babel-plugin-transform-es2015-parameters "^6.24.1" + babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-spread "^6.22.0" + babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-template-literals "^6.22.0" + babel-plugin-transform-es2015-typeof-symbol "^6.22.0" + babel-plugin-transform-es2015-unicode-regex "^6.24.1" + babel-plugin-transform-regenerator "^6.24.1" + +babel-preset-flow@^6.23.0: + version "6.23.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + dependencies: + babel-plugin-transform-flow-strip-types "^6.22.0" + +babel-preset-react@^6.1.2: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + dependencies: + babel-plugin-syntax-jsx "^6.3.13" + babel-plugin-transform-react-display-name "^6.23.0" + babel-plugin-transform-react-jsx "^6.24.1" + babel-plugin-transform-react-jsx-self "^6.22.0" + babel-plugin-transform-react-jsx-source "^6.22.0" + babel-preset-flow "^6.23.0" + +babel-preset-stage-0@6.3.13: + version "6.3.13" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-stage-0/-/babel-preset-stage-0-6.3.13.tgz#78a37c56f0b3988f2a79932dcb0ceb8ff377b0d1" + dependencies: + babel-plugin-transform-do-expressions "^6.3.13" + babel-plugin-transform-function-bind "^6.3.13" + babel-preset-stage-1 "^6.3.13" + +babel-preset-stage-1@^6.3.13: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" + dependencies: + babel-plugin-transform-class-constructor-call "^6.24.1" + babel-plugin-transform-export-extensions "^6.22.0" + babel-preset-stage-2 "^6.24.1" + +babel-preset-stage-2@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + dependencies: + babel-plugin-syntax-dynamic-import "^6.18.0" + babel-plugin-transform-class-properties "^6.24.1" + babel-plugin-transform-decorators "^6.24.1" + babel-preset-stage-3 "^6.24.1" + +babel-preset-stage-3@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + dependencies: + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-generator-functions "^6.24.1" + babel-plugin-transform-async-to-generator "^6.24.1" + babel-plugin-transform-exponentiation-operator "^6.24.1" + babel-plugin-transform-object-rest-spread "^6.22.0" + +babel-register@^6.18.0, babel-register@^6.26.0, babel-register@^6.6.5: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^5.0.0: + version "5.8.38" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-runtime/-/babel-runtime-5.8.38.tgz#1c0b02eb63312f5f087ff20450827b425c9d4c19" + dependencies: + core-js "^1.0.0" + +babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + +babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.5.0, babel-template@^6.6.5: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.0.20, babel-traverse@^6.21.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0, babel-traverse@^6.6.5: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.0.19, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.24.1, babel-types@^6.26.0, babel-types@^6.6.5: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.0.18, babylon@^6.11.0, babylon@^6.18.0: + version "6.18.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +base62@^1.1.0: + version "1.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/base62/-/base62-1.2.0.tgz#31e7e560dc846c9f44c1a531df6514da35474157" + +base64-js@^1.0.2: + version "1.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +big.js@^3.1.3: + version "3.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + +bin-version-check@^2.1.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/bin-version-check/-/bin-version-check-2.1.0.tgz#e4e5df290b9069f7d111324031efc13fdd11a5b0" + dependencies: + bin-version "^1.0.0" + minimist "^1.1.0" + semver "^4.0.3" + semver-truncate "^1.0.0" + +bin-version@^1.0.0: + version "1.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/bin-version/-/bin-version-1.0.4.tgz#9eb498ee6fd76f7ab9a7c160436f89579435d78e" + dependencies: + find-versions "^1.0.0" + +binary-extensions@^1.0.0: + version "1.10.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" + +block-stream@*: + version "0.0.9" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +boom@0.4.x: + version "0.4.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" + dependencies: + hoek "0.9.x" + +boom@2.x.x: + version "2.10.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +boom@4.x.x: + version "4.3.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +brace-expansion@^1.0.0, brace-expansion@^1.1.7: + version "1.1.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +"browser-request@>= 0.3.1 < 0.4.0": + version "0.3.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browser-request/-/browser-request-0.3.3.tgz#9ece5b5aca89a29932242e18bf933def9876cc17" + +browserify-aes@0.4.0: + version "0.4.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c" + dependencies: + inherits "^2.0.1" + +browserify-zlib@^0.1.4: + version "0.1.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + dependencies: + pako "~0.2.0" + +buffer@^4.9.0: + version "4.9.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-modules@^1.0.0: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + +camelcase-keys@^2.0.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + dependencies: + camelcase "^2.0.0" + map-obj "^1.0.0" + +camelcase@^1.0.2: + version "1.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^2.0.0: + version "2.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + +caseless@~0.12.0: + version "0.12.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chai@^2.3.0: + version "2.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/chai/-/chai-2.3.0.tgz#8a2f6a34748da801090fd73287b2aa739a4e909a" + dependencies: + assertion-error "1.0.0" + deep-eql "0.1.3" + +chalk@1.1.1: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/chalk/-/chalk-1.1.1.tgz#509afb67066e7499f7eb3535c77445772ae2d019" + dependencies: + ansi-styles "^2.1.0" + escape-string-regexp "^1.0.2" + has-ansi "^2.0.0" + strip-ansi "^3.0.0" + supports-color "^2.0.0" + +chalk@^1.0.0, chalk@^1.1.3: + version "1.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + dependencies: + 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" + +chokidar@^1.0.0: + version "1.7.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +circular-json@^0.3.1: + version "0.3.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + +classnames@^2.1.1: + version "2.2.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" + +cli-cursor@^1.0.1: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" + dependencies: + restore-cursor "^1.0.1" + +cli-width@^1.0.1: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cli-width/-/cli-width-1.1.1.tgz#a4d293ef67ebb7b88d4a4d42c0ccf00c4d1e366d" + +cliui@^2.1.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +clone@^1.0.2: + version "1.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" + +co@^4.6.0: + version "4.6.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +combined-stream@~0.0.4: + version "0.0.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" + dependencies: + delayed-stream "0.0.5" + +commander@0.6.1: + version "0.6.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" + +commander@2.3.0: + version "2.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" + +commander@^2.5.0, commander@^2.8.1: + version "2.11.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + +commoner@^0.10.1: + version "0.10.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" + dependencies: + commander "^2.5.0" + detective "^4.3.1" + glob "^5.0.15" + graceful-fs "^4.1.2" + iconv-lite "^0.4.5" + mkdirp "^0.5.0" + private "^0.1.6" + q "^1.1.2" + recast "^0.11.17" + +concat-map@0.0.1: + version "0.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +concat-stream@^1.4.6: + version "1.6.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + dependencies: + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +console-browserify@^1.1.0: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + dependencies: + date-now "^0.1.4" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + +convert-source-map@^1.1.0, convert-source-map@^1.5.0: + version "1.5.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + +core-js@^1.0.0: + version "1.2.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + +core-js@^2.4.0, core-js@^2.5.0: + version "2.5.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +coveralls@2.11.4: + version "2.11.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/coveralls/-/coveralls-2.11.4.tgz#b42f4e156f6ba9419d27434a4289094f219267f7" + dependencies: + js-yaml "3.0.1" + lcov-parse "0.0.6" + log-driver "1.2.4" + request "2.40.0" + +create-react-class@^15.6.0: + version "15.6.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +cryptiles@0.2.x: + version "0.2.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" + dependencies: + boom "0.4.x" + +cryptiles@2.x.x: + version "2.0.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +cryptiles@3.x.x: + version "3.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + +crypto-browserify@3.3.0: + version "3.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c" + dependencies: + browserify-aes "0.4.0" + pbkdf2-compat "2.0.1" + ripemd160 "0.2.0" + sha.js "2.2.6" + +cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0": + version "0.3.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + +"cssstyle@>= 0.2.29 < 0.3.0": + version "0.2.37" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + dependencies: + cssom "0.3.x" + +ctype@0.5.3: + version "0.5.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" + +currently-unhandled@^0.4.1: + version "0.4.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + dependencies: + array-find-index "^1.0.1" + +d@1: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + dependencies: + es5-ext "^0.10.9" + +dashdash@^1.12.0: + version "1.14.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +date-now@^0.1.4: + version "0.1.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + +debug@2.2.0: + version "2.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + dependencies: + ms "0.7.1" + +debug@^2.1.1, debug@^2.2.0, debug@^2.6.8: + version "2.6.9" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +decamelize@^1.0.0, decamelize@^1.1.2: + version "1.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-eql@0.1.3: + version "0.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" + dependencies: + type-detect "0.1.1" + +deep-extend@~0.4.0: + version "0.4.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + +deep-is@~0.1.2, deep-is@~0.1.3: + version "0.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + +defined@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + +del@^2.0.2: + version "2.2.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + dependencies: + globby "^5.0.0" + is-path-cwd "^1.0.0" + is-path-in-cwd "^1.0.0" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + rimraf "^2.2.8" + +delayed-stream@0.0.5: + version "0.0.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +detect-indent@^4.0.0: + version "4.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + dependencies: + repeating "^2.0.0" + +detect-libc@^1.0.2: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/detect-libc/-/detect-libc-1.0.2.tgz#71ad5d204bf17a6a6ca8f450c61454066ef461e1" + +detective@^4.3.1: + version "4.5.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1" + dependencies: + acorn "^4.0.3" + defined "^1.0.0" + +diff@1.4.0: + version "1.4.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" + +doctrine@^0.7.1: + version "0.7.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" + dependencies: + esutils "^1.1.6" + isarray "0.0.1" + +dom-serializer@0: + version "0.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + dependencies: + domelementtype "~1.1.1" + entities "~1.1.1" + +domain-browser@^1.1.1: + version "1.1.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + +domelementtype@1, domelementtype@^1.3.0: + version "1.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + +domelementtype@~1.1.1: + version "1.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + +domhandler@^2.3.0: + version "2.4.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + dependencies: + domelementtype "1" + +domutils@^1.5.1: + version "1.6.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff" + dependencies: + dom-serializer "0" + domelementtype "1" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +emojis-list@^2.0.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + +encoding@^0.1.11: + version "0.1.12" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + dependencies: + iconv-lite "~0.4.13" + +enhanced-resolve@~0.9.0: + version "0.9.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.2.0" + tapable "^0.1.8" + +entities@^1.1.1, entities@~1.1.1: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + +envify@^3.0.0: + version "3.4.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/envify/-/envify-3.4.1.tgz#d7122329e8df1688ba771b12501917c9ce5cbce8" + dependencies: + jstransform "^11.0.3" + through "~2.3.4" + +errno@^0.1.3: + version "0.1.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + dependencies: + prr "~0.0.0" + +error-ex@^1.2.0: + version "1.3.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + dependencies: + is-arrayish "^0.2.1" + +es-symbol@1.1.2: + version "1.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es-symbol/-/es-symbol-1.1.2.tgz#dc346fbbf5ed1c52ad69b4ba5cb26008ae218ff5" + +es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: + version "0.10.35" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es5-ext/-/es5-ext-0.10.35.tgz#18ee858ce6a3c45c7d79e91c15fcca9ec568494f" + dependencies: + es6-iterator "~2.0.1" + es6-symbol "~3.1.1" + +es6-iterator@^2.0.1, es6-iterator@~2.0.1: + version "2.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + +es6-map@^0.1.3: + version "0.1.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-promise@^2.0.1, es6-promise@^2.1.1: + version "2.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es6-promise/-/es6-promise-2.3.0.tgz#96edb9f2fdb01995822b263dd8aadab6748181bc" + +es6-set@~0.1.5: + version "0.1.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: + version "3.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-weak-map@^2.0.1: + version "2.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + dependencies: + d "1" + es5-ext "^0.10.14" + es6-iterator "^2.0.1" + es6-symbol "^3.1.1" + +escape-html@1.0.2: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c" + +escape-string-regexp@1.0.2: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" + +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +escodegen@1.6.x: + version "1.6.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escodegen/-/escodegen-1.6.1.tgz#367de17d8510540d12bc6dcb8b3f918391265815" + dependencies: + esprima "^1.2.2" + estraverse "^1.9.1" + esutils "^1.1.6" + optionator "^0.5.0" + optionalDependencies: + source-map "~0.1.40" + +escodegen@^1.6.1: + version "1.9.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" + dependencies: + esprima "^3.1.3" + estraverse "^4.2.0" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.5.6" + +escope@^3.3.0: + version "3.6.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-config-airbnb@2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-config-airbnb/-/eslint-config-airbnb-2.0.0.tgz#d9b32550fdced6174b067dc96d146fc0ec5fa4c3" + +eslint-plugin-react@3.11.3: + version "3.11.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-plugin-react/-/eslint-plugin-react-3.11.3.tgz#c4145e4d03ff86849352ee3720e4c263308dc503" + +eslint@1.10.3: + version "1.10.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint/-/eslint-1.10.3.tgz#fb19a91b13c158082bbca294b17d979bc8353a0a" + dependencies: + chalk "^1.0.0" + concat-stream "^1.4.6" + debug "^2.1.1" + doctrine "^0.7.1" + escape-string-regexp "^1.0.2" + escope "^3.3.0" + espree "^2.2.4" + estraverse "^4.1.1" + estraverse-fb "^1.3.1" + esutils "^2.0.2" + file-entry-cache "^1.1.1" + glob "^5.0.14" + globals "^8.11.0" + handlebars "^4.0.0" + inquirer "^0.11.0" + is-my-json-valid "^2.10.0" + is-resolvable "^1.0.0" + js-yaml "3.4.5" + json-stable-stringify "^1.0.0" + lodash.clonedeep "^3.0.1" + lodash.merge "^3.3.2" + lodash.omit "^3.1.0" + minimatch "^3.0.0" + mkdirp "^0.5.0" + object-assign "^4.0.1" + optionator "^0.6.0" + path-is-absolute "^1.0.0" + path-is-inside "^1.0.1" + shelljs "^0.5.3" + strip-json-comments "~1.0.1" + text-table "~0.2.0" + user-home "^2.0.0" + xml-escape "~1.0.0" + +espree@^2.2.4: + version "2.2.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/espree/-/espree-2.2.5.tgz#df691b9310889402aeb29cc066708c56690b854b" + +esprima-fb@^15001.1.0-dev-harmony-fb: + version "15001.1.0-dev-harmony-fb" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" + +esprima@2.5.x: + version "2.5.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-2.5.0.tgz#f387a46fd344c1b1a39baf8c20bfb43b6d0058cc" + +esprima@^1.2.2: + version "1.2.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9" + +esprima@^2.6.0: + version "2.7.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + +esprima@^3.1.3, esprima@~3.1.0: + version "3.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + +esprima@^4.0.0: + version "4.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + +"esprima@~ 1.0.2": + version "1.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" + +esrecurse@^4.1.0: + version "4.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + dependencies: + estraverse "^4.1.0" + object-assign "^4.0.1" + +estraverse-fb@^1.3.1: + version "1.3.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/estraverse-fb/-/estraverse-fb-1.3.2.tgz#d323a4cb5e5ac331cea033413a9253e1643e07c4" + +estraverse@^1.9.1: + version "1.9.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + +estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: + version "4.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + +esutils@^1.1.6: + version "1.1.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" + +esutils@^2.0.2: + version "2.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + +event-emitter@~0.3.5: + version "0.3.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + dependencies: + d "1" + es5-ext "~0.10.14" + +eventemitter3@0.1.6: + version "0.1.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eventemitter3/-/eventemitter3-0.1.6.tgz#8c7ac44b87baab55cd50c828dc38778eac052ea5" + +events@^1.0.0: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + +exit-hook@^1.0.0: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +extend@~3.0.0, extend@~3.0.1: + version "3.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extglob@^0.3.1: + version "0.3.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + +fast-json-stable-stringify@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + +fast-levenshtein@~1.0.0, fast-levenshtein@~1.0.6: + version "1.0.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz#0178dcdee023b92905193af0959e8a7639cfdcb9" + +fast-levenshtein@~2.0.4: + version "2.0.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + +fbemitter@^2.0.0: + version "2.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fbemitter/-/fbemitter-2.1.1.tgz#523e14fdaf5248805bb02f62efc33be703f51865" + dependencies: + fbjs "^0.8.4" + +fbjs@0.1.0-alpha.7: + version "0.1.0-alpha.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fbjs/-/fbjs-0.1.0-alpha.7.tgz#ad4308b8f232fb3c73603349ea725d1e9c39323c" + dependencies: + core-js "^1.0.0" + promise "^7.0.3" + whatwg-fetch "^0.9.0" + +fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.9: + version "0.8.16" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" + dependencies: + core-js "^1.0.0" + isomorphic-fetch "^2.1.1" + loose-envify "^1.0.0" + object-assign "^4.1.0" + promise "^7.1.1" + setimmediate "^1.0.5" + ua-parser-js "^0.7.9" + +figures@^1.3.5: + version "1.7.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" + dependencies: + escape-string-regexp "^1.0.5" + object-assign "^4.1.0" + +file-entry-cache@^1.1.1: + version "1.3.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/file-entry-cache/-/file-entry-cache-1.3.1.tgz#44c61ea607ae4be9c1402f41f44270cbfe334ff8" + dependencies: + flat-cache "^1.2.1" + object-assign "^4.0.1" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fileset@0.2.x: + version "0.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fileset/-/fileset-0.2.1.tgz#588ef8973c6623b2a76df465105696b96aac8067" + dependencies: + glob "5.x" + minimatch "2.x" + +fill-range@^2.1.0: + version "2.2.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +find-up@^1.0.0: + version "1.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-versions@^1.0.0: + version "1.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/find-versions/-/find-versions-1.2.1.tgz#cbde9f12e38575a0af1be1b9a2c5d5fd8f186b62" + dependencies: + array-uniq "^1.0.0" + get-stdin "^4.0.1" + meow "^3.5.0" + semver-regex "^1.0.0" + +flat-cache@^1.2.1: + version "1.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + dependencies: + circular-json "^0.3.1" + del "^2.0.2" + graceful-fs "^4.1.2" + write "^0.2.1" + +flux@2.0.3: + version "2.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/flux/-/flux-2.0.3.tgz#787e1aedffb34a322a60b49c57a2d23856a6de27" + +flux@2.1.1: + version "2.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/flux/-/flux-2.1.1.tgz#2c6ac652d4337488968489c6586f3aff26a38ea4" + dependencies: + fbemitter "^2.0.0" + fbjs "0.1.0-alpha.7" + immutable "^3.7.4" + +for-in@^1.0.1: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +forever-agent@~0.5.0: + version "0.5.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~0.1.0: + version "0.1.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12" + dependencies: + async "~0.9.0" + combined-stream "~0.0.4" + mime "~1.2.11" + +form-data@~2.1.1: + version "2.1.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +form-data@~2.3.1: + version "2.3.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +formatio@1.1.1: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9" + dependencies: + samsam "~1.1" + +fs-readdir-recursive@^0.1.0: + version "0.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz#315b4fb8c1ca5b8c47defef319d073dad3568059" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.36" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +gauge@~2.7.3: + version "2.7.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +generate-function@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + +generate-object-property@^1.1.0: + version "1.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + dependencies: + is-property "^1.0.0" + +get-stdin@^4.0.1: + version "4.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + +getpass@^0.1.1: + version "0.1.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +ghooks@^0.3.2: + version "0.3.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ghooks/-/ghooks-0.3.2.tgz#a1fa85dede71eecc19faca9ee163c3cdfc1b94d0" + dependencies: + spawn-command "^0.0.2" + +glob-base@^0.3.0: + version "0.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@3.2.11: + version "3.2.11" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" + dependencies: + inherits "2" + minimatch "0.3" + +glob@5.x, glob@^5.0.14, glob@^5.0.15, glob@^5.0.5: + version "5.0.15" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.3, glob@^7.0.5: + version "7.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + 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" + +globals@^8.11.0: + version "8.18.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/globals/-/globals-8.18.0.tgz#93d4a62bdcac38cfafafc47d6b034768cb0ffcb4" + +globals@^9.18.0: + version "9.18.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + +globby@^5.0.0: + version "5.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + dependencies: + array-union "^1.0.1" + arrify "^1.0.0" + glob "^7.0.3" + object-assign "^4.0.1" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +graceful-fs@^4.1.2, graceful-fs@^4.1.4: + version "4.1.11" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +growl@1.9.2: + version "1.9.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + +handlebars@3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/handlebars/-/handlebars-3.0.0.tgz#7f4e537f4dd6992869d66c01b7505eba3561a5d5" + dependencies: + optimist "^0.6.1" + source-map "^0.1.40" + optionalDependencies: + uglify-js "~2.3" + +handlebars@^4.0.0: + version "4.0.11" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^1.0.5: + version "1.0.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-schema@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~4.2.1: + version "4.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +har-validator@~5.0.3: + version "5.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + +has-ansi@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + dependencies: + ansi-regex "^2.0.0" + +has-flag@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +hawk@1.1.1: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hawk/-/hawk-1.1.1.tgz#87cd491f9b46e4e2aeaca335416766885d2d1ed9" + dependencies: + boom "0.4.x" + cryptiles "0.2.x" + hoek "0.9.x" + sntp "0.2.x" + +hawk@3.1.3, hawk@~3.1.3: + version "3.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hawk@~6.0.2: + version "6.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + +hoek@0.9.x: + version "0.9.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" + +hoek@2.x.x: + version "2.16.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hoek@4.x.x: + version "4.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + +hosted-git-info@^2.1.4: + version "2.5.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + +"htmlparser2@>= 3.7.3 < 4.0.0": + version "3.9.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + dependencies: + domelementtype "^1.3.0" + domhandler "^2.3.0" + domutils "^1.5.1" + entities "^1.1.1" + inherits "^2.0.1" + readable-stream "^2.0.2" + +http-signature@~0.10.0: + version "0.10.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" + dependencies: + asn1 "0.1.11" + assert-plus "^0.1.5" + ctype "0.5.3" + +http-signature@~1.1.0: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-browserify@0.0.1: + version "0.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" + +iconv-lite@^0.4.5, iconv-lite@~0.4.13: + version "0.4.19" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +ieee754@^1.1.4: + version "1.1.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + +immutable@^3.7.2, immutable@^3.7.4: + version "3.8.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + +indent-string@^2.1.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + dependencies: + repeating "^2.0.0" + +indexof@0.0.1: + version "0.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + +inflight@^1.0.4: + version "1.0.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +inherits@2.0.1: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + +ini@~1.3.0: + version "1.3.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +inquirer@^0.11.0: + version "0.11.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/inquirer/-/inquirer-0.11.4.tgz#81e3374e8361beaff2d97016206d359d0b32fa4d" + dependencies: + ansi-escapes "^1.1.0" + ansi-regex "^2.0.0" + chalk "^1.0.0" + cli-cursor "^1.0.1" + cli-width "^1.0.1" + figures "^1.3.5" + lodash "^3.3.1" + readline2 "^1.0.1" + run-async "^0.1.0" + rx-lite "^3.1.2" + string-width "^1.0.1" + strip-ansi "^3.0.0" + through "^2.3.6" + +interpret@^0.6.4: + version "0.6.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b" + +invariant@^2.2.2: + version "2.2.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + dependencies: + loose-envify "^1.0.0" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + +is-builtin-module@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + dependencies: + builtin-modules "^1.0.0" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-finite@^1.0.0: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-my-json-valid@^2.10.0: + version "2.16.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" + dependencies: + generate-function "^2.0.0" + generate-object-property "^1.1.0" + jsonpointer "^4.0.0" + xtend "^4.0.0" + +is-number@^2.1.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-path-cwd@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + +is-path-in-cwd@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + dependencies: + is-path-inside "^1.0.0" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-promise@2.1.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + +is-property@^1.0.0: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + +is-resolvable@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" + dependencies: + tryit "^1.0.1" + +is-stream@^1.0.1: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + +isarray@0.0.1: + version "0.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +iso@^4.1.0: + version "4.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/iso/-/iso-4.2.0.tgz#528a6aad29cd4663f589e16cd1e148f38a7eecdb" + dependencies: + escape-html "1.0.2" + +isobject@^2.0.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isomorphic-fetch@^2.1.1: + version "2.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + dependencies: + node-fetch "^1.0.1" + whatwg-fetch ">=0.10.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +istanbul@0.3.19: + version "0.3.19" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/istanbul/-/istanbul-0.3.19.tgz#b8e30aca58a4a4e08966d9530e706bcbba252ba2" + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.6.x" + esprima "2.5.x" + fileset "0.2.x" + handlebars "3.0.0" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "1.3.x" + which "1.0.x" + wordwrap "0.0.x" + +jade@0.26.3: + version "0.26.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" + dependencies: + commander "0.6.1" + mkdirp "0.3.0" + +js-tokens@^3.0.0, js-tokens@^3.0.2: + version "3.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + +js-yaml@3.0.1: + version "3.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/js-yaml/-/js-yaml-3.0.1.tgz#76405fea5bce30fc8f405d48c6dca7f0a32c6afe" + dependencies: + argparse "~ 0.1.11" + esprima "~ 1.0.2" + +js-yaml@3.4.5: + version "3.4.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/js-yaml/-/js-yaml-3.4.5.tgz#c3403797df12b91866574f2de23646fe8cafb44d" + dependencies: + argparse "^1.0.2" + esprima "^2.6.0" + +js-yaml@3.x: + version "3.10.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +jsdom@6.3.0: + version "6.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsdom/-/jsdom-6.3.0.tgz#0470e6c093f5d9f7d2f91236b7834dbbf56b964d" + dependencies: + acorn "^1.2.1" + acorn-globals "^1.0.4" + browser-request ">= 0.3.1 < 0.4.0" + cssom ">= 0.3.0 < 0.4.0" + cssstyle ">= 0.2.29 < 0.3.0" + escodegen "^1.6.1" + htmlparser2 ">= 3.7.3 < 4.0.0" + nwmatcher ">= 1.3.6 < 2.0.0" + parse5 "^1.4.2" + request "^2.55.0" + symbol-tree ">= 3.1.0 < 4.0.0" + tough-cookie "^1.1.0" + whatwg-url-compat "~0.6.5" + xml-name-validator ">= 2.0.1 < 3.0.0" + xmlhttprequest ">= 1.6.0 < 2.0.0" + xtend "^4.0.0" + +jsesc@^1.3.0: + version "1.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + +jsesc@~0.5.0: + version "0.5.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema@0.2.3: + version "0.2.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +json5@^0.5.0, json5@^0.5.1: + version "0.5.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + +jsonify@~0.0.0: + version "0.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsonpointer@^4.0.0: + version "4.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + +jsprim@^1.2.2: + version "1.4.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +jstransform@^11.0.3: + version "11.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223" + dependencies: + base62 "^1.1.0" + commoner "^0.10.1" + esprima-fb "^15001.1.0-dev-harmony-fb" + object-assign "^2.0.0" + source-map "^0.4.2" + +kind-of@^3.0.2: + version "3.2.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lcov-parse@0.0.6: + version "0.0.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lcov-parse/-/lcov-parse-0.0.6.tgz#819e5da8bf0791f9d3f39eea5ed1868187f11175" + +levn@~0.2.5: + version "0.2.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/levn/-/levn-0.2.5.tgz#ba8d339d0ca4a610e3a3f145b9caf48807155054" + dependencies: + prelude-ls "~1.1.0" + type-check "~0.3.1" + +levn@~0.3.0: + version "0.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^1.0.0: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +loader-utils@^0.2.11: + version "0.2.17" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + object-assign "^4.0.1" + +loader-utils@^1.0.2: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + dependencies: + big.js "^3.1.3" + emojis-list "^2.0.0" + json5 "^0.5.0" + +lodash._arraycopy@^3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" + +lodash._arrayeach@^3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" + +lodash._arraymap@^3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz#1a8fd0f4c0df4b61dea076d717cdc97f0a3c3e66" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._baseclone@^3.0.0: + version "3.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" + dependencies: + lodash._arraycopy "^3.0.0" + lodash._arrayeach "^3.0.0" + lodash._baseassign "^3.0.0" + lodash._basefor "^3.0.0" + lodash.isarray "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basedifference@^3.0.0: + version "3.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._basedifference/-/lodash._basedifference-3.0.3.tgz#f2c204296c2a78e02b389081b6edcac933cf629c" + dependencies: + lodash._baseindexof "^3.0.0" + lodash._cacheindexof "^3.0.0" + lodash._createcache "^3.0.0" + +lodash._baseflatten@^3.0.0: + version "3.1.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz#0770ff80131af6e34f3b511796a7ba5214e65ff7" + dependencies: + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash._basefor@^3.0.0: + version "3.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" + +lodash._baseindexof@^3.0.0: + version "3.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + +lodash._bindcallback@^3.0.0: + version "3.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + +lodash._cacheindexof@^3.0.0: + version "3.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + +lodash._createassigner@^3.0.0: + version "3.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" + dependencies: + lodash._bindcallback "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash.restparam "^3.0.0" + +lodash._createcache@^3.0.0: + version "3.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + dependencies: + lodash._getnative "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash._pickbyarray@^3.0.0: + version "3.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._pickbyarray/-/lodash._pickbyarray-3.0.2.tgz#1f898d9607eb560b0e167384b77c7c6d108aa4c5" + +lodash._pickbycallback@^3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._pickbycallback/-/lodash._pickbycallback-3.0.0.tgz#ff61b9a017a7b3af7d30e6c53de28afa19b8750a" + dependencies: + lodash._basefor "^3.0.0" + lodash.keysin "^3.0.0" + +lodash.assign@^3.2.0: + version "3.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" + dependencies: + lodash._baseassign "^3.0.0" + lodash._createassigner "^3.0.0" + lodash.keys "^3.0.0" + +lodash.clonedeep@^3.0.1: + version "3.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db" + dependencies: + lodash._baseclone "^3.0.0" + lodash._bindcallback "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.isplainobject@^3.0.0: + version "3.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5" + dependencies: + lodash._basefor "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.keysin "^3.0.0" + +lodash.istypedarray@^3.0.0: + version "3.0.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.keysin@^3.0.0: + version "3.0.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f" + dependencies: + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.merge@^3.3.2: + version "3.3.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994" + dependencies: + lodash._arraycopy "^3.0.0" + lodash._arrayeach "^3.0.0" + lodash._createassigner "^3.0.0" + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + lodash.isplainobject "^3.0.0" + lodash.istypedarray "^3.0.0" + lodash.keys "^3.0.0" + lodash.keysin "^3.0.0" + lodash.toplainobject "^3.0.0" + +lodash.omit@^3.1.0: + version "3.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.omit/-/lodash.omit-3.1.0.tgz#897fe382e6413d9ac97c61f78ed1e057a00af9f3" + dependencies: + lodash._arraymap "^3.0.0" + lodash._basedifference "^3.0.0" + lodash._baseflatten "^3.0.0" + lodash._bindcallback "^3.0.0" + lodash._pickbyarray "^3.0.0" + lodash._pickbycallback "^3.0.0" + lodash.keysin "^3.0.0" + lodash.restparam "^3.0.0" + +lodash.pick@^3.1.0: + version "3.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.pick/-/lodash.pick-3.1.0.tgz#f252a855b2046b61bcd3904b26f76bd2efc65550" + dependencies: + lodash._baseflatten "^3.0.0" + lodash._bindcallback "^3.0.0" + lodash._pickbyarray "^3.0.0" + lodash._pickbycallback "^3.0.0" + lodash.restparam "^3.0.0" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash.toplainobject@^3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keysin "^3.0.0" + +lodash@^3.2.0, lodash@^3.3.1: + version "3.10.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + +lodash@^4.17.4, lodash@^4.2.0: + version "4.17.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +log-driver@1.2.4: + version "1.2.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/log-driver/-/log-driver-1.2.4.tgz#2d62d7faef45d8a71341961a04b0761eca99cfa3" + +log-symbols@^1.0.2: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" + dependencies: + chalk "^1.0.0" + +lolex@1.3.2: + version "1.3.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31" + +longest@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: + version "1.3.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + dependencies: + js-tokens "^3.0.0" + +loud-rejection@^1.0.0: + version "1.6.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + dependencies: + currently-unhandled "^0.4.1" + signal-exit "^3.0.0" + +lru-cache@2: + version "2.7.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + +lunr@^0.5.9: + version "0.5.12" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lunr/-/lunr-0.5.12.tgz#a2f6b7d7801cbe2ccb1696da67f1f7788f89e0c8" + +map-obj@^1.0.0, map-obj@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + +marked@^0.3.3: + version "0.3.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" + +memory-fs@^0.2.0: + version "0.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" + +memory-fs@~0.3.0: + version "0.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20" + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + +meow@^3.5.0: + version "3.7.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + dependencies: + 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" + +micromatch@^2.1.5: + version "2.3.11" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +mime-db@~1.30.0: + version "1.30.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + +mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: + version "2.1.17" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + dependencies: + mime-db "~1.30.0" + +mime-types@~1.0.1: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mime-types/-/mime-types-1.0.2.tgz#995ae1392ab8affcbfcb2641dd054e943c0d5dce" + +mime@~1.2.11: + version "1.2.11" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" + +minimatch@0.3: + version "0.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" + dependencies: + lru-cache "2" + sigmund "~1.0.0" + +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimatch@2.x: + version "2.0.10" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" + dependencies: + brace-expansion "^1.0.0" + +minimist@0.0.8: + version "0.0.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: + version "1.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.1: + version "0.0.10" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +mkdirp@0.3.0: + version "0.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + +mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: + version "0.5.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mocha@^2.2.4: + version "2.5.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58" + dependencies: + commander "2.3.0" + debug "2.2.0" + diff "1.4.0" + escape-string-regexp "1.0.2" + glob "3.2.11" + growl "1.9.2" + jade "0.26.3" + mkdirp "0.5.1" + supports-color "1.2.0" + to-iso-string "0.0.2" + +ms@0.7.1: + version "0.7.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + +ms@2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +mute-stream@0.0.5: + version "0.0.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" + +nan@^2.3.0: + version "2.7.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" + +node-fetch@^1.0.1: + version "1.7.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + +node-libs-browser@^0.7.0: + version "0.7.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b" + dependencies: + assert "^1.1.1" + browserify-zlib "^0.1.4" + buffer "^4.9.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "3.3.0" + domain-browser "^1.1.1" + events "^1.0.0" + https-browserify "0.0.1" + os-browserify "^0.2.0" + path-browserify "0.0.0" + process "^0.11.0" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.0.5" + stream-browserify "^2.0.1" + stream-http "^2.3.1" + string_decoder "^0.10.25" + timers-browserify "^2.0.2" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.10.3" + vm-browserify "0.0.4" + +node-pre-gyp@^0.6.36: + version "0.6.39" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + dependencies: + detect-libc "^1.0.2" + hawk "3.1.3" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +node-uuid@~1.4.0: + version "1.4.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" + +nopt@3.x: + version "3.0.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + dependencies: + abbrev "1" + +nopt@^4.0.1: + version "4.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: + version "2.4.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + dependencies: + 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@^2.0.0, normalize-path@^2.0.1: + version "2.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npmlog@^4.0.2: + version "4.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +"nwmatcher@>= 1.3.6 < 2.0.0": + version "1.4.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" + +oauth-sign@~0.3.0: + version "0.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/oauth-sign/-/oauth-sign-0.3.0.tgz#cb540f93bb2b22a7d5941691a288d60e8ea9386e" + +oauth-sign@~0.8.1, oauth-sign@~0.8.2: + version "0.8.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^2.0.0: + version "2.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" + +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: + version "4.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object.omit@^2.0.0: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +once@1.x, once@^1.3.0, once@^1.3.3: + version "1.4.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +onetime@^1.0.0: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" + +optimist@^0.6.1, optimist@~0.6.0: + version "0.6.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +optimist@~0.3.5: + version "0.3.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" + dependencies: + wordwrap "~0.0.2" + +optionator@^0.5.0: + version "0.5.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/optionator/-/optionator-0.5.0.tgz#b75a8995a2d417df25b6e4e3862f50aa88651368" + dependencies: + deep-is "~0.1.2" + fast-levenshtein "~1.0.0" + levn "~0.2.5" + prelude-ls "~1.1.1" + type-check "~0.3.1" + wordwrap "~0.0.2" + +optionator@^0.6.0: + version "0.6.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/optionator/-/optionator-0.6.0.tgz#b63ecbbf0e315fad4bc9827b45dc7ba45284fcb6" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~1.0.6" + levn "~0.2.5" + prelude-ls "~1.1.1" + type-check "~0.3.1" + wordwrap "~0.0.2" + +optionator@^0.8.1: + version "0.8.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.4" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + wordwrap "~1.0.0" + +os-browserify@^0.2.0: + version "0.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +output-file-sync@^1.1.0: + version "1.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + dependencies: + graceful-fs "^4.1.4" + mkdirp "^0.5.1" + object-assign "^4.1.0" + +pako@~0.2.0: + version "0.2.9" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parse-json@^2.2.0: + version "2.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + dependencies: + error-ex "^1.2.0" + +parse5@^1.4.2: + version "1.5.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + +path-browserify@0.0.0: + version "0.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + +path-exists@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081" + +path-exists@^2.0.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + dependencies: + pinkie-promise "^2.0.0" + +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-type@^1.0.0: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +pbkdf2-compat@2.0.1: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288" + +performance-now@^0.2.0: + version "0.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +performance-now@^2.1.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^2.0.0: + version "2.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + dependencies: + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + +prelude-ls@~1.1.0, prelude-ls@~1.1.1, prelude-ls@~1.1.2: + version "1.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + +preserve@^0.2.0: + version "0.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +private@^0.1.6, private@^0.1.7, private@~0.1.5: + version "0.1.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +process@^0.11.0: + version "0.11.10" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + +promise@^7.0.3, promise@^7.1.1: + version "7.3.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +prop-types@^15.5.10: + version "15.6.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.3.1" + object-assign "^4.1.1" + +prr@~0.0.0: + version "0.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + +punycode@1.3.2: + version "1.3.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + +punycode@^1.2.4, punycode@^1.4.1: + version "1.4.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +q@^1.1.2: + version "1.5.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + +qs@~1.0.0: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/qs/-/qs-1.0.2.tgz#50a93e2b5af6691c31bcea5dae78ee6ea1903768" + +qs@~6.4.0: + version "6.4.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +qs@~6.5.1: + version "6.5.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +querystring-es3@^0.2.0: + version "0.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + +querystring@0.2.0: + version "0.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + +randomatic@^1.1.3: + version "1.1.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +rc@^1.1.7: + version "1.2.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +react-addons-test-utils@~15.6.2: + version "15.6.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/react-addons-test-utils/-/react-addons-test-utils-15.6.2.tgz#c12b6efdc2247c10da7b8770d185080a7b047156" + +react-dom@~15.6.2: + version "15.6.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + prop-types "^15.5.10" + +react-text-highlight@^0.1.1: + version "0.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/react-text-highlight/-/react-text-highlight-0.1.1.tgz#522fe0647c4409909aadde74940f6f7f2d7477d1" + dependencies: + react "^0.13.3" + +react@^0.13.3: + version "0.13.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/react/-/react-0.13.3.tgz#a2dfa85335d7dc02b82b482f089582e64cc13356" + dependencies: + envify "^3.0.0" + +react@~15.6.2: + version "15.6.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72" + dependencies: + create-react-class "^15.6.0" + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + prop-types "^15.5.10" + +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6: + version "2.3.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +readline2@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + mute-stream "0.0.5" + +recast@^0.11.17: + version "0.11.23" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" + dependencies: + ast-types "0.9.6" + esprima "~3.1.0" + private "~0.1.5" + source-map "~0.5.0" + +redent@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + dependencies: + indent-string "^2.1.0" + strip-indent "^1.0.1" + +regenerate@^1.2.1: + version "1.3.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + +regenerator-runtime@^0.10.5: + version "0.10.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + +regenerator-runtime@^0.11.0: + version "0.11.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + +regenerator-transform@^0.10.0: + version "0.10.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + dependencies: + babel-runtime "^6.18.0" + babel-types "^6.19.0" + private "^0.1.6" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regexpu-core@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + dependencies: + regenerate "^1.2.1" + regjsgen "^0.2.0" + regjsparser "^0.1.4" + +regjsgen@^0.2.0: + version "0.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + +regjsparser@^0.1.4: + version "0.1.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + dependencies: + jsesc "~0.5.0" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +repeating@^2.0.0: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + dependencies: + is-finite "^1.0.0" + +request@2.40.0: + version "2.40.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/request/-/request-2.40.0.tgz#4dd670f696f1e6e842e66b4b5e839301ab9beb67" + dependencies: + forever-agent "~0.5.0" + json-stringify-safe "~5.0.0" + mime-types "~1.0.1" + node-uuid "~1.4.0" + qs "~1.0.0" + optionalDependencies: + aws-sign2 "~0.5.0" + form-data "~0.1.0" + hawk "1.1.1" + http-signature "~0.10.0" + oauth-sign "~0.3.0" + stringstream "~0.0.4" + tough-cookie ">=0.12.0" + tunnel-agent "~0.4.0" + +request@2.81.0: + version "2.81.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + 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" + +request@^2.55.0, request@^2.65.0: + version "2.83.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +resolve@1.1.x: + version "1.1.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + +restore-cursor@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" + dependencies: + exit-hook "^1.0.0" + onetime "^1.0.0" + +right-align@^0.1.1: + version "0.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.2.8, rimraf@^2.3.2, rimraf@^2.5.1, rimraf@^2.6.1: + version "2.6.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +ripemd160@0.2.0: + version "0.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce" + +run-async@^0.1.0: + version "0.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" + dependencies: + once "^1.3.0" + +rx-lite@^3.1.2: + version "3.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" + +safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +samsam@1.1.2: + version "1.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567" + +samsam@~1.1: + version "1.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/samsam/-/samsam-1.1.3.tgz#9f5087419b4d091f232571e7fa52e90b0f552621" + +semver-regex@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9" + +semver-truncate@^1.0.0: + version "1.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/semver-truncate/-/semver-truncate-1.1.2.tgz#57f41de69707a62709a7e0104ba2117109ea47e8" + dependencies: + semver "^5.3.0" + +"semver@2 || 3 || 4 || 5", semver@^5.3.0: + version "5.4.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + +semver@^4.0.3: + version "4.3.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" + +set-blocking@~2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +setimmediate@^1.0.4, setimmediate@^1.0.5: + version "1.0.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + +sha.js@2.2.6: + version "2.2.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" + +shelljs@^0.5.3: + version "0.5.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/shelljs/-/shelljs-0.5.3.tgz#c54982b996c76ef0c1e6b59fbdc5825f5b713113" + +sigmund@~1.0.0: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" + +signal-exit@^3.0.0: + version "3.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +sinon@^1.14.0: + version "1.17.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sinon/-/sinon-1.17.7.tgz#4542a4f49ba0c45c05eb2e9dd9d203e2b8efe0bf" + dependencies: + formatio "1.1.1" + lolex "1.3.2" + samsam "1.1.2" + util ">=0.10.3 <1" + +slash@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + +sntp@0.2.x: + version "0.2.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" + dependencies: + hoek "0.9.x" + +sntp@1.x.x: + version "1.0.9" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sntp@2.x.x: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + dependencies: + hoek "4.x.x" + +source-list-map@~0.1.7: + version "0.1.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" + +source-map-support@^0.4.15: + version "0.4.18" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + dependencies: + source-map "^0.5.6" + +source-map@^0.1.40, source-map@~0.1.40, source-map@~0.1.7: + version "0.1.43" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.4.2, source-map@^0.4.4, source-map@~0.4.1: + version "0.4.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.6: + version "0.5.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +spawn-command@^0.0.2: + version "0.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" + +spdx-correct@~1.0.0: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + dependencies: + spdx-license-ids "^1.0.2" + +spdx-expression-parse@~1.0.0: + version "1.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + +spdx-license-ids@^1.0.2: + version "1.2.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + +sshpk@^1.7.0: + version "1.13.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +stream-browserify@^2.0.1: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@^2.3.1: + version "2.7.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.2.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string_decoder@^0.10.25: + version "0.10.31" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + +string_decoder@~1.0.3: + version "1.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4, stringstream@~0.0.5: + version "0.0.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + dependencies: + is-utf8 "^0.2.0" + +strip-indent@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + dependencies: + get-stdin "^4.0.1" + +strip-json-comments@~1.0.1: + version "1.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +style-loader@^0.13.0: + version "0.13.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/style-loader/-/style-loader-0.13.2.tgz#74533384cf698c7104c7951150b49717adc2f3bb" + dependencies: + loader-utils "^1.0.2" + +supports-color@1.2.0: + version "1.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e" + +supports-color@1.3.x: + version "1.3.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-1.3.1.tgz#15758df09d8ff3b4acc307539fabe27095e1042d" + +supports-color@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + +supports-color@^3.1.0: + version "3.2.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + dependencies: + has-flag "^1.0.0" + +"symbol-tree@>= 3.1.0 < 4.0.0": + version "3.2.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + +tapable@^0.1.8, tapable@~0.1.8: + version "0.1.10" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" + +tar-pack@^3.4.0: + version "3.4.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.2.1: + version "2.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +text-table@~0.2.0: + version "0.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + +through@^2.3.6, through@~2.3.4: + version "2.3.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +timers-browserify@^2.0.2: + version "2.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6" + dependencies: + setimmediate "^1.0.4" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + +to-iso-string@0.0.2: + version "0.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1" + +tough-cookie@>=0.12.0, tough-cookie@~2.3.0, tough-cookie@~2.3.3: + version "2.3.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + dependencies: + punycode "^1.4.1" + +tough-cookie@^1.1.0: + version "1.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tough-cookie/-/tough-cookie-1.2.0.tgz#9b7e9d98e769e80b5aa899d944fe44e02ebf82ad" + +tr46@~0.0.1: + version "0.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + +transmitter@3.0.1: + version "3.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/transmitter/-/transmitter-3.0.1.tgz#32e99e43d1321e49dc2e194fa75df4fe84a8b918" + +trim-newlines@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + +trim-right@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + +tryit@^1.0.1: + version "1.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" + +tty-browserify@0.0.0: + version "0.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tunnel-agent@~0.4.0: + version "0.4.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-check@~0.3.1, type-check@~0.3.2: + version "0.3.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + dependencies: + prelude-ls "~1.1.2" + +type-detect@0.1.1: + version "0.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" + +typedarray@^0.0.6: + version "0.0.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + +ua-parser-js@^0.7.9: + version "0.7.17" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" + +uglify-js@^2.6: + version "2.8.29" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-js@~2.3: + version "2.3.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uglify-js/-/uglify-js-2.3.6.tgz#fa0984770b428b7a9b2a8058f46355d14fef211a" + dependencies: + async "~0.2.6" + optimist "~0.3.5" + source-map "~0.1.7" + +uglify-js@~2.7.3: + version "2.7.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" + dependencies: + async "~0.2.6" + source-map "~0.5.1" + uglify-to-browserify "~1.0.0" + yargs "~3.10.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@^0.0.6: + version "0.0.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +underscore.string@~2.4.0: + version "2.4.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" + +underscore@~1.7.0: + version "1.7.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + +url@^0.11.0: + version "0.11.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +user-home@^1.1.1: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + +user-home@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" + dependencies: + os-homedir "^1.0.0" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +util@0.10.3, "util@>=0.10.3 <1", util@^0.10.3: + version "0.10.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + dependencies: + inherits "2.0.1" + +uuid@^3.0.0, uuid@^3.1.0: + version "3.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + +v8flags@^2.0.10: + version "2.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + dependencies: + user-home "^1.1.1" + +validate-npm-package-license@^3.0.1: + version "3.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + dependencies: + spdx-correct "~1.0.0" + spdx-expression-parse "~1.0.0" + +verror@1.10.0: + version "1.10.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +vm-browserify@0.0.4: + version "0.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + dependencies: + indexof "0.0.1" + +watchpack@^0.2.1: + version "0.2.9" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b" + dependencies: + async "^0.9.0" + chokidar "^1.0.0" + graceful-fs "^4.1.2" + +webpack-core@~0.6.9: + version "0.6.9" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" + dependencies: + source-list-map "~0.1.7" + source-map "~0.4.1" + +webpack@^1.9.12: + version "1.15.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/webpack/-/webpack-1.15.0.tgz#4ff31f53db03339e55164a9d468ee0324968fe98" + dependencies: + acorn "^3.0.0" + async "^1.3.0" + clone "^1.0.2" + enhanced-resolve "~0.9.0" + interpret "^0.6.4" + loader-utils "^0.2.11" + memory-fs "~0.3.0" + mkdirp "~0.5.0" + node-libs-browser "^0.7.0" + optimist "~0.6.0" + supports-color "^3.1.0" + tapable "~0.1.8" + uglify-js "~2.7.3" + watchpack "^0.2.1" + webpack-core "~0.6.9" + +whatwg-fetch@>=0.10.0: + version "2.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + +whatwg-fetch@^0.9.0: + version "0.9.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" + +whatwg-url-compat@~0.6.5: + version "0.6.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz#00898111af689bb097541cd5a45ca6c8798445bf" + dependencies: + tr46 "~0.0.1" + +which@1.0.x: + version "1.0.9" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/which/-/which-1.0.9.tgz#460c1da0f810103d0321a9b633af9e575e64486f" + +wide-align@^1.1.0: + version "1.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + +window-size@0.1.0: + version "0.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@0.0.x, wordwrap@~0.0.2: + version "0.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wordwrap@~1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + +wrappy@1: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write@^0.2.1: + version "0.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + dependencies: + mkdirp "^0.5.1" + +xml-escape@~1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/xml-escape/-/xml-escape-1.0.0.tgz#00963d697b2adf0c185c4e04e73174ba9b288eb2" + +"xml-name-validator@>= 2.0.1 < 3.0.0": + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + +"xmlhttprequest@>= 1.6.0 < 2.0.0": + version "1.8.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + +xtend@^4.0.0: + version "4.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + +yargs@~3.10.0: + version "3.10.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" From 5ba67055a6c9aa108361557460b651b9018506db Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 10:07:13 -0500 Subject: [PATCH 03/21] Update to use correct react test utils --- package.json | 1 - test/batching-test.js | 2 +- yarn.lock | 4 ---- 3 files changed, 1 insertion(+), 6 deletions(-) diff --git a/package.json b/package.json index 51c4e177..91e3cbd7 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,6 @@ "mocha": "^2.2.4", "object-assign": "^2.0.0", "react": "~15.6.2", - "react-addons-test-utils": "~15.6.2", "react-dom": "~15.6.2", "rimraf": "^2.3.2", "sinon": "^1.14.0", diff --git a/test/batching-test.js b/test/batching-test.js index 981f9aa7..ded881b0 100644 --- a/test/batching-test.js +++ b/test/batching-test.js @@ -2,7 +2,7 @@ import { jsdom } from 'jsdom' import Alt from '../' import React from 'react' import { assert } from 'chai' -import TestUtils from 'react-addons-test-utils' +import TestUtils from 'react-dom/test-utils' import ReactDom from 'react-dom' const Actions = { diff --git a/yarn.lock b/yarn.lock index f6bbf399..7485a074 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3475,10 +3475,6 @@ rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-addons-test-utils@~15.6.2: - version "15.6.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/react-addons-test-utils/-/react-addons-test-utils-15.6.2.tgz#c12b6efdc2247c10da7b8770d185080a7b047156" - react-dom@~15.6.2: version "15.6.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730" From 29e5eddd214c3d6c3a30958ba56acfcd3d2a89e5 Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 12:27:01 -0500 Subject: [PATCH 04/21] Modernize babel, tests, eslint, etc --- .babelrc | 2 +- .eslintrc | 17 +- CHANGELOG.md | 4 + bower.json | 37 - dist.config.js | 34 +- dist.min.config.js | 34 +- dist/alt.js | 3447 +++++++++++++++++------------------ dist/alt.min.js | 2 +- package.json | 43 +- src/actions/index.js | 90 +- src/functions.js | 26 +- src/index.js | 467 +++-- src/store/AltStore.js | 207 ++- src/store/StoreMixin.js | 319 ++-- src/store/index.js | 275 ++- src/utils/AltUtils.js | 107 +- src/utils/StateFunctions.js | 82 +- test/index.js | 2120 ++++++++++----------- yarn.lock | 2269 +++++++++++++---------- 19 files changed, 4863 insertions(+), 4719 deletions(-) delete mode 100644 bower.json diff --git a/.babelrc b/.babelrc index 9abdcc55..963f009a 100644 --- a/.babelrc +++ b/.babelrc @@ -1,5 +1,5 @@ { - "presets": ["airbnb", "stage-0"], + "presets": ["env", "babel-preset-react", "babel-preset-stage-0"], "plugins": [ "add-module-exports", "transform-class-properties", diff --git a/.eslintrc b/.eslintrc index ea5ab18c..d1f6e648 100644 --- a/.eslintrc +++ b/.eslintrc @@ -5,12 +5,15 @@ "browser": true, "es6": true }, - "parser": "babel-eslint", - "ecmaFeatures": { - "modules": true, - "jsx": true - }, "rules": { - "semi": [2, "never"], - } + "indent": [1, 4, { + "SwitchCase": 1 + }], + "arrow-body-style": [2, "always"], + "class-methods-use-this": 0, + "no-console": 0, + "no-prototype-builtins": 0, + "no-underscore-dangle": 0 + }, + "parser": "babel-eslint" } diff --git a/CHANGELOG.md b/CHANGELOG.md index a45f76f0..33e4d076 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Changelog +## 1.0.0 + +* Upgrade babel, webpack, react versions to latest + ## 0.18.6 * Fixes inheritance for actions #678 diff --git a/bower.json b/bower.json deleted file mode 100644 index e5955df5..00000000 --- a/bower.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "name": "alt", - "version": "0.18.3", - "homepage": "https://github.com/goatslacker/alt", - "authors": [ - "Josh Perez " - ], - "description": "Alt is a flux implementation that is small (~4.3kb & 400 LOC), well tested, terse, insanely flexible, and forward thinking.", - "main": "dist/alt.js", - "devDependencies": { - "babel": "^4.0.1", - "coveralls": "^2.11.2", - "istanbul": "^0.3.5", - "mocha": "^2.1.0" - }, - "keywords": [ - "alt", - "es6", - "flow", - "flux", - "react", - "unidirectional" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components", - "test", - "tests", - "examples", - "src", - "coverage-test.js", - "coverage", - "TODO" - ] -} diff --git a/dist.config.js b/dist.config.js index 666382a1..7fd27a7c 100644 --- a/dist.config.js +++ b/dist.config.js @@ -1,19 +1,19 @@ module.exports = { - context: __dirname + '/src', - entry: { - 'alt': ['./index.js'], - }, - output: { - path: __dirname + '/dist', - filename: '[name].js', - library: 'Alt', - libraryTarget: 'umd' - }, - module: { - loaders: [{ - test: /\.js$/, - loader: 'babel', - exclude: /node_modules/ - }] - }, + context: `${__dirname}/src`, + entry: { + alt: ['./index.js'], + }, + output: { + path: `${__dirname}/dist`, + filename: '[name].js', + library: 'Alt', + libraryTarget: 'umd', + }, + module: { + loaders: [{ + test: /\.js$/, + loader: 'babel-loader', + exclude: /node_modules/, + }], + }, }; diff --git a/dist.min.config.js b/dist.min.config.js index 646fd44e..b9a46ec9 100644 --- a/dist.min.config.js +++ b/dist.min.config.js @@ -1,19 +1,19 @@ module.exports = { - context: __dirname + '/src', - entry: { - 'alt': ['./index.js'], - }, - output: { - path: __dirname + '/dist', - filename: '[name].min.js', - library: 'Alt', - libraryTarget: 'umd' - }, - module: { - loaders: [{ - test: /\.js$/, - loader: 'babel', - exclude: /node_modules/ - }] - }, + context: `${__dirname}/src`, + entry: { + alt: ['./index.js'], + }, + output: { + path: `${__dirname}/dist`, + filename: '[name].min.js', + library: 'Alt', + libraryTarget: 'umd', + }, + module: { + loaders: [{ + test: /\.js$/, + loader: 'babel-loader', + exclude: /node_modules/, + }], + }, }; diff --git a/dist/alt.js b/dist/alt.js index 68192cd5..ac5adae9 100644 --- a/dist/alt.js +++ b/dist/alt.js @@ -11,1951 +11,1820 @@ return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; - +/******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { - +/******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) +/******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; - +/******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { -/******/ exports: {}, -/******/ id: moduleId, -/******/ loaded: false +/******/ i: moduleId, +/******/ l: false, +/******/ exports: {} /******/ }; - +/******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); - +/******/ /******/ // Flag the module as loaded -/******/ module.loaded = true; - +/******/ module.l = true; +/******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } - - +/******/ +/******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; - +/******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; - +/******/ +/******/ // define getter function for harmony exports +/******/ __webpack_require__.d = function(exports, name, getter) { +/******/ if(!__webpack_require__.o(exports, name)) { +/******/ Object.defineProperty(exports, name, { +/******/ configurable: false, +/******/ enumerable: true, +/******/ get: getter +/******/ }); +/******/ } +/******/ }; +/******/ +/******/ // getDefaultExport function for compatibility with non-harmony modules +/******/ __webpack_require__.n = function(module) { +/******/ var getter = module && module.__esModule ? +/******/ function getDefault() { return module['default']; } : +/******/ function getModuleExports() { return module; }; +/******/ __webpack_require__.d(getter, 'a', getter); +/******/ return getter; +/******/ }; +/******/ +/******/ // Object.prototype.hasOwnProperty.call +/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; +/******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; - +/******/ /******/ // Load entry module and return exports -/******/ return __webpack_require__(0); +/******/ return __webpack_require__(__webpack_require__.s = 4); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports, __webpack_require__) { - module.exports = __webpack_require__(1); +"use strict"; +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.isMutableObject = isMutableObject; +exports.eachObject = eachObject; +exports.assign = assign; +var isFunction = exports.isFunction = function isFunction(x) { + return typeof x === 'function'; +}; + +function isMutableObject(target) { + var Ctor = target.constructor; + + return !!target && Object.prototype.toString.call(target) === '[object Object]' && isFunction(Ctor) && !Object.isFrozen(target) && (Ctor instanceof Ctor || target.type === 'AltStore'); +} + +function eachObject(f, o) { + o.forEach(function (from) { + Object.keys(Object(from)).forEach(function (key) { + f(key, from[key]); + }); + }); +} + +function assign(target) { + for (var _len = arguments.length, source = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + source[_key - 1] = arguments[_key]; + } + + eachObject(function (key, value) { + target[key] = value; //eslint-disable-line + }, source); + return target; +} + /***/ }), /* 1 */ /***/ (function(module, exports, __webpack_require__) { - 'use strict'; +"use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - var _flux = __webpack_require__(2); +Object.defineProperty(exports, "__esModule", { + value: true +}); - var _StateFunctions = __webpack_require__(6); +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +exports.getInternalMethods = getInternalMethods; +exports.getPrototypeChain = getPrototypeChain; +exports.warn = warn; +exports.uid = uid; +exports.formatAsConstant = formatAsConstant; +exports.dispatchIdentity = dispatchIdentity; +exports.fsa = fsa; +exports.dispatch = dispatch; + +var _functions = __webpack_require__(0); + +var fn = _interopRequireWildcard(_functions); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +/*eslint-disable*/ +var builtIns = Object.getOwnPropertyNames(NoopClass); +var builtInProto = Object.getOwnPropertyNames(NoopClass.prototype); +/* eslint-enable */ + +function getInternalMethods(Obj, isProto) { + var excluded = isProto ? builtInProto : builtIns; + var obj = isProto ? Obj.prototype : Obj; + return Object.getOwnPropertyNames(obj).reduce(function (value, m) { + if (excluded.indexOf(m) !== -1) { + return value; + } + + value[m] = obj[m]; //eslint-disable-line + return value; + }, {}); +} + +function getPrototypeChain(Obj) { + var methods = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + return Obj === Function.prototype ? methods : getPrototypeChain(Object.getPrototypeOf(Obj), fn.assign(getInternalMethods(Obj, true), methods)); +} + +function warn(msg) { + /* istanbul ignore else */ + /*eslint-disable*/ + if (typeof console !== 'undefined') { + console.warn(new ReferenceError(msg)); + } + /* eslint-enable */ +} + +function uid(container, name) { + var count = 0; + var key = name; + while (Object.hasOwnProperty.call(container, key)) { + count += 1; + key = name + String(count); + } + return key; +} + +function formatAsConstant(name) { + return name.replace(/[a-z]([A-Z])/g, function (i) { + return i[0] + '_' + i[1].toLowerCase(); + }).toUpperCase(); +} + +function dispatchIdentity(x) { + if (x === undefined) return null; + + for (var _len = arguments.length, a = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + a[_key - 1] = arguments[_key]; + } + + return a.length ? [x].concat(a) : x; +} + +function fsa(id, type, payload, details) { + return { + type: type, + payload: payload, + meta: _extends({ + dispatchId: id + }, details), + + id: id, + action: type, + data: payload, + details: details + }; +} + +function dispatch(id, actionObj, payload, alt) { + var data = actionObj.dispatch(payload); + if (data === undefined) return null; + + var type = actionObj.id; + var namespace = type; + var name = type; + var details = { id: type, namespace: namespace, name: name }; + + var dispatchLater = function dispatchLater(x) { + return alt.dispatch(type, x, details); + }; + + if (fn.isFunction(data)) return data(dispatchLater, alt); + + // XXX standardize this + return alt.dispatcher.dispatch(fsa(id, type, data, details)); +} + +/* istanbul ignore next */ +function NoopClass() {} + +/***/ }), +/* 2 */ +/***/ (function(module, exports) { - var StateFunctions = _interopRequireWildcard(_StateFunctions); +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; - var _functions = __webpack_require__(7); - var fn = _interopRequireWildcard(_functions); +/***/ }), +/* 3 */ +/***/ (function(module, exports, __webpack_require__) { - var _store = __webpack_require__(8); +"use strict"; + + +function transmitter() { + var subscriptions = []; + var nowDispatching = false; + var toUnsubscribe = {}; + + var unsubscribe = function unsubscribe(onChange) { + var id = subscriptions.indexOf(onChange); + if (id < 0) return; + if (nowDispatching) { + toUnsubscribe[id] = onChange; + return; + } + subscriptions.splice(id, 1); + }; + + var subscribe = function subscribe(onChange) { + var id = subscriptions.push(onChange); + var dispose = function dispose() { + return unsubscribe(onChange); + }; + return { dispose: dispose }; + }; + + var publish = function publish() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } + + nowDispatching = true; + try { + subscriptions.forEach(function (subscription, id) { + return toUnsubscribe[id] || subscription.apply(undefined, args); + }); + } finally { + nowDispatching = false; + Object.keys(toUnsubscribe).forEach(function (id) { + return unsubscribe(toUnsubscribe[id]); + }); + toUnsubscribe = {}; + } + }; + + return { + publish: publish, + subscribe: subscribe, + $subscriptions: subscriptions + }; +} + +module.exports = transmitter; - var store = _interopRequireWildcard(_store); +/***/ }), +/* 4 */ +/***/ (function(module, exports, __webpack_require__) { - var _AltUtils = __webpack_require__(9); +module.exports = __webpack_require__(5); - var utils = _interopRequireWildcard(_AltUtils); - var _actions = __webpack_require__(13); +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { - var _actions2 = _interopRequireDefault(_actions); +"use strict"; - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } +Object.defineProperty(exports, "__esModule", { + value: true +}); - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } +var _flux = __webpack_require__(6); - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } +var _StateFunctions = __webpack_require__(9); - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /* global window */ +var StateFunctions = _interopRequireWildcard(_StateFunctions); +var _functions = __webpack_require__(0); - var Alt = function () { - function Alt() { - var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; +var fn = _interopRequireWildcard(_functions); - _classCallCheck(this, Alt); +var _store = __webpack_require__(10); - this.config = config; - this.serialize = config.serialize || JSON.stringify; - this.deserialize = config.deserialize || JSON.parse; - this.dispatcher = config.dispatcher || new _flux.Dispatcher(); - this.batchingFunction = config.batchingFunction || function (callback) { - return callback(); - }; - this.actions = { global: {} }; - this.stores = {}; - this.storeTransforms = config.storeTransforms || []; - this.trapAsync = false; - this._actionsRegistry = {}; - this._initSnapshot = {}; - this._lastSnapshot = {}; - } +var store = _interopRequireWildcard(_store); - Alt.prototype.dispatch = function () { - function dispatch(action, data, details) { - var _this = this; +var _AltUtils = __webpack_require__(1); - this.batchingFunction(function () { - var id = Math.random().toString(18).substr(2, 16); +var utils = _interopRequireWildcard(_AltUtils); - // support straight dispatching of FSA-style actions - if (action.hasOwnProperty('type') && action.hasOwnProperty('payload')) { - var fsaDetails = { - id: action.type, - namespace: action.type, - name: action.type - }; - return _this.dispatcher.dispatch(utils.fsa(id, action.type, action.payload, fsaDetails)); - } +var _actions = __webpack_require__(13); - if (action.id && action.dispatch) { - return utils.dispatch(id, action, data, _this); - } +var _actions2 = _interopRequireDefault(_actions); - return _this.dispatcher.dispatch(utils.fsa(id, action, data, details)); - }); - } +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - return dispatch; - }(); +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - Alt.prototype.createUnsavedStore = function () { - function createUnsavedStore(StoreModel) { - var key = StoreModel.displayName || ''; - store.createStoreConfig(this.config, StoreModel); - var Store = store.transformStore(this.storeTransforms, StoreModel); +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - return fn.isFunction(Store) ? store.createStoreFromClass.apply(store, [this, Store, key].concat(args)) : store.createStoreFromObject(this, Store, key); - } +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } /* global window */ - return createUnsavedStore; - }(); - Alt.prototype.createStore = function () { - function createStore(StoreModel, iden) { - var key = iden || StoreModel.displayName || StoreModel.name || ''; - store.createStoreConfig(this.config, StoreModel); - var Store = store.transformStore(this.storeTransforms, StoreModel); +var Alt = function () { + function Alt() { + var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - /* istanbul ignore next */ - if (false) delete this.stores[key]; + _classCallCheck(this, Alt); - if (this.stores[key] || !key) { - if (this.stores[key]) { - utils.warn('A store named ' + String(key) + ' already exists, double check your store ' + 'names or pass in your own custom identifier for each store'); - } else { - utils.warn('Store name was not specified'); - } + this.config = config; + this.serialize = config.serialize || JSON.stringify; + this.deserialize = config.deserialize || JSON.parse; + this.dispatcher = config.dispatcher || new _flux.Dispatcher(); + this.batchingFunction = config.batchingFunction || function (callback) { + return callback(); + }; + this.actions = { global: {} }; + this.stores = {}; + this.storeTransforms = config.storeTransforms || []; + this.trapAsync = false; + this._actionsRegistry = {}; + this._initSnapshot = {}; + this._lastSnapshot = {}; + } - key = utils.uid(this.stores, key); - } + Alt.prototype.dispatch = function dispatch(action, data, details) { + var _this = this; - for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { - args[_key2 - 2] = arguments[_key2]; - } + this.batchingFunction(function () { + var id = Math.random().toString(18).substr(2, 16); - var storeInstance = fn.isFunction(Store) ? store.createStoreFromClass.apply(store, [this, Store, key].concat(args)) : store.createStoreFromObject(this, Store, key); + // support straight dispatching of FSA-style actions + if (action.hasOwnProperty('type') && action.hasOwnProperty('payload')) { + var fsaDetails = { + id: action.type, + namespace: action.type, + name: action.type + }; + return _this.dispatcher.dispatch(utils.fsa(id, action.type, action.payload, fsaDetails)); + } - this.stores[key] = storeInstance; - StateFunctions.saveInitialSnapshot(this, key); + if (action.id && action.dispatch) { + return utils.dispatch(id, action, data, _this); + } - return storeInstance; - } + return _this.dispatcher.dispatch(utils.fsa(id, action, data, details)); + }); + }; - return createStore; - }(); - - Alt.prototype.generateActions = function () { - function generateActions() { - var actions = { name: 'global' }; - - for (var _len3 = arguments.length, actionNames = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - actionNames[_key3] = arguments[_key3]; - } - - return this.createActions(actionNames.reduce(function (obj, action) { - obj[action] = utils.dispatchIdentity; - return obj; - }, actions)); - } - - return generateActions; - }(); - - Alt.prototype.createAction = function () { - function createAction(name, implementation, obj) { - return (0, _actions2['default'])(this, 'global', name, implementation, obj); - } + Alt.prototype.createUnsavedStore = function createUnsavedStore(StoreModel) { + var key = StoreModel.displayName || ''; + store.createStoreConfig(this.config, StoreModel); + var Store = store.transformStore(this.storeTransforms, StoreModel); - return createAction; - }(); + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } - Alt.prototype.createActions = function () { - function createActions(ActionsClass) { - var _this3 = this; + return fn.isFunction(Store) ? store.createStoreFromClass.apply(store, [this, Store, key].concat(args)) : store.createStoreFromObject(this, Store, key); + }; - var exportObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + Alt.prototype.createStore = function createStore(StoreModel, iden) { + var key = iden || StoreModel.displayName || StoreModel.name || ''; + store.createStoreConfig(this.config, StoreModel); + var Store = store.transformStore(this.storeTransforms, StoreModel); - var actions = {}; - var key = utils.uid(this._actionsRegistry, ActionsClass.displayName || ActionsClass.name || 'Unknown'); + /* istanbul ignore next */ + if (false) delete this.stores[key]; - if (fn.isFunction(ActionsClass)) { - fn.assign(actions, utils.getPrototypeChain(ActionsClass)); + if (this.stores[key] || !key) { + if (this.stores[key]) { + utils.warn('A store named ' + key + ' already exists, double check your store ' + 'names or pass in your own custom identifier for each store'); + } else { + utils.warn('Store name was not specified'); + } - var ActionsGenerator = function (_ActionsClass) { - _inherits(ActionsGenerator, _ActionsClass); + key = utils.uid(this.stores, key); + } - function ActionsGenerator() { - _classCallCheck(this, ActionsGenerator); + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } - for (var _len5 = arguments.length, args = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - args[_key5] = arguments[_key5]; - } + var storeInstance = fn.isFunction(Store) ? store.createStoreFromClass.apply(store, [this, Store, key].concat(args)) : store.createStoreFromObject(this, Store, key); - return _possibleConstructorReturn(this, _ActionsClass.call.apply(_ActionsClass, [this].concat(args))); - } + this.stores[key] = storeInstance; + StateFunctions.saveInitialSnapshot(this, key); - ActionsGenerator.prototype.generateActions = function () { - function generateActions() { - for (var _len6 = arguments.length, actionNames = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { - actionNames[_key6] = arguments[_key6]; - } + return storeInstance; + }; - actionNames.forEach(function (actionName) { - actions[actionName] = utils.dispatchIdentity; - }); - } + Alt.prototype.generateActions = function generateActions() { + var actions = { name: 'global' }; - return generateActions; - }(); - - return ActionsGenerator; - }(ActionsClass); - - for (var _len4 = arguments.length, argsForConstructor = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) { - argsForConstructor[_key4 - 2] = arguments[_key4]; - } - - fn.assign(actions, new (Function.prototype.bind.apply(ActionsGenerator, [null].concat(argsForConstructor)))()); - } else { - fn.assign(actions, ActionsClass); - } - - this.actions[key] = this.actions[key] || {}; - - fn.eachObject(function (actionName, action) { - if (!fn.isFunction(action)) { - exportObj[actionName] = action; - return; - } - - // create the action - exportObj[actionName] = (0, _actions2['default'])(_this3, key, actionName, action, exportObj); - - // generate a constant - var constant = utils.formatAsConstant(actionName); - exportObj[constant] = exportObj[actionName].id; - }, [actions]); - - return exportObj; - } - - return createActions; - }(); - - Alt.prototype.takeSnapshot = function () { - function takeSnapshot() { - for (var _len7 = arguments.length, storeNames = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { - storeNames[_key7] = arguments[_key7]; - } - - var state = StateFunctions.snapshot(this, storeNames); - fn.assign(this._lastSnapshot, state); - return this.serialize(state); - } - - return takeSnapshot; - }(); - - Alt.prototype.rollback = function () { - function rollback() { - StateFunctions.setAppState(this, this.serialize(this._lastSnapshot), function (storeInst) { - storeInst.lifecycle('rollback'); - storeInst.emitChange(); - }); - } - - return rollback; - }(); - - Alt.prototype.recycle = function () { - function recycle() { - for (var _len8 = arguments.length, storeNames = Array(_len8), _key8 = 0; _key8 < _len8; _key8++) { - storeNames[_key8] = arguments[_key8]; - } - - var initialSnapshot = storeNames.length ? StateFunctions.filterSnapshots(this, this._initSnapshot, storeNames) : this._initSnapshot; - - StateFunctions.setAppState(this, this.serialize(initialSnapshot), function (storeInst) { - storeInst.lifecycle('init'); - storeInst.emitChange(); - }); - } - - return recycle; - }(); - - Alt.prototype.flush = function () { - function flush() { - var state = this.serialize(StateFunctions.snapshot(this)); - this.recycle(); - return state; - } - - return flush; - }(); - - Alt.prototype.bootstrap = function () { - function bootstrap(data) { - StateFunctions.setAppState(this, data, function (storeInst, state) { - storeInst.lifecycle('bootstrap', state); - storeInst.emitChange(); - }); - } - - return bootstrap; - }(); - - Alt.prototype.prepare = function () { - function prepare(storeInst, payload) { - var data = {}; - if (!storeInst.displayName) { - throw new ReferenceError('Store provided does not have a name'); - } - data[storeInst.displayName] = payload; - return this.serialize(data); - } - - return prepare; - }(); - - // Instance type methods for injecting alt into your application as context - - Alt.prototype.addActions = function () { - function addActions(name, ActionsClass) { - for (var _len9 = arguments.length, args = Array(_len9 > 2 ? _len9 - 2 : 0), _key9 = 2; _key9 < _len9; _key9++) { - args[_key9 - 2] = arguments[_key9]; - } - - this.actions[name] = Array.isArray(ActionsClass) ? this.generateActions.apply(this, ActionsClass) : this.createActions.apply(this, [ActionsClass].concat(args)); - } - - return addActions; - }(); - - Alt.prototype.addStore = function () { - function addStore(name, StoreModel) { - for (var _len10 = arguments.length, args = Array(_len10 > 2 ? _len10 - 2 : 0), _key10 = 2; _key10 < _len10; _key10++) { - args[_key10 - 2] = arguments[_key10]; - } - - this.createStore.apply(this, [StoreModel, name].concat(args)); - } - - return addStore; - }(); - - Alt.prototype.getActions = function () { - function getActions(name) { - return this.actions[name]; - } - - return getActions; - }(); - - Alt.prototype.getStore = function () { - function getStore(name) { - return this.stores[name]; - } - - return getStore; - }(); - - Alt.debug = function () { - function debug(name, alt, win) { - var key = 'alt.js.org'; - var context = win; - if (!context && typeof window !== 'undefined') { - context = window; - } - if (typeof context !== 'undefined') { - context[key] = context[key] || []; - context[key].push({ name: name, alt: alt }); - } - return alt; - } - - return debug; - }(); - - return Alt; - }(); - - exports['default'] = Alt; - module.exports = exports['default']; + for (var _len3 = arguments.length, actionNames = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + actionNames[_key3] = arguments[_key3]; + } + + return this.createActions(actionNames.reduce(function (obj, action) { + obj[action] = utils.dispatchIdentity; //eslint-disable-line + return obj; + }, actions)); + }; + + Alt.prototype.createAction = function createAction(name, implementation, obj) { + return (0, _actions2.default)(this, 'global', name, implementation, obj); + }; + + Alt.prototype.createActions = function createActions(ActionsClass) { + var //eslint-disable-line + _this3 = this; + + var exportObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var actions = {}; + var key = utils.uid(this._actionsRegistry, ActionsClass.displayName || ActionsClass.name || 'Unknown'); + + if (fn.isFunction(ActionsClass)) { + fn.assign(actions, utils.getPrototypeChain(ActionsClass)); + + var ActionsGenerator = function (_ActionsClass) { + _inherits(ActionsGenerator, _ActionsClass); + + function ActionsGenerator() { + _classCallCheck(this, ActionsGenerator); + + return _possibleConstructorReturn(this, _ActionsClass.apply(this, arguments)); + } + + ActionsGenerator.prototype.generateActions = function generateActions() { + for (var _len5 = arguments.length, actionNames = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + actionNames[_key5] = arguments[_key5]; + } + + //eslint-disable-line + actionNames.forEach(function (actionName) { + actions[actionName] = utils.dispatchIdentity; + }); + }; + + return ActionsGenerator; + }(ActionsClass); + + for (var _len4 = arguments.length, argsForConstructor = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) { + argsForConstructor[_key4 - 2] = arguments[_key4]; + } + + fn.assign(actions, new (Function.prototype.bind.apply(ActionsGenerator, [null].concat(argsForConstructor)))()); + } else { + fn.assign(actions, ActionsClass); + } + + this.actions[key] = this.actions[key] || {}; + + fn.eachObject(function (actionName, action) { + if (!fn.isFunction(action)) { + exportObj[actionName] = action; //eslint-disable-line + return; + } + + // create the action + exportObj[actionName] = (0, _actions2.default)(_this3, key, actionName, action, exportObj); + + // generate a constant + var constant = utils.formatAsConstant(actionName); + exportObj[constant] = exportObj[actionName].id; //eslint-disable-line + }, [actions]); + + return exportObj; + }; + + Alt.prototype.takeSnapshot = function takeSnapshot() { + for (var _len6 = arguments.length, storeNames = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { + storeNames[_key6] = arguments[_key6]; + } + + var state = StateFunctions.snapshot(this, storeNames); + fn.assign(this._lastSnapshot, state); + return this.serialize(state); + }; + + Alt.prototype.rollback = function rollback() { + StateFunctions.setAppState(this, this.serialize(this._lastSnapshot), function (storeInst) { + storeInst.lifecycle('rollback'); + storeInst.emitChange(); + }); + }; + + Alt.prototype.recycle = function recycle() { + for (var _len7 = arguments.length, storeNames = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { + storeNames[_key7] = arguments[_key7]; + } + + var initialSnapshot = storeNames.length ? StateFunctions.filterSnapshots(this, this._initSnapshot, storeNames) : this._initSnapshot; + + StateFunctions.setAppState(this, this.serialize(initialSnapshot), function (storeInst) { + storeInst.lifecycle('init'); + storeInst.emitChange(); + }); + }; + + Alt.prototype.flush = function flush() { + var state = this.serialize(StateFunctions.snapshot(this)); + this.recycle(); + return state; + }; + + Alt.prototype.bootstrap = function bootstrap(data) { + StateFunctions.setAppState(this, data, function (storeInst, state) { + storeInst.lifecycle('bootstrap', state); + storeInst.emitChange(); + }); + }; + + Alt.prototype.prepare = function prepare(storeInst, payload) { + var data = {}; + if (!storeInst.displayName) { + throw new ReferenceError('Store provided does not have a name'); + } + data[storeInst.displayName] = payload; + return this.serialize(data); + }; + + // Instance type methods for injecting alt into your application as context + + Alt.prototype.addActions = function addActions(name, ActionsClass) { + for (var _len8 = arguments.length, args = Array(_len8 > 2 ? _len8 - 2 : 0), _key8 = 2; _key8 < _len8; _key8++) { + args[_key8 - 2] = arguments[_key8]; + } + + this.actions[name] = Array.isArray(ActionsClass) ? this.generateActions.apply(this, ActionsClass) //eslint-disable-line + : this.createActions.apply(this, [ActionsClass].concat(args)); + }; + + Alt.prototype.addStore = function addStore(name, StoreModel) { + for (var _len9 = arguments.length, args = Array(_len9 > 2 ? _len9 - 2 : 0), _key9 = 2; _key9 < _len9; _key9++) { + args[_key9 - 2] = arguments[_key9]; + } + + this.createStore.apply(this, [StoreModel, name].concat(args)); + }; + + Alt.prototype.getActions = function getActions(name) { + return this.actions[name]; + }; + + Alt.prototype.getStore = function getStore(name) { + return this.stores[name]; + }; + + Alt.debug = function debug(name, alt, win) { + var key = 'alt.js.org'; + var context = win; + if (!context && typeof window !== 'undefined') { + context = window; + } + if (typeof context !== 'undefined') { + context[key] = context[key] || []; + context[key].push({ name: name, alt: alt }); + } + return alt; + }; + + return Alt; +}(); + +exports.default = Alt; +module.exports = exports['default']; /***/ }), -/* 2 */ +/* 6 */ /***/ (function(module, exports, __webpack_require__) { - /** - * Copyright (c) 2014-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - */ +/** + * Copyright (c) 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ - module.exports.Dispatcher = __webpack_require__(3); +module.exports.Dispatcher = __webpack_require__(7); /***/ }), -/* 3 */ +/* 7 */ /***/ (function(module, exports, __webpack_require__) { - /* WEBPACK VAR INJECTION */(function(process) {/** - * Copyright (c) 2014-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule Dispatcher - * - * @preventMunge - */ - - 'use strict'; - - exports.__esModule = true; - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } - - var invariant = __webpack_require__(5); - - var _prefix = 'ID_'; - - /** - * Dispatcher is used to broadcast payloads to registered callbacks. This is - * different from generic pub-sub systems in two ways: - * - * 1) Callbacks are not subscribed to particular events. Every payload is - * dispatched to every registered callback. - * 2) Callbacks can be deferred in whole or part until other callbacks have - * been executed. - * - * For example, consider this hypothetical flight destination form, which - * selects a default city when a country is selected: - * - * var flightDispatcher = new Dispatcher(); - * - * // Keeps track of which country is selected - * var CountryStore = {country: null}; - * - * // Keeps track of which city is selected - * var CityStore = {city: null}; - * - * // Keeps track of the base flight price of the selected city - * var FlightPriceStore = {price: null} - * - * When a user changes the selected city, we dispatch the payload: - * - * flightDispatcher.dispatch({ - * actionType: 'city-update', - * selectedCity: 'paris' - * }); - * - * This payload is digested by `CityStore`: - * - * flightDispatcher.register(function(payload) { - * if (payload.actionType === 'city-update') { - * CityStore.city = payload.selectedCity; - * } - * }); - * - * When the user selects a country, we dispatch the payload: - * - * flightDispatcher.dispatch({ - * actionType: 'country-update', - * selectedCountry: 'australia' - * }); - * - * This payload is digested by both stores: - * - * CountryStore.dispatchToken = flightDispatcher.register(function(payload) { - * if (payload.actionType === 'country-update') { - * CountryStore.country = payload.selectedCountry; - * } - * }); - * - * When the callback to update `CountryStore` is registered, we save a reference - * to the returned token. Using this token with `waitFor()`, we can guarantee - * that `CountryStore` is updated before the callback that updates `CityStore` - * needs to query its data. - * - * CityStore.dispatchToken = flightDispatcher.register(function(payload) { - * if (payload.actionType === 'country-update') { - * // `CountryStore.country` may not be updated. - * flightDispatcher.waitFor([CountryStore.dispatchToken]); - * // `CountryStore.country` is now guaranteed to be updated. - * - * // Select the default city for the new country - * CityStore.city = getDefaultCityForCountry(CountryStore.country); - * } - * }); - * - * The usage of `waitFor()` can be chained, for example: - * - * FlightPriceStore.dispatchToken = - * flightDispatcher.register(function(payload) { - * switch (payload.actionType) { - * case 'country-update': - * case 'city-update': - * flightDispatcher.waitFor([CityStore.dispatchToken]); - * FlightPriceStore.price = - * getFlightPriceStore(CountryStore.country, CityStore.city); - * break; - * } - * }); - * - * The `country-update` payload will be guaranteed to invoke the stores' - * registered callbacks in order: `CountryStore`, `CityStore`, then - * `FlightPriceStore`. - */ - - var Dispatcher = (function () { - function Dispatcher() { - _classCallCheck(this, Dispatcher); - - this._callbacks = {}; - this._isDispatching = false; - this._isHandled = {}; - this._isPending = {}; - this._lastID = 1; - } - - /** - * Registers a callback to be invoked with every dispatched payload. Returns - * a token that can be used with `waitFor()`. - */ - - Dispatcher.prototype.register = function register(callback) { - var id = _prefix + this._lastID++; - this._callbacks[id] = callback; - return id; - }; - - /** - * Removes a callback based on its token. - */ - - Dispatcher.prototype.unregister = function unregister(id) { - !this._callbacks[id] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Dispatcher.unregister(...): `%s` does not map to a registered callback.', id) : invariant(false) : undefined; - delete this._callbacks[id]; - }; - - /** - * Waits for the callbacks specified to be invoked before continuing execution - * of the current callback. This method should only be used by a callback in - * response to a dispatched payload. - */ - - Dispatcher.prototype.waitFor = function waitFor(ids) { - !this._isDispatching ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Dispatcher.waitFor(...): Must be invoked while dispatching.') : invariant(false) : undefined; - for (var ii = 0; ii < ids.length; ii++) { - var id = ids[ii]; - if (this._isPending[id]) { - !this._isHandled[id] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Dispatcher.waitFor(...): Circular dependency detected while ' + 'waiting for `%s`.', id) : invariant(false) : undefined; - continue; - } - !this._callbacks[id] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Dispatcher.waitFor(...): `%s` does not map to a registered callback.', id) : invariant(false) : undefined; - this._invokeCallback(id); - } - }; - - /** - * Dispatches a payload to all registered callbacks. - */ - - Dispatcher.prototype.dispatch = function dispatch(payload) { - !!this._isDispatching ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.') : invariant(false) : undefined; - this._startDispatching(payload); - try { - for (var id in this._callbacks) { - if (this._isPending[id]) { - continue; - } - this._invokeCallback(id); - } - } finally { - this._stopDispatching(); - } - }; - - /** - * Is this Dispatcher currently dispatching. - */ - - Dispatcher.prototype.isDispatching = function isDispatching() { - return this._isDispatching; - }; - - /** - * Call the callback stored with the given id. Also do some internal - * bookkeeping. - * - * @internal - */ - - Dispatcher.prototype._invokeCallback = function _invokeCallback(id) { - this._isPending[id] = true; - this._callbacks[id](this._pendingPayload); - this._isHandled[id] = true; - }; - - /** - * Set up bookkeeping needed when dispatching. - * - * @internal - */ - - Dispatcher.prototype._startDispatching = function _startDispatching(payload) { - for (var id in this._callbacks) { - this._isPending[id] = false; - this._isHandled[id] = false; - } - this._pendingPayload = payload; - this._isDispatching = true; - }; - - /** - * Clear bookkeeping used for dispatching. - * - * @internal - */ - - Dispatcher.prototype._stopDispatching = function _stopDispatching() { - delete this._pendingPayload; - this._isDispatching = false; - }; - - return Dispatcher; - })(); - - module.exports = Dispatcher; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4))) +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright (c) 2014-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule Dispatcher + * + * @preventMunge + */ + + + +exports.__esModule = true; + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } } + +var invariant = __webpack_require__(8); + +var _prefix = 'ID_'; + +/** + * Dispatcher is used to broadcast payloads to registered callbacks. This is + * different from generic pub-sub systems in two ways: + * + * 1) Callbacks are not subscribed to particular events. Every payload is + * dispatched to every registered callback. + * 2) Callbacks can be deferred in whole or part until other callbacks have + * been executed. + * + * For example, consider this hypothetical flight destination form, which + * selects a default city when a country is selected: + * + * var flightDispatcher = new Dispatcher(); + * + * // Keeps track of which country is selected + * var CountryStore = {country: null}; + * + * // Keeps track of which city is selected + * var CityStore = {city: null}; + * + * // Keeps track of the base flight price of the selected city + * var FlightPriceStore = {price: null} + * + * When a user changes the selected city, we dispatch the payload: + * + * flightDispatcher.dispatch({ + * actionType: 'city-update', + * selectedCity: 'paris' + * }); + * + * This payload is digested by `CityStore`: + * + * flightDispatcher.register(function(payload) { + * if (payload.actionType === 'city-update') { + * CityStore.city = payload.selectedCity; + * } + * }); + * + * When the user selects a country, we dispatch the payload: + * + * flightDispatcher.dispatch({ + * actionType: 'country-update', + * selectedCountry: 'australia' + * }); + * + * This payload is digested by both stores: + * + * CountryStore.dispatchToken = flightDispatcher.register(function(payload) { + * if (payload.actionType === 'country-update') { + * CountryStore.country = payload.selectedCountry; + * } + * }); + * + * When the callback to update `CountryStore` is registered, we save a reference + * to the returned token. Using this token with `waitFor()`, we can guarantee + * that `CountryStore` is updated before the callback that updates `CityStore` + * needs to query its data. + * + * CityStore.dispatchToken = flightDispatcher.register(function(payload) { + * if (payload.actionType === 'country-update') { + * // `CountryStore.country` may not be updated. + * flightDispatcher.waitFor([CountryStore.dispatchToken]); + * // `CountryStore.country` is now guaranteed to be updated. + * + * // Select the default city for the new country + * CityStore.city = getDefaultCityForCountry(CountryStore.country); + * } + * }); + * + * The usage of `waitFor()` can be chained, for example: + * + * FlightPriceStore.dispatchToken = + * flightDispatcher.register(function(payload) { + * switch (payload.actionType) { + * case 'country-update': + * case 'city-update': + * flightDispatcher.waitFor([CityStore.dispatchToken]); + * FlightPriceStore.price = + * getFlightPriceStore(CountryStore.country, CityStore.city); + * break; + * } + * }); + * + * The `country-update` payload will be guaranteed to invoke the stores' + * registered callbacks in order: `CountryStore`, `CityStore`, then + * `FlightPriceStore`. + */ + +var Dispatcher = (function () { + function Dispatcher() { + _classCallCheck(this, Dispatcher); + + this._callbacks = {}; + this._isDispatching = false; + this._isHandled = {}; + this._isPending = {}; + this._lastID = 1; + } + + /** + * Registers a callback to be invoked with every dispatched payload. Returns + * a token that can be used with `waitFor()`. + */ + + Dispatcher.prototype.register = function register(callback) { + var id = _prefix + this._lastID++; + this._callbacks[id] = callback; + return id; + }; + + /** + * Removes a callback based on its token. + */ + + Dispatcher.prototype.unregister = function unregister(id) { + !this._callbacks[id] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Dispatcher.unregister(...): `%s` does not map to a registered callback.', id) : invariant(false) : undefined; + delete this._callbacks[id]; + }; + + /** + * Waits for the callbacks specified to be invoked before continuing execution + * of the current callback. This method should only be used by a callback in + * response to a dispatched payload. + */ + + Dispatcher.prototype.waitFor = function waitFor(ids) { + !this._isDispatching ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Dispatcher.waitFor(...): Must be invoked while dispatching.') : invariant(false) : undefined; + for (var ii = 0; ii < ids.length; ii++) { + var id = ids[ii]; + if (this._isPending[id]) { + !this._isHandled[id] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Dispatcher.waitFor(...): Circular dependency detected while ' + 'waiting for `%s`.', id) : invariant(false) : undefined; + continue; + } + !this._callbacks[id] ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Dispatcher.waitFor(...): `%s` does not map to a registered callback.', id) : invariant(false) : undefined; + this._invokeCallback(id); + } + }; + + /** + * Dispatches a payload to all registered callbacks. + */ + + Dispatcher.prototype.dispatch = function dispatch(payload) { + !!this._isDispatching ? process.env.NODE_ENV !== 'production' ? invariant(false, 'Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.') : invariant(false) : undefined; + this._startDispatching(payload); + try { + for (var id in this._callbacks) { + if (this._isPending[id]) { + continue; + } + this._invokeCallback(id); + } + } finally { + this._stopDispatching(); + } + }; + + /** + * Is this Dispatcher currently dispatching. + */ + + Dispatcher.prototype.isDispatching = function isDispatching() { + return this._isDispatching; + }; + + /** + * Call the callback stored with the given id. Also do some internal + * bookkeeping. + * + * @internal + */ + + Dispatcher.prototype._invokeCallback = function _invokeCallback(id) { + this._isPending[id] = true; + this._callbacks[id](this._pendingPayload); + this._isHandled[id] = true; + }; + + /** + * Set up bookkeeping needed when dispatching. + * + * @internal + */ + + Dispatcher.prototype._startDispatching = function _startDispatching(payload) { + for (var id in this._callbacks) { + this._isPending[id] = false; + this._isHandled[id] = false; + } + this._pendingPayload = payload; + this._isDispatching = true; + }; + + /** + * Clear bookkeeping used for dispatching. + * + * @internal + */ + + Dispatcher.prototype._stopDispatching = function _stopDispatching() { + delete this._pendingPayload; + this._isDispatching = false; + }; + + return Dispatcher; +})(); + +module.exports = Dispatcher; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }), -/* 4 */ -/***/ (function(module, exports) { - - // shim for using process in browser - var process = module.exports = {}; - - // cached from whatever global is present so that test runners that stub it - // don't break things. But we need to wrap it in a try catch in case it is - // wrapped in strict mode code which doesn't define any globals. It's inside a - // function because try/catches deoptimize in certain engines. - - var cachedSetTimeout; - var cachedClearTimeout; - - function defaultSetTimout() { - throw new Error('setTimeout has not been defined'); - } - function defaultClearTimeout () { - throw new Error('clearTimeout has not been defined'); - } - (function () { - try { - if (typeof setTimeout === 'function') { - cachedSetTimeout = setTimeout; - } else { - cachedSetTimeout = defaultSetTimout; - } - } catch (e) { - cachedSetTimeout = defaultSetTimout; - } - try { - if (typeof clearTimeout === 'function') { - cachedClearTimeout = clearTimeout; - } else { - cachedClearTimeout = defaultClearTimeout; - } - } catch (e) { - cachedClearTimeout = defaultClearTimeout; - } - } ()) - function runTimeout(fun) { - if (cachedSetTimeout === setTimeout) { - //normal enviroments in sane situations - return setTimeout(fun, 0); - } - // if setTimeout wasn't available but was latter defined - if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { - cachedSetTimeout = setTimeout; - return setTimeout(fun, 0); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedSetTimeout(fun, 0); - } catch(e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedSetTimeout.call(null, fun, 0); - } catch(e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error - return cachedSetTimeout.call(this, fun, 0); - } - } - - - } - function runClearTimeout(marker) { - if (cachedClearTimeout === clearTimeout) { - //normal enviroments in sane situations - return clearTimeout(marker); - } - // if clearTimeout wasn't available but was latter defined - if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { - cachedClearTimeout = clearTimeout; - return clearTimeout(marker); - } - try { - // when when somebody has screwed with setTimeout but no I.E. maddness - return cachedClearTimeout(marker); - } catch (e){ - try { - // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally - return cachedClearTimeout.call(null, marker); - } catch (e){ - // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. - // Some versions of I.E. have different rules for clearTimeout vs setTimeout - return cachedClearTimeout.call(this, marker); - } - } - - - - } - var queue = []; - var draining = false; - var currentQueue; - var queueIndex = -1; - - function cleanUpNextTick() { - if (!draining || !currentQueue) { - return; - } - draining = false; - if (currentQueue.length) { - queue = currentQueue.concat(queue); - } else { - queueIndex = -1; - } - if (queue.length) { - drainQueue(); - } - } - - function drainQueue() { - if (draining) { - return; - } - var timeout = runTimeout(cleanUpNextTick); - draining = true; - - var len = queue.length; - while(len) { - currentQueue = queue; - queue = []; - while (++queueIndex < len) { - if (currentQueue) { - currentQueue[queueIndex].run(); - } - } - queueIndex = -1; - len = queue.length; - } - currentQueue = null; - draining = false; - runClearTimeout(timeout); - } - - process.nextTick = function (fun) { - var args = new Array(arguments.length - 1); - if (arguments.length > 1) { - for (var i = 1; i < arguments.length; i++) { - args[i - 1] = arguments[i]; - } - } - queue.push(new Item(fun, args)); - if (queue.length === 1 && !draining) { - runTimeout(drainQueue); - } - }; - - // v8 likes predictible objects - function Item(fun, array) { - this.fun = fun; - this.array = array; - } - Item.prototype.run = function () { - this.fun.apply(null, this.array); - }; - process.title = 'browser'; - process.browser = true; - process.env = {}; - process.argv = []; - process.version = ''; // empty string to avoid regexp issues - process.versions = {}; - - function noop() {} - - process.on = noop; - process.addListener = noop; - process.once = noop; - process.off = noop; - process.removeListener = noop; - process.removeAllListeners = noop; - process.emit = noop; - process.prependListener = noop; - process.prependOnceListener = noop; - - process.listeners = function (name) { return [] } - - process.binding = function (name) { - throw new Error('process.binding is not supported'); - }; - - process.cwd = function () { return '/' }; - process.chdir = function (dir) { - throw new Error('process.chdir is not supported'); - }; - process.umask = function() { return 0; }; - - -/***/ }), -/* 5 */ +/* 8 */ /***/ (function(module, exports, __webpack_require__) { - /* WEBPACK VAR INJECTION */(function(process) {/** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. - * - * @providesModule invariant - */ - - "use strict"; - - /** - * Use invariant() to assert state which your program assumes to be true. - * - * Provide sprintf-style format (only %s is supported) and arguments - * to provide information about what broke and what you were - * expecting. - * - * The invariant message will be stripped in production, but the invariant - * will remain to ensure logic does not differ in production. - */ - - var invariant = function (condition, format, a, b, c, d, e, f) { - if (process.env.NODE_ENV !== 'production') { - if (format === undefined) { - throw new Error('invariant requires an error message argument'); - } - } - - if (!condition) { - var error; - if (format === undefined) { - error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); - } else { - var args = [a, b, c, d, e, f]; - var argIndex = 0; - error = new Error('Invariant Violation: ' + format.replace(/%s/g, function () { - return args[argIndex++]; - })); - } - - error.framesToPop = 1; // we don't care about invariant's own frame - throw error; - } - }; - - module.exports = invariant; - /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(4))) +"use strict"; +/* WEBPACK VAR INJECTION */(function(process) {/** + * Copyright 2013-2015, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule invariant + */ + + + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + +var invariant = function (condition, format, a, b, c, d, e, f) { + if (process.env.NODE_ENV !== 'production') { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + } + + if (!condition) { + var error; + if (format === undefined) { + error = new Error('Minified exception occurred; use the non-minified dev environment ' + 'for the full error message and additional helpful warnings.'); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error('Invariant Violation: ' + format.replace(/%s/g, function () { + return args[argIndex++]; + })); + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +}; + +module.exports = invariant; +/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) /***/ }), -/* 6 */ +/* 9 */ /***/ (function(module, exports, __webpack_require__) { - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.setAppState = setAppState; - exports.snapshot = snapshot; - exports.saveInitialSnapshot = saveInitialSnapshot; - exports.filterSnapshots = filterSnapshots; - - var _functions = __webpack_require__(7); - - var fn = _interopRequireWildcard(_functions); - - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } - - function setAppState(instance, data, onStore) { - var obj = instance.deserialize(data); - fn.eachObject(function (key, value) { - var store = instance.stores[key]; - if (store) { - var config = store.StoreModel.config; - - var state = store.state; - if (config.onDeserialize) obj[key] = config.onDeserialize(value) || value; - if (fn.isMutableObject(state)) { - fn.eachObject(function (k) { - return delete state[k]; - }, [state]); - fn.assign(state, obj[key]); - } else { - store.state = obj[key]; - } - onStore(store, store.state); - } - }, [obj]); - } - - function snapshot(instance) { - var storeNames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - - var stores = storeNames.length ? storeNames : Object.keys(instance.stores); - return stores.reduce(function (obj, storeHandle) { - var storeName = storeHandle.displayName || storeHandle; - var store = instance.stores[storeName]; - var config = store.StoreModel.config; - - store.lifecycle('snapshot'); - var customSnapshot = config.onSerialize && config.onSerialize(store.state); - obj[storeName] = customSnapshot ? customSnapshot : store.getState(); - return obj; - }, {}); - } - - function saveInitialSnapshot(instance, key) { - var state = instance.deserialize(instance.serialize(instance.stores[key].state)); - instance._initSnapshot[key] = state; - instance._lastSnapshot[key] = state; - } - - function filterSnapshots(instance, state, stores) { - return stores.reduce(function (obj, store) { - var storeName = store.displayName || store; - if (!state[storeName]) { - throw new ReferenceError(String(storeName) + ' is not a valid store'); - } - obj[storeName] = state[storeName]; - return obj; - }, {}); - } +"use strict"; -/***/ }), -/* 7 */ -/***/ (function(module, exports) { - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.isMutableObject = isMutableObject; - exports.eachObject = eachObject; - exports.assign = assign; - var isFunction = exports.isFunction = function isFunction(x) { - return typeof x === 'function'; - }; - - function isMutableObject(target) { - var Ctor = target.constructor; - - return !!target && Object.prototype.toString.call(target) === '[object Object]' && isFunction(Ctor) && !Object.isFrozen(target) && (Ctor instanceof Ctor || target.type === 'AltStore'); - } - - function eachObject(f, o) { - o.forEach(function (from) { - Object.keys(Object(from)).forEach(function (key) { - f(key, from[key]); - }); - }); - } - - function assign(target) { - for (var _len = arguments.length, source = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - source[_key - 1] = arguments[_key]; - } - - eachObject(function (key, value) { - return target[key] = value; - }, source); - return target; - } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.setAppState = setAppState; +exports.snapshot = snapshot; +exports.saveInitialSnapshot = saveInitialSnapshot; +exports.filterSnapshots = filterSnapshots; + +var _functions = __webpack_require__(0); + +var fn = _interopRequireWildcard(_functions); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function setAppState(instance, data, onStore) { + var obj = instance.deserialize(data); + fn.eachObject(function (key, value) { + var store = instance.stores[key]; + if (store) { + var config = store.StoreModel.config; + + var state = store.state; + if (config.onDeserialize) obj[key] = config.onDeserialize(value) || value; + if (fn.isMutableObject(state)) { + fn.eachObject(function (k) { + return delete state[k]; + }, [state]); + fn.assign(state, obj[key]); + } else { + store.state = obj[key]; + } + onStore(store, store.state); + } + }, [obj]); +} + +function snapshot(instance) { + var storeNames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + var stores = storeNames.length ? storeNames : Object.keys(instance.stores); + return stores.reduce(function (obj, storeHandle) { + var storeName = storeHandle.displayName || storeHandle; + var store = instance.stores[storeName]; + var config = store.StoreModel.config; + + store.lifecycle('snapshot'); + var customSnapshot = config.onSerialize && config.onSerialize(store.state); + obj[storeName] = customSnapshot || store.getState(); //eslint-disable-line + return obj; + }, {}); +} + +function saveInitialSnapshot(instance, key) { + var state = instance.deserialize(instance.serialize(instance.stores[key].state)); + instance._initSnapshot[key] = state; //eslint-disable-line + instance._lastSnapshot[key] = state; //eslint-disable-line +} + +function filterSnapshots(instance, state, stores) { + return stores.reduce(function (obj, store) { + var storeName = store.displayName || store; + if (!state[storeName]) { + throw new ReferenceError(storeName + ' is not a valid store'); + } + obj[storeName] = state[storeName]; //eslint-disable-line + return obj; + }, {}); +} /***/ }), -/* 8 */ +/* 10 */ /***/ (function(module, exports, __webpack_require__) { - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports.createStoreConfig = createStoreConfig; - exports.transformStore = transformStore; - exports.createStoreFromObject = createStoreFromObject; - exports.createStoreFromClass = createStoreFromClass; - - var _AltUtils = __webpack_require__(9); - - var utils = _interopRequireWildcard(_AltUtils); - - var _functions = __webpack_require__(7); - - var fn = _interopRequireWildcard(_functions); - - var _AltStore = __webpack_require__(10); - - var _AltStore2 = _interopRequireDefault(_AltStore); - - var _StoreMixin = __webpack_require__(12); - - var _StoreMixin2 = _interopRequireDefault(_StoreMixin); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - - function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - - function doSetState(store, storeInstance, state) { - if (!state) { - return; - } +"use strict"; - var config = storeInstance.StoreModel.config; - - - var nextState = fn.isFunction(state) ? state(storeInstance.state) : state; - storeInstance.state = config.setState.call(store, storeInstance.state, nextState); - - if (!store.alt.dispatcher.isDispatching()) { - store.emitChange(); - } - } - - function createPrototype(proto, alt, key, extras) { - return fn.assign(proto, _StoreMixin2['default'], { - displayName: key, - alt: alt, - dispatcher: alt.dispatcher, - preventDefault: function () { - function preventDefault() { - this.getInstance().preventDefault = true; - } - - return preventDefault; - }(), - - boundListeners: [], - lifecycleEvents: {}, - actionListeners: {}, - publicMethods: {}, - handlesOwnErrors: false - }, extras); - } - - function createStoreConfig(globalConfig, StoreModel) { - StoreModel.config = fn.assign({ - getState: function () { - function getState(state) { - if (Array.isArray(state)) { - return state.slice(); - } else if (fn.isMutableObject(state)) { - return fn.assign({}, state); - } - - return state; - } - - return getState; - }(), - setState: function () { - function setState(currentState, nextState) { - if (fn.isMutableObject(nextState)) { - return fn.assign(currentState, nextState); - } - return nextState; - } - - return setState; - }() - }, globalConfig, StoreModel.config); - } - - function transformStore(transforms, StoreModel) { - return transforms.reduce(function (Store, transform) { - return transform(Store); - }, StoreModel); - } - - function createStoreFromObject(alt, StoreModel, key) { - var storeInstance = void 0; - - var StoreProto = createPrototype({}, alt, key, fn.assign({ - getInstance: function () { - function getInstance() { - return storeInstance; - } - - return getInstance; - }(), - setState: function () { - function setState(nextState) { - doSetState(this, storeInstance, nextState); - } - - return setState; - }() - }, StoreModel)); - - // bind the store listeners - /* istanbul ignore else */ - if (StoreProto.bindListeners) { - _StoreMixin2['default'].bindListeners.call(StoreProto, StoreProto.bindListeners); - } - /* istanbul ignore else */ - if (StoreProto.observe) { - _StoreMixin2['default'].bindListeners.call(StoreProto, StoreProto.observe(alt)); - } - - // bind the lifecycle events - /* istanbul ignore else */ - if (StoreProto.lifecycle) { - fn.eachObject(function (eventName, event) { - _StoreMixin2['default'].on.call(StoreProto, eventName, event); - }, [StoreProto.lifecycle]); - } - - // create the instance and fn.assign the public methods to the instance - storeInstance = fn.assign(new _AltStore2['default'](alt, StoreProto, StoreProto.state !== undefined ? StoreProto.state : {}, StoreModel), StoreProto.publicMethods, { - displayName: key, - config: StoreModel.config - }); - - return storeInstance; - } - - function createStoreFromClass(alt, StoreModel, key) { - var storeInstance = void 0; - var config = StoreModel.config; - - // Creating a class here so we don't overload the provided store's - // prototype with the mixin behaviour and I'm extending from StoreModel - // so we can inherit any extensions from the provided store. - - var Store = function (_StoreModel) { - _inherits(Store, _StoreModel); - - function Store() { - _classCallCheck(this, Store); - - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - return _possibleConstructorReturn(this, _StoreModel.call.apply(_StoreModel, [this].concat(args))); - } - - return Store; - }(StoreModel); - - createPrototype(Store.prototype, alt, key, { - type: 'AltStore', - getInstance: function () { - function getInstance() { - return storeInstance; - } - - return getInstance; - }(), - setState: function () { - function setState(nextState) { - doSetState(this, storeInstance, nextState); - } - - return setState; - }() - }); - - for (var _len = arguments.length, argsForClass = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { - argsForClass[_key - 3] = arguments[_key]; - } - - var store = new (Function.prototype.bind.apply(Store, [null].concat(argsForClass)))(); - - /* istanbul ignore next */ - if (config.bindListeners) store.bindListeners(config.bindListeners); - /* istanbul ignore next */ - if (config.datasource) store.registerAsync(config.datasource); - - storeInstance = fn.assign(new _AltStore2['default'](alt, store, store.state !== undefined ? store.state : store, StoreModel), utils.getInternalMethods(StoreModel), config.publicMethods, { displayName: key }); - - return storeInstance; - } +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.createStoreConfig = createStoreConfig; +exports.transformStore = transformStore; +exports.createStoreFromObject = createStoreFromObject; +exports.createStoreFromClass = createStoreFromClass; -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { +var _AltUtils = __webpack_require__(1); - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; - - exports.getInternalMethods = getInternalMethods; - exports.getPrototypeChain = getPrototypeChain; - exports.warn = warn; - exports.uid = uid; - exports.formatAsConstant = formatAsConstant; - exports.dispatchIdentity = dispatchIdentity; - exports.fsa = fsa; - exports.dispatch = dispatch; - - var _functions = __webpack_require__(7); - - var fn = _interopRequireWildcard(_functions); - - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } - - /*eslint-disable*/ - var builtIns = Object.getOwnPropertyNames(NoopClass); - var builtInProto = Object.getOwnPropertyNames(NoopClass.prototype); - /*eslint-enable*/ - - function getInternalMethods(Obj, isProto) { - var excluded = isProto ? builtInProto : builtIns; - var obj = isProto ? Obj.prototype : Obj; - return Object.getOwnPropertyNames(obj).reduce(function (value, m) { - if (excluded.indexOf(m) !== -1) { - return value; - } - - value[m] = obj[m]; - return value; - }, {}); - } - - function getPrototypeChain(Obj) { - var methods = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - - return Obj === Function.prototype ? methods : getPrototypeChain(Object.getPrototypeOf(Obj), fn.assign(getInternalMethods(Obj, true), methods)); - } - - function warn(msg) { - /* istanbul ignore else */ - /*eslint-disable*/ - if (typeof console !== 'undefined') { - console.warn(new ReferenceError(msg)); - } - /*eslint-enable*/ - } - - function uid(container, name) { - var count = 0; - var key = name; - while (Object.hasOwnProperty.call(container, key)) { - key = name + String(++count); - } - return key; - } - - function formatAsConstant(name) { - return name.replace(/[a-z]([A-Z])/g, function (i) { - return String(i[0]) + '_' + String(i[1].toLowerCase()); - }).toUpperCase(); - } - - function dispatchIdentity(x) { - if (x === undefined) return null; - - for (var _len = arguments.length, a = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - a[_key - 1] = arguments[_key]; - } - - return a.length ? [x].concat(a) : x; - } - - function fsa(id, type, payload, details) { - return { - type: type, - payload: payload, - meta: _extends({ - dispatchId: id - }, details), - - id: id, - action: type, - data: payload, - details: details - }; - } - - function dispatch(id, actionObj, payload, alt) { - var data = actionObj.dispatch(payload); - if (data === undefined) return null; - - var type = actionObj.id; - var namespace = type; - var name = type; - var details = { id: type, namespace: namespace, name: name }; - - var dispatchLater = function dispatchLater(x) { - return alt.dispatch(type, x, details); - }; - - if (fn.isFunction(data)) return data(dispatchLater, alt); - - // XXX standardize this - return alt.dispatcher.dispatch(fsa(id, type, data, details)); - } - - /* istanbul ignore next */ - function NoopClass() {} +var utils = _interopRequireWildcard(_AltUtils); + +var _functions = __webpack_require__(0); + +var fn = _interopRequireWildcard(_functions); + +var _AltStore = __webpack_require__(11); + +var _AltStore2 = _interopRequireDefault(_AltStore); + +var _StoreMixin = __webpack_require__(12); + +var _StoreMixin2 = _interopRequireDefault(_StoreMixin); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } + +function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } + +function doSetState(store, storeInstance, state) { + if (!state) { + return; + } + + var config = storeInstance.StoreModel.config; + + + var nextState = fn.isFunction(state) ? state(storeInstance.state) : state; + + storeInstance.state = config.setState.call( //eslint-disable-line + store, storeInstance.state, nextState); + + if (!store.alt.dispatcher.isDispatching()) { + store.emitChange(); + } +} + +function createPrototype(proto, alt, key, extras) { + return fn.assign(proto, _StoreMixin2.default, { + displayName: key, + alt: alt, + dispatcher: alt.dispatcher, + preventDefault: function preventDefault() { + this.getInstance().preventDefault = true; + }, + + boundListeners: [], + lifecycleEvents: {}, + actionListeners: {}, + publicMethods: {}, + handlesOwnErrors: false + }, extras); +} + +function createStoreConfig(globalConfig, StoreModel) { + StoreModel.config = fn.assign({ + //eslint-disable-line + getState: function getState(state) { + if (Array.isArray(state)) { + return state.slice(); + } else if (fn.isMutableObject(state)) { + return fn.assign({}, state); + } + return state; + }, + setState: function setState(currentState, nextState) { + if (fn.isMutableObject(nextState)) { + return fn.assign(currentState, nextState); + } + return nextState; + } + }, globalConfig, StoreModel.config); +} + +function transformStore(transforms, StoreModel) { + return transforms.reduce(function (Store, transform) { + return transform(Store); + }, StoreModel); +} + +function createStoreFromObject(alt, StoreModel, key) { + var storeInstance = void 0; + + var StoreProto = createPrototype({}, alt, key, fn.assign({ + getInstance: function getInstance() { + return storeInstance; + }, + setState: function setState(nextState) { + doSetState(this, storeInstance, nextState); + } + }, StoreModel)); + + // bind the store listeners + /* istanbul ignore else */ + if (StoreProto.bindListeners) { + _StoreMixin2.default.bindListeners.call(StoreProto, StoreProto.bindListeners); + } + /* istanbul ignore else */ + if (StoreProto.observe) { + _StoreMixin2.default.bindListeners.call(StoreProto, StoreProto.observe(alt)); + } + + // bind the lifecycle events + /* istanbul ignore else */ + if (StoreProto.lifecycle) { + fn.eachObject(function (eventName, event) { + _StoreMixin2.default.on.call(StoreProto, eventName, event); + }, [StoreProto.lifecycle]); + } + + // create the instance and fn.assign the public methods to the instance + storeInstance = fn.assign(new _AltStore2.default(alt, StoreProto, StoreProto.state !== undefined ? StoreProto.state : {}, StoreModel), StoreProto.publicMethods, { + displayName: key, + config: StoreModel.config + }); + + return storeInstance; +} + +function createStoreFromClass(alt, StoreModel, key) { + var storeInstance = void 0; + var config = StoreModel.config; + + // Creating a class here so we don't overload the provided store's + // prototype with the mixin behaviour and I'm extending from StoreModel + // so we can inherit any extensions from the provided store. + + var Store = function (_StoreModel) { + _inherits(Store, _StoreModel); + + function Store() { + _classCallCheck(this, Store); + + return _possibleConstructorReturn(this, _StoreModel.apply(this, arguments)); + } + + return Store; + }(StoreModel); + + createPrototype(Store.prototype, alt, key, { + type: 'AltStore', + getInstance: function getInstance() { + return storeInstance; + }, + setState: function setState(nextState) { + doSetState(this, storeInstance, nextState); + } + }); + + for (var _len = arguments.length, argsForClass = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { + argsForClass[_key - 3] = arguments[_key]; + } + + var store = new (Function.prototype.bind.apply(Store, [null].concat(argsForClass)))(); + + /* istanbul ignore next */ + if (config.bindListeners) store.bindListeners(config.bindListeners); + /* istanbul ignore next */ + if (config.datasource) store.registerAsync(config.datasource); + + storeInstance = fn.assign(new _AltStore2.default(alt, store, store.state !== undefined ? store.state : store, StoreModel), utils.getInternalMethods(StoreModel), config.publicMethods, { displayName: key }); + + return storeInstance; +} /***/ }), -/* 10 */ +/* 11 */ /***/ (function(module, exports, __webpack_require__) { - 'use strict'; +"use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _functions = __webpack_require__(7); - - var fn = _interopRequireWildcard(_functions); - - var _transmitter = __webpack_require__(11); - - var _transmitter2 = _interopRequireDefault(_transmitter); - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } - - function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - - var AltStore = function () { - function AltStore(alt, model, state, StoreModel) { - var _this = this; - - _classCallCheck(this, AltStore); - var lifecycleEvents = model.lifecycleEvents; - this.transmitter = (0, _transmitter2['default'])(); - this.lifecycle = function (event, x) { - if (lifecycleEvents[event]) lifecycleEvents[event].publish(x); - }; - this.state = state; - - this.alt = alt; - this.preventDefault = false; - this.displayName = model.displayName; - this.boundListeners = model.boundListeners; - this.StoreModel = StoreModel; - this.reduce = model.reduce || function (x) { - return x; - }; - this.subscriptions = []; - - var output = model.output || function (x) { - return x; - }; - - this.emitChange = function () { - return _this.transmitter.publish(output(_this.state)); - }; - - var handleDispatch = function handleDispatch(f, payload) { - try { - return f(); - } catch (e) { - if (model.handlesOwnErrors) { - _this.lifecycle('error', { - error: e, - payload: payload, - state: _this.state - }); - return false; - } - - throw e; - } - }; - - fn.assign(this, model.publicMethods); - - // Register dispatcher - this.dispatchToken = alt.dispatcher.register(function (payload) { - _this.preventDefault = false; - - _this.lifecycle('beforeEach', { - payload: payload, - state: _this.state - }); - - var actionHandlers = model.actionListeners[payload.action]; - - if (actionHandlers || model.otherwise) { - var result = void 0; - - if (actionHandlers) { - result = handleDispatch(function () { - return actionHandlers.filter(Boolean).every(function (handler) { - return handler.call(model, payload.data, payload.action) !== false; - }); - }, payload); - } else { - result = handleDispatch(function () { - return model.otherwise(payload.data, payload.action); - }, payload); - } - - if (result !== false && !_this.preventDefault) _this.emitChange(); - } - - if (model.reduce) { - handleDispatch(function () { - var value = model.reduce(_this.state, payload); - if (value !== undefined) _this.state = value; - }, payload); - if (!_this.preventDefault) _this.emitChange(); - } - - _this.lifecycle('afterEach', { - payload: payload, - state: _this.state - }); - }); - - this.lifecycle('init'); - } - - AltStore.prototype.listen = function () { - function listen(cb) { - var _this2 = this; - - if (!fn.isFunction(cb)) throw new TypeError('listen expects a function'); - - var _transmitter$subscrib = this.transmitter.subscribe(cb), - dispose = _transmitter$subscrib.dispose; - - this.subscriptions.push({ cb: cb, dispose: dispose }); - return function () { - _this2.lifecycle('unlisten'); - dispose(); - }; - } - - return listen; - }(); - - AltStore.prototype.unlisten = function () { - function unlisten(cb) { - this.lifecycle('unlisten'); - this.subscriptions.filter(function (subscription) { - return subscription.cb === cb; - }).forEach(function (subscription) { - return subscription.dispose(); - }); - } - - return unlisten; - }(); - - AltStore.prototype.getState = function () { - function getState() { - return this.StoreModel.config.getState.call(this, this.state); - } - - return getState; - }(); - - return AltStore; - }(); - - exports['default'] = AltStore; - module.exports = exports['default']; - -/***/ }), -/* 11 */ -/***/ (function(module, exports) { +Object.defineProperty(exports, "__esModule", { + value: true +}); - "use strict"; - - function transmitter() { - var subscriptions = []; - var nowDispatching = false; - var toUnsubscribe = {}; - - var unsubscribe = function unsubscribe(onChange) { - var id = subscriptions.indexOf(onChange); - if (id < 0) return; - if (nowDispatching) { - toUnsubscribe[id] = onChange; - return; - } - subscriptions.splice(id, 1); - }; - - var subscribe = function subscribe(onChange) { - var id = subscriptions.push(onChange); - var dispose = function dispose() { - return unsubscribe(onChange); - }; - return { dispose: dispose }; - }; - - var publish = function publish() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - nowDispatching = true; - try { - subscriptions.forEach(function (subscription, id) { - return toUnsubscribe[id] || subscription.apply(undefined, args); - }); - } finally { - nowDispatching = false; - Object.keys(toUnsubscribe).forEach(function (id) { - return unsubscribe(toUnsubscribe[id]); - }); - toUnsubscribe = {}; - } - }; - - return { - publish: publish, - subscribe: subscribe, - $subscriptions: subscriptions - }; - } - - module.exports = transmitter; +var _transmitter = __webpack_require__(3); + +var _transmitter2 = _interopRequireDefault(_transmitter); + +var _functions = __webpack_require__(0); + +var fn = _interopRequireWildcard(_functions); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } + +var AltStore = function () { + function AltStore(alt, model, state, StoreModel) { + var _this = this; + + _classCallCheck(this, AltStore); + + var lifecycleEvents = model.lifecycleEvents; + this.transmitter = (0, _transmitter2.default)(); + this.lifecycle = function (event, x) { + if (lifecycleEvents[event]) lifecycleEvents[event].publish(x); + }; + this.state = state; + + this.alt = alt; + this.preventDefault = false; + this.displayName = model.displayName; + this.boundListeners = model.boundListeners; + this.StoreModel = StoreModel; + this.reduce = model.reduce || function (x) { + return x; + }; + this.subscriptions = []; + + var output = model.output || function (x) { + return x; + }; + + this.emitChange = function () { + return _this.transmitter.publish(output(_this.state)); + }; + + var handleDispatch = function handleDispatch(f, payload) { + try { + return f(); + } catch (e) { + if (model.handlesOwnErrors) { + _this.lifecycle('error', { + error: e, + payload: payload, + state: _this.state + }); + return false; + } + + throw e; + } + }; + + fn.assign(this, model.publicMethods); + + // Register dispatcher + this.dispatchToken = alt.dispatcher.register(function (payload) { + _this.preventDefault = false; + + _this.lifecycle('beforeEach', { + payload: payload, + state: _this.state + }); + + var actionHandlers = model.actionListeners[payload.action]; + + if (actionHandlers || model.otherwise) { + var result = void 0; + + if (actionHandlers) { + result = handleDispatch(function () { + actionHandlers.filter(Boolean).every(function (handler) { + return handler.call(model, payload.data, payload.action) !== false; + }); + }, payload); + } else { + result = handleDispatch(function () { + model.otherwise(payload.data, payload.action); + }, payload); + } + if (result !== false && !_this.preventDefault) _this.emitChange(); + } + + if (model.reduce) { + handleDispatch(function () { + var value = model.reduce(_this.state, payload); + if (value !== undefined) _this.state = value; + }, payload); + if (!_this.preventDefault) _this.emitChange(); + } + + _this.lifecycle('afterEach', { + payload: payload, + state: _this.state + }); + }); + + this.lifecycle('init'); + } + + AltStore.prototype.listen = function listen(cb) { + var _this2 = this; + + if (!fn.isFunction(cb)) throw new TypeError('listen expects a function'); + + var _transmitter$subscrib = this.transmitter.subscribe(cb), + dispose = _transmitter$subscrib.dispose; + + this.subscriptions.push({ cb: cb, dispose: dispose }); + return function () { + _this2.lifecycle('unlisten'); + dispose(); + }; + }; + + AltStore.prototype.unlisten = function unlisten(cb) { + this.lifecycle('unlisten'); + this.subscriptions.filter(function (subscription) { + return subscription.cb === cb; + }).forEach(function (subscription) { + return subscription.dispose(); + }); + }; + + AltStore.prototype.getState = function getState() { + return this.StoreModel.config.getState.call(this, this.state); + }; + + return AltStore; +}(); + +exports.default = AltStore; +module.exports = exports['default']; /***/ }), /* 12 */ /***/ (function(module, exports, __webpack_require__) { - 'use strict'; - - Object.defineProperty(exports, "__esModule", { - value: true - }); - - var _transmitter = __webpack_require__(11); - - var _transmitter2 = _interopRequireDefault(_transmitter); - - var _functions = __webpack_require__(7); - - var fn = _interopRequireWildcard(_functions); - - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } - - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } - - var StoreMixin = { - waitFor: function () { - function waitFor() { - for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) { - sources[_key] = arguments[_key]; - } - - if (!sources.length) { - throw new ReferenceError('Dispatch tokens not provided'); - } - - var sourcesArray = sources; - if (sources.length === 1) { - sourcesArray = Array.isArray(sources[0]) ? sources[0] : sources; - } - - var tokens = sourcesArray.map(function (source) { - return source.dispatchToken || source; - }); - - this.dispatcher.waitFor(tokens); - } - - return waitFor; - }(), - exportAsync: function () { - function exportAsync(asyncMethods) { - this.registerAsync(asyncMethods); - } - - return exportAsync; - }(), - registerAsync: function () { - function registerAsync(asyncDef) { - var _this = this; - - var loadCounter = 0; - - var asyncMethods = fn.isFunction(asyncDef) ? asyncDef(this.alt) : asyncDef; - - var toExport = Object.keys(asyncMethods).reduce(function (publicMethods, methodName) { - var desc = asyncMethods[methodName]; - var spec = fn.isFunction(desc) ? desc(_this) : desc; - - var validHandlers = ['success', 'error', 'loading']; - validHandlers.forEach(function (handler) { - if (spec[handler] && !spec[handler].id) { - throw new Error(String(handler) + ' handler must be an action function'); - } - }); - - publicMethods[methodName] = function () { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - var state = _this.getInstance().getState(); - var value = spec.local && spec.local.apply(spec, [state].concat(args)); - var shouldFetch = spec.shouldFetch ? spec.shouldFetch.apply(spec, [state].concat(args)) - /*eslint-disable*/ - : value == null; - /*eslint-enable*/ - var intercept = spec.interceptResponse || function (x) { - return x; - }; - - var makeActionHandler = function () { - function makeActionHandler(action, isError) { - return function (x) { - var fire = function () { - function fire() { - loadCounter -= 1; - action(intercept(x, action, args)); - if (isError) throw x; - return x; - } - - return fire; - }(); - return _this.alt.trapAsync ? function () { - return fire(); - } : fire(); - }; - } - - return makeActionHandler; - }(); - - // if we don't have it in cache then fetch it - if (shouldFetch) { - loadCounter += 1; - /* istanbul ignore else */ - if (spec.loading) spec.loading(intercept(null, spec.loading, args)); - return spec.remote.apply(spec, [state].concat(args)).then(makeActionHandler(spec.success), makeActionHandler(spec.error, 1)); - } - - // otherwise emit the change now - _this.emitChange(); - return value; - }; - - return publicMethods; - }, {}); - - this.exportPublicMethods(toExport); - this.exportPublicMethods({ - isLoading: function () { - function isLoading() { - return loadCounter > 0; - } - - return isLoading; - }() - }); - } - - return registerAsync; - }(), - exportPublicMethods: function () { - function exportPublicMethods(methods) { - var _this2 = this; - - fn.eachObject(function (methodName, value) { - if (!fn.isFunction(value)) { - throw new TypeError('exportPublicMethods expects a function'); - } - - _this2.publicMethods[methodName] = value; - }, [methods]); - } - - return exportPublicMethods; - }(), - emitChange: function () { - function emitChange() { - this.getInstance().emitChange(); - } - - return emitChange; - }(), - on: function () { - function on(lifecycleEvent, handler) { - if (lifecycleEvent === 'error') this.handlesOwnErrors = true; - var bus = this.lifecycleEvents[lifecycleEvent] || (0, _transmitter2['default'])(); - this.lifecycleEvents[lifecycleEvent] = bus; - return bus.subscribe(handler.bind(this)); - } - - return on; - }(), - bindAction: function () { - function bindAction(symbol, handler) { - if (!symbol) { - throw new ReferenceError('Invalid action reference passed in'); - } - if (!fn.isFunction(handler)) { - throw new TypeError('bindAction expects a function'); - } - - // You can pass in the constant or the function itself - var key = symbol.id ? symbol.id : symbol; - this.actionListeners[key] = this.actionListeners[key] || []; - this.actionListeners[key].push(handler.bind(this)); - this.boundListeners.push(key); - } - - return bindAction; - }(), - bindActions: function () { - function bindActions(actions) { - var _this3 = this; - - fn.eachObject(function (action, symbol) { - var matchFirstCharacter = /./; - var assumedEventHandler = action.replace(matchFirstCharacter, function (x) { - return 'on' + String(x[0].toUpperCase()); - }); - - if (_this3[action] && _this3[assumedEventHandler]) { - // If you have both action and onAction - throw new ReferenceError('You have multiple action handlers bound to an action: ' + (String(action) + ' and ' + String(assumedEventHandler))); - } - - var handler = _this3[action] || _this3[assumedEventHandler]; - if (handler) { - _this3.bindAction(symbol, handler); - } - }, [actions]); - } - - return bindActions; - }(), - bindListeners: function () { - function bindListeners(obj) { - var _this4 = this; - - fn.eachObject(function (methodName, symbol) { - var listener = _this4[methodName]; - - if (!listener) { - throw new ReferenceError(String(methodName) + ' defined but does not exist in ' + String(_this4.displayName)); - } - - if (Array.isArray(symbol)) { - symbol.forEach(function (action) { - _this4.bindAction(action, listener); - }); - } else { - _this4.bindAction(symbol, listener); - } - }, [obj]); - } - - return bindListeners; - }() - }; - - exports['default'] = StoreMixin; - module.exports = exports['default']; +"use strict"; + + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _transmitter = __webpack_require__(3); + +var _transmitter2 = _interopRequireDefault(_transmitter); + +var _functions = __webpack_require__(0); + +var fn = _interopRequireWildcard(_functions); + +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var StoreMixin = { + waitFor: function waitFor() { + for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) { + sources[_key] = arguments[_key]; + } + + if (!sources.length) { + throw new ReferenceError('Dispatch tokens not provided'); + } + + var sourcesArray = sources; + if (sources.length === 1) { + sourcesArray = Array.isArray(sources[0]) ? sources[0] : sources; + } + + var tokens = sourcesArray.map(function (source) { + return source.dispatchToken || source; + }); + + this.dispatcher.waitFor(tokens); + }, + exportAsync: function exportAsync(asyncMethods) { + this.registerAsync(asyncMethods); + }, + registerAsync: function registerAsync(asyncDef) { + var _this = this; + + var loadCounter = 0; + + var asyncMethods = fn.isFunction(asyncDef) ? asyncDef(this.alt) : asyncDef; + + var toExport = Object.keys(asyncMethods).reduce(function (publicMethods, methodName) { + var desc = asyncMethods[methodName]; + var spec = fn.isFunction(desc) ? desc(_this) : desc; + + var validHandlers = ['success', 'error', 'loading']; + validHandlers.forEach(function (handler) { + if (spec[handler] && !spec[handler].id) { + throw new Error(handler + ' handler must be an action function'); + } + }); + + publicMethods[methodName] = function () { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + //eslint-disable-line + var state = _this.getInstance().getState(); + var value = spec.local && spec.local.apply(spec, [state].concat(args)); + var shouldFetch = spec.shouldFetch ? spec.shouldFetch.apply(spec, [state].concat(args)) + /*eslint-disable*/ + : value == null; + /* eslint-enable */ + var intercept = spec.interceptResponse || function (x) { + return x; + }; + var makeActionHandler = function makeActionHandler(action, isError) { + return function (x) { + var fire = function fire() { + loadCounter -= 1; + action(intercept(x, action, args)); + if (isError) throw x; + return x; + }; + return _this.alt.trapAsync ? function () { + return fire(); + } : fire(); + }; + }; + + // if we don't have it in cache then fetch it + if (shouldFetch) { + loadCounter += 1; + /* istanbul ignore else */ + if (spec.loading) spec.loading(intercept(null, spec.loading, args)); + return spec.remote.apply(spec, [state].concat(args)).then(makeActionHandler(spec.success), makeActionHandler(spec.error, 1)); + } + + // otherwise emit the change now + _this.emitChange(); + return value; + }; + + return publicMethods; + }, {}); + + this.exportPublicMethods(toExport); + this.exportPublicMethods({ + isLoading: function isLoading() { + return loadCounter > 0; + } + }); + }, + exportPublicMethods: function exportPublicMethods(methods) { + var _this2 = this; + + fn.eachObject(function (methodName, value) { + if (!fn.isFunction(value)) { + throw new TypeError('exportPublicMethods expects a function'); + } + + _this2.publicMethods[methodName] = value; + }, [methods]); + }, + emitChange: function emitChange() { + this.getInstance().emitChange(); + }, + on: function on(lifecycleEvent, handler) { + if (lifecycleEvent === 'error') this.handlesOwnErrors = true; + var bus = this.lifecycleEvents[lifecycleEvent] || (0, _transmitter2.default)(); + this.lifecycleEvents[lifecycleEvent] = bus; + return bus.subscribe(handler.bind(this)); + }, + bindAction: function bindAction(symbol, handler) { + if (!symbol) { + throw new ReferenceError('Invalid action reference passed in'); + } + if (!fn.isFunction(handler)) { + throw new TypeError('bindAction expects a function'); + } + + // You can pass in the constant or the function itself + var key = symbol.id ? symbol.id : symbol; + this.actionListeners[key] = this.actionListeners[key] || []; + this.actionListeners[key].push(handler.bind(this)); + this.boundListeners.push(key); + }, + bindActions: function bindActions(actions) { + var _this3 = this; + + fn.eachObject(function (action, symbol) { + var matchFirstCharacter = /./; + var assumedEventHandler = action.replace(matchFirstCharacter, function (x) { + return 'on' + x[0].toUpperCase(); + }); + + if (_this3[action] && _this3[assumedEventHandler]) { + // If you have both action and onAction + throw new ReferenceError('You have multiple action handlers bound to an action: ' + (action + ' and ' + assumedEventHandler)); + } + + var handler = _this3[action] || _this3[assumedEventHandler]; + if (handler) { + _this3.bindAction(symbol, handler); + } + }, [actions]); + }, + bindListeners: function bindListeners(obj) { + var _this4 = this; + + fn.eachObject(function (methodName, symbol) { + var listener = _this4[methodName]; + + if (!listener) { + throw new ReferenceError(methodName + ' defined but does not exist in ' + _this4.displayName); + } + + if (Array.isArray(symbol)) { + symbol.forEach(function (action) { + _this4.bindAction(action, listener); + }); + } else { + _this4.bindAction(symbol, listener); + } + }, [obj]); + } +}; + +exports.default = StoreMixin; +module.exports = exports['default']; /***/ }), /* 13 */ /***/ (function(module, exports, __webpack_require__) { - 'use strict'; +"use strict"; - Object.defineProperty(exports, "__esModule", { - value: true - }); - exports['default'] = makeAction; - var _functions = __webpack_require__(7); +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = makeAction; - var fn = _interopRequireWildcard(_functions); +var _isPromise = __webpack_require__(14); - var _AltUtils = __webpack_require__(9); +var _isPromise2 = _interopRequireDefault(_isPromise); - var utils = _interopRequireWildcard(_AltUtils); +var _functions = __webpack_require__(0); - var _isPromise = __webpack_require__(14); +var fn = _interopRequireWildcard(_functions); - var _isPromise2 = _interopRequireDefault(_isPromise); +var _AltUtils = __webpack_require__(1); - function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } +var utils = _interopRequireWildcard(_AltUtils); - function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj['default'] = obj; return newObj; } } +function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } - function makeAction(alt, namespace, name, implementation, obj) { - var id = utils.uid(alt._actionsRegistry, String(namespace) + '.' + String(name)); - alt._actionsRegistry[id] = 1; +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } - var data = { id: id, namespace: namespace, name: name }; +function makeAction(alt, namespace, name, implementation, obj) { + var id = utils.uid(alt._actionsRegistry, namespace + '.' + name); + alt._actionsRegistry[id] = 1; //eslint-disable-line - var dispatch = function dispatch(payload) { - return alt.dispatch(id, payload, data); - }; + var data = { id: id, namespace: namespace, name: name }; - // the action itself - var action = function action() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } + var dispatch = function dispatch(payload) { + return alt.dispatch(id, payload, data); + }; - var invocationResult = implementation.apply(obj, args); - var actionResult = invocationResult; + // the action itself + var action = function action() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } - // async functions that return promises should not be dispatched - if (invocationResult !== undefined && !(0, _isPromise2['default'])(invocationResult)) { - if (fn.isFunction(invocationResult)) { - // inner function result should be returned as an action result - actionResult = invocationResult(dispatch, alt); - } else { - dispatch(invocationResult); - } - } + var invocationResult = implementation.apply(obj, args); + var actionResult = invocationResult; - if (invocationResult === undefined) { - utils.warn('An action was called but nothing was dispatched'); - } + // async functions that return promises should not be dispatched + if (invocationResult !== undefined && !(0, _isPromise2.default)(invocationResult)) { + if (fn.isFunction(invocationResult)) { + // inner function result should be returned as an action result + actionResult = invocationResult(dispatch, alt); + } else { + dispatch(invocationResult); + } + } - return actionResult; - }; - action.defer = function () { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } + if (invocationResult === undefined) { + utils.warn('An action was called but nothing was dispatched'); + } - return setTimeout(function () { - return action.apply(null, args); - }); - }; - action.id = id; - action.data = data; + return actionResult; + }; + action.defer = function () { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } - // ensure each reference is unique in the namespace - var container = alt.actions[namespace]; - var namespaceId = utils.uid(container, name); - container[namespaceId] = action; + return setTimeout(function () { + return action.apply(undefined, args); + }); + }; + action.id = id; + action.data = data; - // generate a constant - var constant = utils.formatAsConstant(namespaceId); - container[constant] = id; + // ensure each reference is unique in the namespace + var container = alt.actions[namespace]; + var namespaceId = utils.uid(container, name); + container[namespaceId] = action; - return action; - } - module.exports = exports['default']; + // generate a constant + var constant = utils.formatAsConstant(namespaceId); + container[constant] = id; + + return action; +} +module.exports = exports['default']; /***/ }), /* 14 */ /***/ (function(module, exports) { - module.exports = isPromise; +module.exports = isPromise; - function isPromise(obj) { - return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'; - } +function isPromise(obj) { + return !!obj && (typeof obj === 'object' || typeof obj === 'function') && typeof obj.then === 'function'; +} /***/ }) -/******/ ]) -}); -; \ No newline at end of file +/******/ ]); +}); \ No newline at end of file diff --git a/dist/alt.min.js b/dist/alt.min.js index 59b8c8d6..3f1f9aaa 100644 --- a/dist/alt.min.js +++ b/dist/alt.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Alt=e():t.Alt=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={exports:{},id:r,loaded:!1};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){t.exports=n(6)},function(t,e){"use strict";function n(t){var e=t.constructor;return!!t&&"[object Object]"===Object.prototype.toString.call(t)&&o(e)&&!Object.isFrozen(t)&&(e instanceof e||"AltStore"===t.type)}function r(t,e){e.forEach(function(e){Object.keys(Object(e)).forEach(function(n){t(n,e[n])})})}function i(t){for(var e=arguments.length,n=Array(e>1?e-1:0),i=1;i1&&void 0!==arguments[1]?arguments[1]:{};return t===Function.prototype?e:o(Object.getPrototypeOf(t),y.assign(i(t,!0),e))}function a(t){"undefined"!=typeof console&&console.warn(new ReferenceError(t))}function s(t,e){for(var n=0,r=e;Object.hasOwnProperty.call(t,r);)r=e+String(++n);return r}function c(t){return t.replace(/[a-z]([A-Z])/g,function(t){return String(t[0])+"_"+String(t[1].toLowerCase())}).toUpperCase()}function u(t){if(void 0===t)return null;for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r1)for(var n=1;n0&&void 0!==arguments[0]?arguments[0]:{};s(this,t),this.config=e,this.serialize=e.serialize||JSON.stringify,this.deserialize=e.deserialize||JSON.parse,this.dispatcher=e.dispatcher||new c.Dispatcher,this.batchingFunction=e.batchingFunction||function(t){return t()},this.actions={global:{}},this.stores={},this.storeTransforms=e.storeTransforms||[],this.trapAsync=!1,this._actionsRegistry={},this._initSnapshot={},this._lastSnapshot={}}return t.prototype.dispatch=function(){function t(t,e,n){var r=this;this.batchingFunction(function(){var i=Math.random().toString(18).substr(2,16);if(t.hasOwnProperty("type")&&t.hasOwnProperty("payload")){var o={id:t.type,namespace:t.type,name:t.type};return r.dispatcher.dispatch(v.fsa(i,t.type,t.payload,o))}return t.id&&t.dispatch?v.dispatch(i,t,e,r):r.dispatcher.dispatch(v.fsa(i,t,e,n))})}return t}(),t.prototype.createUnsavedStore=function(){function t(t){var e=t.displayName||"";d.createStoreConfig(this.config,t);for(var n=d.transformStore(this.storeTransforms,t),r=arguments.length,i=Array(r>1?r-1:0),o=1;o2?i-2:0),a=2;a1&&void 0!==arguments[1]?arguments[1]:{},r={},i=v.uid(this._actionsRegistry,t.displayName||t.name||"Unknown");if(p.isFunction(t)){p.assign(r,v.getPrototypeChain(t));for(var c=function(t){function e(){s(this,e);for(var n=arguments.length,r=Array(n),i=0;i2?u-2:0),l=2;l2?n-2:0),i=2;i2?n-2:0),i=2;i0}return t}()})}return t}(),exportPublicMethods:function(){function t(t){var e=this;c.eachObject(function(t,n){if(!c.isFunction(n))throw new TypeError("exportPublicMethods expects a function");e.publicMethods[t]=n},[t])}return t}(),emitChange:function(){function t(){this.getInstance().emitChange()}return t}(),on:function(){function t(t,e){"error"===t&&(this.handlesOwnErrors=!0);var n=this.lifecycleEvents[t]||(0,a.default)();return this.lifecycleEvents[t]=n,n.subscribe(e.bind(this))}return t}(),bindAction:function(){function t(t,e){if(!t)throw new ReferenceError("Invalid action reference passed in");if(!c.isFunction(e))throw new TypeError("bindAction expects a function");var n=t.id?t.id:t;this.actionListeners[n]=this.actionListeners[n]||[],this.actionListeners[n].push(e.bind(this)),this.boundListeners.push(n)}return t}(),bindActions:function(){function t(t){var e=this;c.eachObject(function(t,n){var r=/./,i=t.replace(r,function(t){return"on"+String(t[0].toUpperCase())});if(e[t]&&e[i])throw new ReferenceError("You have multiple action handlers bound to an action: "+(String(t)+" and "+String(i)));var o=e[t]||e[i];o&&e.bindAction(n,o)},[t])}return t}(),bindListeners:function(){function t(t){var e=this;c.eachObject(function(t,n){var r=e[t];if(!r)throw new ReferenceError(String(t)+" defined but does not exist in "+String(e.displayName));Array.isArray(n)?n.forEach(function(t){e.bindAction(t,r)}):e.bindAction(n,r)},[t])}return t}()};e.default=u,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function a(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function s(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e,n){if(n){var r=e.StoreModel.config,i=g.isFunction(n)?n(e.state):n;e.state=r.setState.call(t,e.state,i),t.alt.dispatcher.isDispatching()||t.emitChange()}}function u(t,e,n,r){return g.assign(t,m.default,{displayName:n,alt:e,dispatcher:e.dispatcher,preventDefault:function(){function t(){this.getInstance().preventDefault=!0}return t}(),boundListeners:[],lifecycleEvents:{},actionListeners:{},publicMethods:{},handlesOwnErrors:!1},r)}function f(t,e){e.config=g.assign({getState:function(){function t(t){return Array.isArray(t)?t.slice():g.isMutableObject(t)?g.assign({},t):t}return t}(),setState:function(){function t(t,e){return g.isMutableObject(e)?g.assign(t,e):e}return t}()},t,e.config)}function l(t,e){return t.reduce(function(t,e){return e(t)},e)}function p(t,e,n){var r=void 0,i=u({},t,n,g.assign({getInstance:function(){function t(){return r}return t}(),setState:function(){function t(t){c(this,r,t)}return t}()},e));return i.bindListeners&&m.default.bindListeners.call(i,i.bindListeners),i.observe&&m.default.bindListeners.call(i,i.observe(t)),i.lifecycle&&g.eachObject(function(t,e){m.default.on.call(i,t,e)},[i.lifecycle]),r=g.assign(new w.default(t,i,void 0!==i.state?i.state:{},e),i.publicMethods,{displayName:n,config:e.config})}function h(t,e,n){var r=void 0,i=e.config,f=function(t){function e(){o(this,e);for(var n=arguments.length,r=Array(n),i=0;i3?l-3:0),h=3;h1&&void 0!==arguments[1]?arguments[1]:[],n=e.length?e:Object.keys(t.stores);return n.reduce(function(e,n){var r=n.displayName||n,i=t.stores[r],o=i.StoreModel.config;i.lifecycle("snapshot");var a=o.onSerialize&&o.onSerialize(i.state);return e[r]=a?a:i.getState(),e},{})}function a(t,e){var n=t.deserialize(t.serialize(t.stores[e].state));t._initSnapshot[e]=n,t._lastSnapshot[e]=n}function s(t,e,n){return n.reduce(function(t,n){var r=n.displayName||n;if(!e[r])throw new ReferenceError(String(r)+" is not a valid store");return t[r]=e[r],t},{})}Object.defineProperty(e,"__esModule",{value:!0}),e.setAppState=i,e.snapshot=o,e.saveInitialSnapshot=a,e.filterSnapshots=s;var c=n(1),u=r(c)},function(t,e,n){t.exports.Dispatcher=n(12)},function(t,e,n){(function(r){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}e.__esModule=!0;var o=n(13),a="ID_",s=function(){function t(){i(this,t),this._callbacks={},this._isDispatching=!1,this._isHandled={},this._isPending={},this._lastID=1}return t.prototype.register=function(t){var e=a+this._lastID++;return this._callbacks[e]=t,e},t.prototype.unregister=function(t){this._callbacks[t]?void 0:"production"!==r.env.NODE_ENV?o(!1,"Dispatcher.unregister(...): `%s` does not map to a registered callback.",t):o(!1),delete this._callbacks[t]},t.prototype.waitFor=function(t){this._isDispatching?void 0:"production"!==r.env.NODE_ENV?o(!1,"Dispatcher.waitFor(...): Must be invoked while dispatching."):o(!1);for(var e=0;e1?e-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:{};return t===Function.prototype?e:i(Object.getPrototypeOf(t),d.assign(r(t,!0),e))}function o(t){"undefined"!=typeof console&&console.warn(new ReferenceError(t))}function s(t,e){for(var n=0,r=e;Object.hasOwnProperty.call(t,r);)n+=1,r=e+String(n);return r}function a(t){return t.replace(/[a-z]([A-Z])/g,function(t){return t[0]+"_"+t[1].toLowerCase()}).toUpperCase()}function c(t){if(void 0===t)return null;for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r0&&void 0!==arguments[0]?arguments[0]:{};s(this,t),this.config=e,this.serialize=e.serialize||JSON.stringify,this.deserialize=e.deserialize||JSON.parse,this.dispatcher=e.dispatcher||new a.Dispatcher,this.batchingFunction=e.batchingFunction||function(t){return t()},this.actions={global:{}},this.stores={},this.storeTransforms=e.storeTransforms||[],this.trapAsync=!1,this._actionsRegistry={},this._initSnapshot={},this._lastSnapshot={}}return t.prototype.dispatch=function(t,e,n){var r=this;this.batchingFunction(function(){var i=Math.random().toString(18).substr(2,16);if(t.hasOwnProperty("type")&&t.hasOwnProperty("payload")){var o={id:t.type,namespace:t.type,name:t.type};return r.dispatcher.dispatch(y.fsa(i,t.type,t.payload,o))}return t.id&&t.dispatch?y.dispatch(i,t,e,r):r.dispatcher.dispatch(y.fsa(i,t,e,n))})},t.prototype.createUnsavedStore=function(t){var e=t.displayName||"";h.createStoreConfig(this.config,t);for(var n=h.transformStore(this.storeTransforms,t),r=arguments.length,i=Array(r>1?r-1:0),o=1;o2?i-2:0),s=2;s1&&void 0!==arguments[1]?arguments[1]:{},r={},a=y.uid(this._actionsRegistry,t.displayName||t.name||"Unknown");if(l.isFunction(t)){l.assign(r,y.getPrototypeChain(t));for(var c=function(t){function e(){return s(this,e),i(this,t.apply(this,arguments))}return o(e,t),e.prototype.generateActions=function(){for(var t=arguments.length,e=Array(t),n=0;n2?u-2:0),p=2;p2?n-2:0),i=2;i2?n-2:0),i=2;i1&&void 0!==arguments[1]?arguments[1]:[];return(e.length?e:Object.keys(t.stores)).reduce(function(e,n){var r=n.displayName||n,i=t.stores[r],o=i.StoreModel.config;i.lifecycle("snapshot");var s=o.onSerialize&&o.onSerialize(i.state);return e[r]=s||i.getState(),e},{})}function o(t,e){var n=t.deserialize(t.serialize(t.stores[e].state));t._initSnapshot[e]=n,t._lastSnapshot[e]=n}function s(t,e,n){return n.reduce(function(t,n){var r=n.displayName||n;if(!e[r])throw new ReferenceError(r+" is not a valid store");return t[r]=e[r],t},{})}Object.defineProperty(e,"__esModule",{value:!0}),e.setAppState=r,e.snapshot=i,e.saveInitialSnapshot=o,e.filterSnapshots=s;var a=n(0),c=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(a)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e,n){if(n){var r=e.StoreModel.config,i=b.isFunction(n)?n(e.state):n;e.state=r.setState.call(t,e.state,i),t.alt.dispatcher.isDispatching()||t.emitChange()}}function u(t,e,n,r){return b.assign(t,m.default,{displayName:n,alt:e,dispatcher:e.dispatcher,preventDefault:function(){this.getInstance().preventDefault=!0},boundListeners:[],lifecycleEvents:{},actionListeners:{},publicMethods:{},handlesOwnErrors:!1},r)}function f(t,e){e.config=b.assign({getState:function(t){return Array.isArray(t)?t.slice():b.isMutableObject(t)?b.assign({},t):t},setState:function(t,e){return b.isMutableObject(e)?b.assign(t,e):e}},t,e.config)}function l(t,e){return t.reduce(function(t,e){return e(t)},e)}function p(t,e,n){var r=void 0,i=u({},t,n,b.assign({getInstance:function(){return r},setState:function(t){c(this,r,t)}},e));return i.bindListeners&&m.default.bindListeners.call(i,i.bindListeners),i.observe&&m.default.bindListeners.call(i,i.observe(t)),i.lifecycle&&b.eachObject(function(t,e){m.default.on.call(i,t,e)},[i.lifecycle]),r=b.assign(new _.default(t,i,void 0!==i.state?i.state:{},e),i.publicMethods,{displayName:n,config:e.config})}function h(t,e,n){var r=void 0,i=e.config,f=function(t){function e(){return o(this,e),s(this,t.apply(this,arguments))}return a(e,t),e}(e);u(f.prototype,t,n,{type:"AltStore",getInstance:function(){return r},setState:function(t){c(this,r,t)}});for(var l=arguments.length,p=Array(l>3?l-3:0),h=3;h0}})},exportPublicMethods:function(t){var e=this;s.eachObject(function(t,n){if(!s.isFunction(n))throw new TypeError("exportPublicMethods expects a function");e.publicMethods[t]=n},[t])},emitChange:function(){this.getInstance().emitChange()},on:function(t,e){"error"===t&&(this.handlesOwnErrors=!0);var n=this.lifecycleEvents[t]||(0,i.default)();return this.lifecycleEvents[t]=n,n.subscribe(e.bind(this))},bindAction:function(t,e){if(!t)throw new ReferenceError("Invalid action reference passed in");if(!s.isFunction(e))throw new TypeError("bindAction expects a function");var n=t.id?t.id:t;this.actionListeners[n]=this.actionListeners[n]||[],this.actionListeners[n].push(e.bind(this)),this.boundListeners.push(n)},bindActions:function(t){var e=this;s.eachObject(function(t,n){var r=/./,i=t.replace(r,function(t){return"on"+t[0].toUpperCase()});if(e[t]&&e[i])throw new ReferenceError("You have multiple action handlers bound to an action: "+t+" and "+i);var o=e[t]||e[i];o&&e.bindAction(n,o)},[t])},bindListeners:function(t){var e=this;s.eachObject(function(t,n){var r=e[t];if(!r)throw new ReferenceError(t+" defined but does not exist in "+e.displayName);Array.isArray(n)?n.forEach(function(t){e.bindAction(t,r)}):e.bindAction(n,r)},[t])}};e.default=a,t.exports=e.default},function(t,e,n){"use strict";function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function i(t,e,n,r,i){var o=f.uid(t._actionsRegistry,e+"."+n);t._actionsRegistry[o]=1;var a={id:o,namespace:e,name:n},u=function(e){return t.dispatch(o,e,a)},l=function(){for(var e=arguments.length,n=Array(e),o=0;o flux-build.js; uglifyjs -m -c 'comparisons=false,keep_fargs=true,unsafe=true,unsafe_comps=true,warnings=false' flux-build.js > flux-build.min.js", "test": "npm run test-node", "test-node": "babel-node node_modules/.bin/_mocha -u exports -R nyan test", + "test-node-debug": "babel-node node_modules/.bin/_mocha -u exports -R nyan test --inspect-brk", "transpile": "babel src --out-dir lib", "transpile-cover": "babel src --out-dir lib --plugins external-helpers-2", "version": "npm run build" diff --git a/src/actions/index.js b/src/actions/index.js index 41e4b8f7..d8939153 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -1,48 +1,48 @@ -import * as fn from '../functions' -import * as utils from '../utils/AltUtils' -import isPromise from 'is-promise' +import isPromise from 'is-promise'; +import * as fn from '../functions'; +import * as utils from '../utils/AltUtils'; export default function makeAction(alt, namespace, name, implementation, obj) { - const id = utils.uid(alt._actionsRegistry, `${namespace}.${name}`) - alt._actionsRegistry[id] = 1 - - const data = { id, namespace, name } - - const dispatch = (payload) => alt.dispatch(id, payload, data) - - // the action itself - const action = (...args) => { - const invocationResult = implementation.apply(obj, args) - let actionResult = invocationResult - - // async functions that return promises should not be dispatched - if (invocationResult !== undefined && !isPromise(invocationResult)) { - if (fn.isFunction(invocationResult)) { - // inner function result should be returned as an action result - actionResult = invocationResult(dispatch, alt) - } else { - dispatch(invocationResult) - } - } - - if (invocationResult === undefined) { - utils.warn('An action was called but nothing was dispatched') - } - - return actionResult - } - action.defer = (...args) => setTimeout(() => action.apply(null, args)) - action.id = id - action.data = data - - // ensure each reference is unique in the namespace - const container = alt.actions[namespace] - const namespaceId = utils.uid(container, name) - container[namespaceId] = action - - // generate a constant - const constant = utils.formatAsConstant(namespaceId) - container[constant] = id - - return action + const id = utils.uid(alt._actionsRegistry, `${namespace}.${name}`); + alt._actionsRegistry[id] = 1; //eslint-disable-line + + const data = { id, namespace, name }; + + const dispatch = (payload) => { return alt.dispatch(id, payload, data); }; + + // the action itself + const action = (...args) => { + const invocationResult = implementation.apply(obj, args); + let actionResult = invocationResult; + + // async functions that return promises should not be dispatched + if (invocationResult !== undefined && !isPromise(invocationResult)) { + if (fn.isFunction(invocationResult)) { + // inner function result should be returned as an action result + actionResult = invocationResult(dispatch, alt); + } else { + dispatch(invocationResult); + } + } + + if (invocationResult === undefined) { + utils.warn('An action was called but nothing was dispatched'); + } + + return actionResult; + }; + action.defer = (...args) => { return setTimeout(() => { return action(...args); }); }; + action.id = id; + action.data = data; + + // ensure each reference is unique in the namespace + const container = alt.actions[namespace]; + const namespaceId = utils.uid(container, name); + container[namespaceId] = action; + + // generate a constant + const constant = utils.formatAsConstant(namespaceId); + container[constant] = id; + + return action; } diff --git a/src/functions.js b/src/functions.js index be30bfbf..f0fb4f71 100644 --- a/src/functions.js +++ b/src/functions.js @@ -1,10 +1,10 @@ -export const isFunction = x => typeof x === 'function' +export const isFunction = (x) => { return typeof x === 'function'; }; export function isMutableObject(target) { - const Ctor = target.constructor + const Ctor = target.constructor; - return ( - !!target + return ( + !!target && Object.prototype.toString.call(target) === '[object Object]' && @@ -13,18 +13,20 @@ export function isMutableObject(target) { !Object.isFrozen(target) && (Ctor instanceof Ctor || target.type === 'AltStore') - ) + ); } export function eachObject(f, o) { - o.forEach((from) => { - Object.keys(Object(from)).forEach((key) => { - f(key, from[key]) - }) - }) + o.forEach((from) => { + Object.keys(Object(from)).forEach((key) => { + f(key, from[key]); + }); + }); } export function assign(target, ...source) { - eachObject((key, value) => target[key] = value, source) - return target + eachObject((key, value) => { + target[key] = value; //eslint-disable-line + }, source); + return target; } diff --git a/src/index.js b/src/index.js index cb263633..1617eaa9 100644 --- a/src/index.js +++ b/src/index.js @@ -1,246 +1,241 @@ /* global window */ -import { Dispatcher } from 'flux' +import { Dispatcher } from 'flux'; -import * as StateFunctions from './utils/StateFunctions' -import * as fn from './functions' -import * as store from './store' -import * as utils from './utils/AltUtils' -import makeAction from './actions' +import * as StateFunctions from './utils/StateFunctions'; +import * as fn from './functions'; +import * as store from './store'; +import * as utils from './utils/AltUtils'; +import makeAction from './actions'; class Alt { - constructor(config = {}) { - this.config = config - this.serialize = config.serialize || JSON.stringify - this.deserialize = config.deserialize || JSON.parse - this.dispatcher = config.dispatcher || new Dispatcher() - this.batchingFunction = config.batchingFunction || (callback => callback()) - this.actions = { global: {} } - this.stores = {} - this.storeTransforms = config.storeTransforms || [] - this.trapAsync = false - this._actionsRegistry = {} - this._initSnapshot = {} - this._lastSnapshot = {} - } - - dispatch(action, data, details) { - this.batchingFunction(() => { - const id = Math.random().toString(18).substr(2, 16) - - // support straight dispatching of FSA-style actions - if (action.hasOwnProperty('type') && action.hasOwnProperty('payload')) { - const fsaDetails = { - id: action.type, - namespace: action.type, - name: action.type, + constructor(config = {}) { + this.config = config; + this.serialize = config.serialize || JSON.stringify; + this.deserialize = config.deserialize || JSON.parse; + this.dispatcher = config.dispatcher || new Dispatcher(); + this.batchingFunction = config.batchingFunction || ((callback) => { return callback(); }); + this.actions = { global: {} }; + this.stores = {}; + this.storeTransforms = config.storeTransforms || []; + this.trapAsync = false; + this._actionsRegistry = {}; + this._initSnapshot = {}; + this._lastSnapshot = {}; + } + + dispatch(action, data, details) { + this.batchingFunction(() => { + const id = Math.random().toString(18).substr(2, 16); + + // support straight dispatching of FSA-style actions + if (action.hasOwnProperty('type') && action.hasOwnProperty('payload')) { + const fsaDetails = { + id: action.type, + namespace: action.type, + name: action.type, + }; + return this.dispatcher.dispatch( + utils.fsa(id, action.type, action.payload, fsaDetails), + ); + } + + if (action.id && action.dispatch) { + return utils.dispatch(id, action, data, this); + } + + return this.dispatcher.dispatch(utils.fsa(id, action, data, details)); + }); + } + + createUnsavedStore(StoreModel, ...args) { + const key = StoreModel.displayName || ''; + store.createStoreConfig(this.config, StoreModel); + const Store = store.transformStore(this.storeTransforms, StoreModel); + + return fn.isFunction(Store) + ? store.createStoreFromClass(this, Store, key, ...args) + : store.createStoreFromObject(this, Store, key); + } + + createStore(StoreModel, iden, ...args) { + let key = iden || StoreModel.displayName || StoreModel.name || ''; + store.createStoreConfig(this.config, StoreModel); + const Store = store.transformStore(this.storeTransforms, StoreModel); + + /* istanbul ignore next */ + if (module.hot) delete this.stores[key]; + + if (this.stores[key] || !key) { + if (this.stores[key]) { + utils.warn( + `A store named ${key} already exists, double check your store ` + + 'names or pass in your own custom identifier for each store', + ); + } else { + utils.warn('Store name was not specified'); + } + + key = utils.uid(this.stores, key); } - return this.dispatcher.dispatch( - utils.fsa(id, action.type, action.payload, fsaDetails) - ) - } - - if (action.id && action.dispatch) { - return utils.dispatch(id, action, data, this) - } - - return this.dispatcher.dispatch(utils.fsa(id, action, data, details)) - }) - } - - createUnsavedStore(StoreModel, ...args) { - const key = StoreModel.displayName || '' - store.createStoreConfig(this.config, StoreModel) - const Store = store.transformStore(this.storeTransforms, StoreModel) - - return fn.isFunction(Store) - ? store.createStoreFromClass(this, Store, key, ...args) - : store.createStoreFromObject(this, Store, key) - } - - createStore(StoreModel, iden, ...args) { - let key = iden || StoreModel.displayName || StoreModel.name || '' - store.createStoreConfig(this.config, StoreModel) - const Store = store.transformStore(this.storeTransforms, StoreModel) - - /* istanbul ignore next */ - if (module.hot) delete this.stores[key] - - if (this.stores[key] || !key) { - if (this.stores[key]) { - utils.warn( - `A store named ${key} already exists, double check your store ` + - `names or pass in your own custom identifier for each store` - ) - } else { - utils.warn('Store name was not specified') - } - - key = utils.uid(this.stores, key) - } - - const storeInstance = fn.isFunction(Store) - ? store.createStoreFromClass(this, Store, key, ...args) - : store.createStoreFromObject(this, Store, key) - - this.stores[key] = storeInstance - StateFunctions.saveInitialSnapshot(this, key) - - return storeInstance - } - - generateActions(...actionNames) { - const actions = { name: 'global' } - return this.createActions(actionNames.reduce((obj, action) => { - obj[action] = utils.dispatchIdentity - return obj - }, actions)) - } - - createAction(name, implementation, obj) { - return makeAction(this, 'global', name, implementation, obj) - } - - createActions(ActionsClass, exportObj = {}, ...argsForConstructor) { - const actions = {} - const key = utils.uid( - this._actionsRegistry, - ActionsClass.displayName || ActionsClass.name || 'Unknown' - ) - - if (fn.isFunction(ActionsClass)) { - fn.assign(actions, utils.getPrototypeChain(ActionsClass)) - class ActionsGenerator extends ActionsClass { - constructor(...args) { - super(...args) + + const storeInstance = fn.isFunction(Store) + ? store.createStoreFromClass(this, Store, key, ...args) + : store.createStoreFromObject(this, Store, key); + + this.stores[key] = storeInstance; + StateFunctions.saveInitialSnapshot(this, key); + + return storeInstance; + } + + generateActions(...actionNames) { + const actions = { name: 'global' }; + return this.createActions(actionNames.reduce((obj, action) => { + obj[action] = utils.dispatchIdentity; //eslint-disable-line + return obj; + }, actions)); + } + + createAction(name, implementation, obj) { + return makeAction(this, 'global', name, implementation, obj); + } + + createActions(ActionsClass, exportObj = {}, ...argsForConstructor) { + const actions = {}; + const key = utils.uid( + this._actionsRegistry, + ActionsClass.displayName || ActionsClass.name || 'Unknown', + ); + + if (fn.isFunction(ActionsClass)) { + fn.assign(actions, utils.getPrototypeChain(ActionsClass)); + class ActionsGenerator extends ActionsClass { + generateActions(...actionNames) { //eslint-disable-line + actionNames.forEach((actionName) => { + actions[actionName] = utils.dispatchIdentity; + }); + } + } + fn.assign(actions, new ActionsGenerator(...argsForConstructor)); + } else { + fn.assign(actions, ActionsClass); + } + + this.actions[key] = this.actions[key] || {}; + + fn.eachObject((actionName, action) => { + if (!fn.isFunction(action)) { + exportObj[actionName] = action; //eslint-disable-line + return; + } + + // create the action + exportObj[actionName] = makeAction( //eslint-disable-line + this, + key, + actionName, + action, + exportObj, + ); + + // generate a constant + const constant = utils.formatAsConstant(actionName); + exportObj[constant] = exportObj[actionName].id; //eslint-disable-line + }, [actions]); + + return exportObj; + } + + takeSnapshot(...storeNames) { + const state = StateFunctions.snapshot(this, storeNames); + fn.assign(this._lastSnapshot, state); + return this.serialize(state); + } + + rollback() { + StateFunctions.setAppState( + this, + this.serialize(this._lastSnapshot), + (storeInst) => { + storeInst.lifecycle('rollback'); + storeInst.emitChange(); + }, + ); + } + + recycle(...storeNames) { + const initialSnapshot = storeNames.length + ? StateFunctions.filterSnapshots( + this, + this._initSnapshot, + storeNames, + ) + : this._initSnapshot; + + StateFunctions.setAppState( + this, + this.serialize(initialSnapshot), + (storeInst) => { + storeInst.lifecycle('init'); + storeInst.emitChange(); + }, + ); + } + + flush() { + const state = this.serialize(StateFunctions.snapshot(this)); + this.recycle(); + return state; + } + + bootstrap(data) { + StateFunctions.setAppState(this, data, (storeInst, state) => { + storeInst.lifecycle('bootstrap', state); + storeInst.emitChange(); + }); + } + + prepare(storeInst, payload) { + const data = {}; + if (!storeInst.displayName) { + throw new ReferenceError('Store provided does not have a name'); } + data[storeInst.displayName] = payload; + return this.serialize(data); + } + + // Instance type methods for injecting alt into your application as context - generateActions(...actionNames) { - actionNames.forEach((actionName) => { - actions[actionName] = utils.dispatchIdentity - }) + addActions(name, ActionsClass, ...args) { + this.actions[name] = Array.isArray(ActionsClass) + ? this.generateActions.apply(this, ActionsClass) //eslint-disable-line + : this.createActions(ActionsClass, ...args); + } + + addStore(name, StoreModel, ...args) { + this.createStore(StoreModel, name, ...args); + } + + getActions(name) { + return this.actions[name]; + } + + getStore(name) { + return this.stores[name]; + } + + static debug(name, alt, win) { + const key = 'alt.js.org'; + let context = win; + if (!context && typeof window !== 'undefined') { + context = window; } - } - - fn.assign(actions, new ActionsGenerator(...argsForConstructor)) - } else { - fn.assign(actions, ActionsClass) - } - - this.actions[key] = this.actions[key] || {} - - fn.eachObject((actionName, action) => { - if (!fn.isFunction(action)) { - exportObj[actionName] = action - return - } - - // create the action - exportObj[actionName] = makeAction( - this, - key, - actionName, - action, - exportObj - ) - - // generate a constant - const constant = utils.formatAsConstant(actionName) - exportObj[constant] = exportObj[actionName].id - }, [actions]) - - return exportObj - } - - takeSnapshot(...storeNames) { - const state = StateFunctions.snapshot(this, storeNames) - fn.assign(this._lastSnapshot, state) - return this.serialize(state) - } - - rollback() { - StateFunctions.setAppState( - this, - this.serialize(this._lastSnapshot), - storeInst => { - storeInst.lifecycle('rollback') - storeInst.emitChange() - } - ) - } - - recycle(...storeNames) { - const initialSnapshot = storeNames.length - ? StateFunctions.filterSnapshots( - this, - this._initSnapshot, - storeNames - ) - : this._initSnapshot - - StateFunctions.setAppState( - this, - this.serialize(initialSnapshot), - (storeInst) => { - storeInst.lifecycle('init') - storeInst.emitChange() - } - ) - } - - flush() { - const state = this.serialize(StateFunctions.snapshot(this)) - this.recycle() - return state - } - - bootstrap(data) { - StateFunctions.setAppState(this, data, (storeInst, state) => { - storeInst.lifecycle('bootstrap', state) - storeInst.emitChange() - }) - } - - prepare(storeInst, payload) { - const data = {} - if (!storeInst.displayName) { - throw new ReferenceError('Store provided does not have a name') - } - data[storeInst.displayName] = payload - return this.serialize(data) - } - - // Instance type methods for injecting alt into your application as context - - addActions(name, ActionsClass, ...args) { - this.actions[name] = Array.isArray(ActionsClass) - ? this.generateActions.apply(this, ActionsClass) - : this.createActions(ActionsClass, ...args) - } - - addStore(name, StoreModel, ...args) { - this.createStore(StoreModel, name, ...args) - } - - getActions(name) { - return this.actions[name] - } - - getStore(name) { - return this.stores[name] - } - - static debug(name, alt, win) { - const key = 'alt.js.org' - let context = win - if (!context && typeof window !== 'undefined') { - context = window - } - if (typeof context !== 'undefined') { - context[key] = context[key] || [] - context[key].push({ name, alt }) - } - return alt - } + if (typeof context !== 'undefined') { + context[key] = context[key] || []; + context[key].push({ name, alt }); + } + return alt; + } } -export default Alt +export default Alt; diff --git a/src/store/AltStore.js b/src/store/AltStore.js index 66ee738f..e7c443df 100644 --- a/src/store/AltStore.js +++ b/src/store/AltStore.js @@ -1,112 +1,111 @@ -import * as fn from '../functions' -import transmitter from 'transmitter' +import transmitter from 'transmitter'; +import * as fn from '../functions'; class AltStore { - constructor(alt, model, state, StoreModel) { - const lifecycleEvents = model.lifecycleEvents - this.transmitter = transmitter() - this.lifecycle = (event, x) => { - if (lifecycleEvents[event]) lifecycleEvents[event].publish(x) + constructor(alt, model, state, StoreModel) { + const lifecycleEvents = model.lifecycleEvents; + this.transmitter = transmitter(); + this.lifecycle = (event, x) => { + if (lifecycleEvents[event]) lifecycleEvents[event].publish(x); + }; + this.state = state; + + this.alt = alt; + this.preventDefault = false; + this.displayName = model.displayName; + this.boundListeners = model.boundListeners; + this.StoreModel = StoreModel; + this.reduce = model.reduce || ((x) => { return x; }); + this.subscriptions = []; + + const output = model.output || ((x) => { return x; }); + + this.emitChange = () => { return this.transmitter.publish(output(this.state)); }; + + const handleDispatch = (f, payload) => { + try { + return f(); + } catch (e) { + if (model.handlesOwnErrors) { + this.lifecycle('error', { + error: e, + payload, + state: this.state, + }); + return false; + } + + throw e; + } + }; + + fn.assign(this, model.publicMethods); + + // Register dispatcher + this.dispatchToken = alt.dispatcher.register((payload) => { + this.preventDefault = false; + + this.lifecycle('beforeEach', { + payload, + state: this.state, + }); + + const actionHandlers = model.actionListeners[payload.action]; + + if (actionHandlers || model.otherwise) { + let result; + + if (actionHandlers) { + result = handleDispatch(() => { + return actionHandlers.filter(Boolean).every((handler) => { + return handler.call(model, payload.data, payload.action) !== false; + }); + }, payload); + } else { + result = handleDispatch(() => { + model.otherwise(payload.data, payload.action); + }, payload); + } + if (result !== false && !this.preventDefault) this.emitChange(); + } + + if (model.reduce) { + handleDispatch(() => { + const value = model.reduce(this.state, payload); + if (value !== undefined) this.state = value; + }, payload); + if (!this.preventDefault) this.emitChange(); + } + + this.lifecycle('afterEach', { + payload, + state: this.state, + }); + }); + + this.lifecycle('init'); } - this.state = state - - this.alt = alt - this.preventDefault = false - this.displayName = model.displayName - this.boundListeners = model.boundListeners - this.StoreModel = StoreModel - this.reduce = model.reduce || (x => x) - this.subscriptions = [] - - const output = model.output || (x => x) - - this.emitChange = () => this.transmitter.publish(output(this.state)) - - const handleDispatch = (f, payload) => { - try { - return f() - } catch (e) { - if (model.handlesOwnErrors) { - this.lifecycle('error', { - error: e, - payload, - state: this.state, - }) - return false - } - - throw e - } + + listen(cb) { + if (!fn.isFunction(cb)) throw new TypeError('listen expects a function'); + const { dispose } = this.transmitter.subscribe(cb); + this.subscriptions.push({ cb, dispose }); + return () => { + this.lifecycle('unlisten'); + dispose(); + }; + } + + unlisten(cb) { + this.lifecycle('unlisten'); + this.subscriptions + .filter((subscription) => { return subscription.cb === cb; }) + .forEach((subscription) => { return subscription.dispose(); }); } - fn.assign(this, model.publicMethods) - - // Register dispatcher - this.dispatchToken = alt.dispatcher.register((payload) => { - this.preventDefault = false - - this.lifecycle('beforeEach', { - payload, - state: this.state, - }) - - const actionHandlers = model.actionListeners[payload.action] - - if (actionHandlers || model.otherwise) { - let result - - if (actionHandlers) { - result = handleDispatch(() => { - return actionHandlers.filter(Boolean).every((handler) => { - return handler.call(model, payload.data, payload.action) !== false - }) - }, payload) - } else { - result = handleDispatch(() => { - return model.otherwise(payload.data, payload.action) - }, payload) - } - - if (result !== false && !this.preventDefault) this.emitChange() - } - - if (model.reduce) { - handleDispatch(() => { - const value = model.reduce(this.state, payload) - if (value !== undefined) this.state = value - }, payload) - if (!this.preventDefault) this.emitChange() - } - - this.lifecycle('afterEach', { - payload, - state: this.state, - }) - }) - - this.lifecycle('init') - } - - listen(cb) { - if (!fn.isFunction(cb)) throw new TypeError('listen expects a function') - const { dispose } = this.transmitter.subscribe(cb) - this.subscriptions.push({ cb, dispose }) - return () => { - this.lifecycle('unlisten') - dispose() + getState() { + return this.StoreModel.config.getState.call(this, this.state); } - } - - unlisten(cb) { - this.lifecycle('unlisten') - this.subscriptions - .filter(subscription => subscription.cb === cb) - .forEach(subscription => subscription.dispose()) - } - - getState() { - return this.StoreModel.config.getState.call(this, this.state) - } } -export default AltStore +export default AltStore; diff --git a/src/store/StoreMixin.js b/src/store/StoreMixin.js index 9e88bb77..b0b2558d 100644 --- a/src/store/StoreMixin.js +++ b/src/store/StoreMixin.js @@ -1,170 +1,165 @@ -import transmitter from 'transmitter' -import * as fn from '../functions' +import transmitter from 'transmitter'; +import * as fn from '../functions'; const StoreMixin = { - waitFor(...sources) { - if (!sources.length) { - throw new ReferenceError('Dispatch tokens not provided') - } - - let sourcesArray = sources - if (sources.length === 1) { - sourcesArray = Array.isArray(sources[0]) ? sources[0] : sources - } - - const tokens = sourcesArray.map((source) => { - return source.dispatchToken || source - }) - - this.dispatcher.waitFor(tokens) - }, - - exportAsync(asyncMethods) { - this.registerAsync(asyncMethods) - }, - - registerAsync(asyncDef) { - let loadCounter = 0 - - const asyncMethods = fn.isFunction(asyncDef) - ? asyncDef(this.alt) - : asyncDef - - const toExport = Object.keys(asyncMethods).reduce((publicMethods, methodName) => { - const desc = asyncMethods[methodName] - const spec = fn.isFunction(desc) ? desc(this) : desc - - const validHandlers = ['success', 'error', 'loading'] - validHandlers.forEach((handler) => { - if (spec[handler] && !spec[handler].id) { - throw new Error(`${handler} handler must be an action function`) + waitFor(...sources) { + if (!sources.length) { + throw new ReferenceError('Dispatch tokens not provided'); } - }) - - publicMethods[methodName] = (...args) => { - const state = this.getInstance().getState() - const value = spec.local && spec.local(state, ...args) - const shouldFetch = spec.shouldFetch - ? spec.shouldFetch(state, ...args) - /*eslint-disable*/ + + let sourcesArray = sources; + if (sources.length === 1) { + sourcesArray = Array.isArray(sources[0]) ? sources[0] : sources; + } + + const tokens = sourcesArray.map((source) => { return source.dispatchToken || source; }); + + this.dispatcher.waitFor(tokens); + }, + + exportAsync(asyncMethods) { + this.registerAsync(asyncMethods); + }, + + registerAsync(asyncDef) { + let loadCounter = 0; + + const asyncMethods = fn.isFunction(asyncDef) + ? asyncDef(this.alt) + : asyncDef; + + const toExport = Object.keys(asyncMethods).reduce((publicMethods, methodName) => { + const desc = asyncMethods[methodName]; + const spec = fn.isFunction(desc) ? desc(this) : desc; + + const validHandlers = ['success', 'error', 'loading']; + validHandlers.forEach((handler) => { + if (spec[handler] && !spec[handler].id) { + throw new Error(`${handler} handler must be an action function`); + } + }); + + publicMethods[methodName] = (...args) => { //eslint-disable-line + const state = this.getInstance().getState(); + const value = spec.local && spec.local(state, ...args); + const shouldFetch = spec.shouldFetch + ? spec.shouldFetch(state, ...args) + /*eslint-disable*/ : value == null - /*eslint-enable*/ - const intercept = spec.interceptResponse || (x => x) - - const makeActionHandler = (action, isError) => { - return (x) => { - const fire = () => { - loadCounter -= 1 - action(intercept(x, action, args)) - if (isError) throw x - return x + /* eslint-enable */ + const intercept = spec.interceptResponse || ((x) => { return x; }); + const makeActionHandler = (action, isError) => { + return (x) => { + const fire = () => { + loadCounter -= 1; + action(intercept(x, action, args)); + if (isError) throw x; + return x; + }; + return this.alt.trapAsync ? () => { return fire(); } : fire(); + }; + }; + + // if we don't have it in cache then fetch it + if (shouldFetch) { + loadCounter += 1; + /* istanbul ignore else */ + if (spec.loading) spec.loading(intercept(null, spec.loading, args)); + return spec.remote(state, ...args).then( + makeActionHandler(spec.success), + makeActionHandler(spec.error, 1), + ); + } + + // otherwise emit the change now + this.emitChange(); + return value; + }; + + return publicMethods; + }, {}); + + this.exportPublicMethods(toExport); + this.exportPublicMethods({ + isLoading: () => { return loadCounter > 0; }, + }); + }, + + exportPublicMethods(methods) { + fn.eachObject((methodName, value) => { + if (!fn.isFunction(value)) { + throw new TypeError('exportPublicMethods expects a function'); } - return this.alt.trapAsync ? () => fire() : fire() - } - } - // if we don't have it in cache then fetch it - if (shouldFetch) { - loadCounter += 1 - /* istanbul ignore else */ - if (spec.loading) spec.loading(intercept(null, spec.loading, args)) - return spec.remote(state, ...args).then( - makeActionHandler(spec.success), - makeActionHandler(spec.error, 1) - ) + this.publicMethods[methodName] = value; + }, [methods]); + }, + + emitChange() { + this.getInstance().emitChange(); + }, + + on(lifecycleEvent, handler) { + if (lifecycleEvent === 'error') this.handlesOwnErrors = true; + const bus = this.lifecycleEvents[lifecycleEvent] || transmitter(); + this.lifecycleEvents[lifecycleEvent] = bus; + return bus.subscribe(handler.bind(this)); + }, + + bindAction(symbol, handler) { + if (!symbol) { + throw new ReferenceError('Invalid action reference passed in'); + } + if (!fn.isFunction(handler)) { + throw new TypeError('bindAction expects a function'); } - // otherwise emit the change now - this.emitChange() - return value - } - - return publicMethods - }, {}) - - this.exportPublicMethods(toExport) - this.exportPublicMethods({ - isLoading: () => loadCounter > 0, - }) - }, - - exportPublicMethods(methods) { - fn.eachObject((methodName, value) => { - if (!fn.isFunction(value)) { - throw new TypeError('exportPublicMethods expects a function') - } - - this.publicMethods[methodName] = value - }, [methods]) - }, - - emitChange() { - this.getInstance().emitChange() - }, - - on(lifecycleEvent, handler) { - if (lifecycleEvent === 'error') this.handlesOwnErrors = true - const bus = this.lifecycleEvents[lifecycleEvent] || transmitter() - this.lifecycleEvents[lifecycleEvent] = bus - return bus.subscribe(handler.bind(this)) - }, - - bindAction(symbol, handler) { - if (!symbol) { - throw new ReferenceError('Invalid action reference passed in') - } - if (!fn.isFunction(handler)) { - throw new TypeError('bindAction expects a function') - } - - // You can pass in the constant or the function itself - const key = symbol.id ? symbol.id : symbol - this.actionListeners[key] = this.actionListeners[key] || [] - this.actionListeners[key].push(handler.bind(this)) - this.boundListeners.push(key) - }, - - bindActions(actions) { - fn.eachObject((action, symbol) => { - const matchFirstCharacter = /./ - const assumedEventHandler = action.replace(matchFirstCharacter, (x) => { - return `on${x[0].toUpperCase()}` - }) - - if (this[action] && this[assumedEventHandler]) { - // If you have both action and onAction - throw new ReferenceError( - `You have multiple action handlers bound to an action: ` + - `${action} and ${assumedEventHandler}` - ) - } - - const handler = this[action] || this[assumedEventHandler] - if (handler) { - this.bindAction(symbol, handler) - } - }, [actions]) - }, - - bindListeners(obj) { - fn.eachObject((methodName, symbol) => { - const listener = this[methodName] - - if (!listener) { - throw new ReferenceError( - `${methodName} defined but does not exist in ${this.displayName}` - ) - } - - if (Array.isArray(symbol)) { - symbol.forEach((action) => { - this.bindAction(action, listener) - }) - } else { - this.bindAction(symbol, listener) - } - }, [obj]) - }, -} - -export default StoreMixin + // You can pass in the constant or the function itself + const key = symbol.id ? symbol.id : symbol; + this.actionListeners[key] = this.actionListeners[key] || []; + this.actionListeners[key].push(handler.bind(this)); + this.boundListeners.push(key); + }, + + bindActions(actions) { + fn.eachObject((action, symbol) => { + const matchFirstCharacter = /./; + const assumedEventHandler = action.replace(matchFirstCharacter, (x) => { return `on${x[0].toUpperCase()}`; }); + + if (this[action] && this[assumedEventHandler]) { + // If you have both action and onAction + throw new ReferenceError( + 'You have multiple action handlers bound to an action: ' + + `${action} and ${assumedEventHandler}`, + ); + } + + const handler = this[action] || this[assumedEventHandler]; + if (handler) { + this.bindAction(symbol, handler); + } + }, [actions]); + }, + + bindListeners(obj) { + fn.eachObject((methodName, symbol) => { + const listener = this[methodName]; + + if (!listener) { + throw new ReferenceError( + `${methodName} defined but does not exist in ${this.displayName}`, + ); + } + + if (Array.isArray(symbol)) { + symbol.forEach((action) => { + this.bindAction(action, listener); + }); + } else { + this.bindAction(symbol, listener); + } + }, [obj]); + }, +}; + +export default StoreMixin; diff --git a/src/store/index.js b/src/store/index.js index 43c90f58..ca84ce07 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1,165 +1,160 @@ -import * as utils from '../utils/AltUtils' -import * as fn from '../functions' -import AltStore from './AltStore' -import StoreMixin from './StoreMixin' +import * as utils from '../utils/AltUtils'; +import * as fn from '../functions'; +import AltStore from './AltStore'; +import StoreMixin from './StoreMixin'; function doSetState(store, storeInstance, state) { - if (!state) { - return - } + if (!state) { + return; + } - const { config } = storeInstance.StoreModel + const { config } = storeInstance.StoreModel; - const nextState = fn.isFunction(state) - ? state(storeInstance.state) - : state + const nextState = fn.isFunction(state) + ? state(storeInstance.state) + : state; - storeInstance.state = config.setState.call( - store, - storeInstance.state, - nextState - ) + storeInstance.state = config.setState.call( //eslint-disable-line + store, + storeInstance.state, + nextState, + ); - if (!store.alt.dispatcher.isDispatching()) { - store.emitChange() - } + if (!store.alt.dispatcher.isDispatching()) { + store.emitChange(); + } } function createPrototype(proto, alt, key, extras) { - return fn.assign(proto, StoreMixin, { - displayName: key, - alt: alt, - dispatcher: alt.dispatcher, - preventDefault() { - this.getInstance().preventDefault = true - }, - boundListeners: [], - lifecycleEvents: {}, - actionListeners: {}, - publicMethods: {}, - handlesOwnErrors: false, - }, extras) + return fn.assign(proto, StoreMixin, { + displayName: key, + alt, + dispatcher: alt.dispatcher, + preventDefault() { + this.getInstance().preventDefault = true; + }, + boundListeners: [], + lifecycleEvents: {}, + actionListeners: {}, + publicMethods: {}, + handlesOwnErrors: false, + }, extras); } export function createStoreConfig(globalConfig, StoreModel) { - StoreModel.config = fn.assign({ - getState(state) { - if (Array.isArray(state)) { - return state.slice() - } else if (fn.isMutableObject(state)) { - return fn.assign({}, state) - } - - return state - }, - setState(currentState, nextState) { - if (fn.isMutableObject(nextState)) { - return fn.assign(currentState, nextState) - } - return nextState - }, - }, globalConfig, StoreModel.config) + StoreModel.config = fn.assign({ //eslint-disable-line + getState(state) { + if (Array.isArray(state)) { + return state.slice(); + } else if (fn.isMutableObject(state)) { + return fn.assign({}, state); + } + return state; + }, + setState(currentState, nextState) { + if (fn.isMutableObject(nextState)) { + return fn.assign(currentState, nextState); + } + return nextState; + }, + }, globalConfig, StoreModel.config); } export function transformStore(transforms, StoreModel) { - return transforms.reduce((Store, transform) => transform(Store), StoreModel) + return transforms.reduce((Store, transform) => { return transform(Store); }, StoreModel); } export function createStoreFromObject(alt, StoreModel, key) { - let storeInstance - - const StoreProto = createPrototype({}, alt, key, fn.assign({ - getInstance() { - return storeInstance - }, - setState(nextState) { - doSetState(this, storeInstance, nextState) - }, - }, StoreModel)) - - // bind the store listeners - /* istanbul ignore else */ - if (StoreProto.bindListeners) { - StoreMixin.bindListeners.call( - StoreProto, - StoreProto.bindListeners, - ) - } - /* istanbul ignore else */ - if (StoreProto.observe) { - StoreMixin.bindListeners.call( - StoreProto, - StoreProto.observe(alt), - ) - } - - // bind the lifecycle events - /* istanbul ignore else */ - if (StoreProto.lifecycle) { - fn.eachObject((eventName, event) => { - StoreMixin.on.call(StoreProto, eventName, event) - }, [StoreProto.lifecycle]) - } - - // create the instance and fn.assign the public methods to the instance - storeInstance = fn.assign( - new AltStore( - alt, - StoreProto, - StoreProto.state !== undefined ? StoreProto.state : {}, - StoreModel - ), - StoreProto.publicMethods, - { - displayName: key, - config: StoreModel.config, + let storeInstance; + + const StoreProto = createPrototype({}, alt, key, fn.assign({ + getInstance() { + return storeInstance; + }, + setState(nextState) { + doSetState(this, storeInstance, nextState); + }, + }, StoreModel)); + + // bind the store listeners + /* istanbul ignore else */ + if (StoreProto.bindListeners) { + StoreMixin.bindListeners.call( + StoreProto, + StoreProto.bindListeners, + ); + } + /* istanbul ignore else */ + if (StoreProto.observe) { + StoreMixin.bindListeners.call( + StoreProto, + StoreProto.observe(alt), + ); + } + + // bind the lifecycle events + /* istanbul ignore else */ + if (StoreProto.lifecycle) { + fn.eachObject((eventName, event) => { + StoreMixin.on.call(StoreProto, eventName, event); + }, [StoreProto.lifecycle]); } - ) - return storeInstance + // create the instance and fn.assign the public methods to the instance + storeInstance = fn.assign( + new AltStore( + alt, + StoreProto, + StoreProto.state !== undefined ? StoreProto.state : {}, + StoreModel, + ), + StoreProto.publicMethods, + { + displayName: key, + config: StoreModel.config, + }, + ); + + return storeInstance; } export function createStoreFromClass(alt, StoreModel, key, ...argsForClass) { - let storeInstance - const { config } = StoreModel - - // Creating a class here so we don't overload the provided store's - // prototype with the mixin behaviour and I'm extending from StoreModel - // so we can inherit any extensions from the provided store. - class Store extends StoreModel { - constructor(...args) { - super(...args) - } - } - - createPrototype(Store.prototype, alt, key, { - type: 'AltStore', - getInstance() { - return storeInstance - }, - setState(nextState) { - doSetState(this, storeInstance, nextState) - }, - }) - - const store = new Store(...argsForClass) - - /* istanbul ignore next */ - if (config.bindListeners) store.bindListeners(config.bindListeners) + let storeInstance; + const { config } = StoreModel; + + // Creating a class here so we don't overload the provided store's + // prototype with the mixin behaviour and I'm extending from StoreModel + // so we can inherit any extensions from the provided store. + class Store extends StoreModel {} + + createPrototype(Store.prototype, alt, key, { + type: 'AltStore', + getInstance() { + return storeInstance; + }, + setState(nextState) { + doSetState(this, storeInstance, nextState); + }, + }); + + const store = new Store(...argsForClass); + + /* istanbul ignore next */ + if (config.bindListeners) store.bindListeners(config.bindListeners); /* istanbul ignore next */ - if (config.datasource) store.registerAsync(config.datasource) - - storeInstance = fn.assign( - new AltStore( - alt, - store, - store.state !== undefined ? store.state : store, - StoreModel - ), - utils.getInternalMethods(StoreModel), - config.publicMethods, - { displayName: key }, - ) - - return storeInstance + if (config.datasource) store.registerAsync(config.datasource); + + storeInstance = fn.assign( + new AltStore( + alt, + store, + store.state !== undefined ? store.state : store, + StoreModel, + ), + utils.getInternalMethods(StoreModel), + config.publicMethods, + { displayName: key }, + ); + + return storeInstance; } diff --git a/src/utils/AltUtils.js b/src/utils/AltUtils.js index d5f11fb7..4cee06e7 100644 --- a/src/utils/AltUtils.js +++ b/src/utils/AltUtils.js @@ -1,92 +1,91 @@ -import * as fn from '../functions' +import * as fn from '../functions'; /*eslint-disable*/ const builtIns = Object.getOwnPropertyNames(NoopClass) const builtInProto = Object.getOwnPropertyNames(NoopClass.prototype) -/*eslint-enable*/ +/* eslint-enable */ export function getInternalMethods(Obj, isProto) { - const excluded = isProto ? builtInProto : builtIns - const obj = isProto ? Obj.prototype : Obj - return Object.getOwnPropertyNames(obj).reduce((value, m) => { - if (excluded.indexOf(m) !== -1) { - return value - } - - value[m] = obj[m] - return value - }, {}) + const excluded = isProto ? builtInProto : builtIns; + const obj = isProto ? Obj.prototype : Obj; + return Object.getOwnPropertyNames(obj).reduce((value, m) => { + if (excluded.indexOf(m) !== -1) { + return value; + } + + value[m] = obj[m]; //eslint-disable-line + return value; + }, {}); } export function getPrototypeChain(Obj, methods = {}) { - return Obj === Function.prototype - ? methods - : getPrototypeChain( - Object.getPrototypeOf(Obj), - fn.assign(getInternalMethods(Obj, true), methods) - ) + return Obj === Function.prototype + ? methods + : getPrototypeChain( + Object.getPrototypeOf(Obj), + fn.assign(getInternalMethods(Obj, true), methods), + ); } export function warn(msg) { - /* istanbul ignore else */ - /*eslint-disable*/ + /* istanbul ignore else */ + /*eslint-disable*/ if (typeof console !== 'undefined') { console.warn(new ReferenceError(msg)) } - /*eslint-enable*/ + /* eslint-enable */ } export function uid(container, name) { - let count = 0 - let key = name - while (Object.hasOwnProperty.call(container, key)) { - key = name + String(++count) - } - return key + let count = 0; + let key = name; + while (Object.hasOwnProperty.call(container, key)) { + count += 1; + key = name + String(count); + } + return key; } export function formatAsConstant(name) { - return name.replace(/[a-z]([A-Z])/g, (i) => { - return `${i[0]}_${i[1].toLowerCase()}` - }).toUpperCase() + return name.replace(/[a-z]([A-Z])/g, (i) => { return `${i[0]}_${i[1].toLowerCase()}`; }).toUpperCase(); } export function dispatchIdentity(x, ...a) { - if (x === undefined) return null - return a.length ? [x].concat(a) : x + if (x === undefined) return null; + return a.length ? [x].concat(a) : x; } export function fsa(id, type, payload, details) { - return { - type, - payload, - meta: { - dispatchId: id, - ...details, - }, - - id, - action: type, - data: payload, - details, - } + return { + type, + payload, + meta: { + dispatchId: id, + ...details, + }, + + id, + action: type, + data: payload, + details, + }; } export function dispatch(id, actionObj, payload, alt) { - const data = actionObj.dispatch(payload) - if (data === undefined) return null + const data = actionObj.dispatch(payload); + if (data === undefined) return null; - const type = actionObj.id - const namespace = type - const name = type - const details = { id: type, namespace, name } + const type = actionObj.id; + const namespace = type; + const name = type; + const details = { id: type, namespace, name }; - const dispatchLater = x => alt.dispatch(type, x, details) + const dispatchLater = (x) => { return alt.dispatch(type, x, details); }; - if (fn.isFunction(data)) return data(dispatchLater, alt) + if (fn.isFunction(data)) return data(dispatchLater, alt); // XXX standardize this - return alt.dispatcher.dispatch(fsa(id, type, data, details)) + return alt.dispatcher.dispatch(fsa(id, type, data, details)); } /* istanbul ignore next */ diff --git a/src/utils/StateFunctions.js b/src/utils/StateFunctions.js index 8293c742..d1619b15 100644 --- a/src/utils/StateFunctions.js +++ b/src/utils/StateFunctions.js @@ -1,53 +1,53 @@ -import * as fn from '../functions' +import * as fn from '../functions'; export function setAppState(instance, data, onStore) { - const obj = instance.deserialize(data) - fn.eachObject((key, value) => { - const store = instance.stores[key] - if (store) { - const { config } = store.StoreModel - const state = store.state - if (config.onDeserialize) obj[key] = config.onDeserialize(value) || value - if (fn.isMutableObject(state)) { - fn.eachObject(k => delete state[k], [state]) - fn.assign(state, obj[key]) - } else { - store.state = obj[key] - } - onStore(store, store.state) - } - }, [obj]) + const obj = instance.deserialize(data); + fn.eachObject((key, value) => { + const store = instance.stores[key]; + if (store) { + const { config } = store.StoreModel; + const state = store.state; + if (config.onDeserialize) obj[key] = config.onDeserialize(value) || value; + if (fn.isMutableObject(state)) { + fn.eachObject((k) => { return delete state[k]; }, [state]); + fn.assign(state, obj[key]); + } else { + store.state = obj[key]; + } + onStore(store, store.state); + } + }, [obj]); } export function snapshot(instance, storeNames = []) { - const stores = storeNames.length ? storeNames : Object.keys(instance.stores) - return stores.reduce((obj, storeHandle) => { - const storeName = storeHandle.displayName || storeHandle - const store = instance.stores[storeName] - const { config } = store.StoreModel - store.lifecycle('snapshot') - const customSnapshot = config.onSerialize && - config.onSerialize(store.state) - obj[storeName] = customSnapshot ? customSnapshot : store.getState() - return obj - }, {}) + const stores = storeNames.length ? storeNames : Object.keys(instance.stores); + return stores.reduce((obj, storeHandle) => { + const storeName = storeHandle.displayName || storeHandle; + const store = instance.stores[storeName]; + const { config } = store.StoreModel; + store.lifecycle('snapshot'); + const customSnapshot = config.onSerialize && + config.onSerialize(store.state); + obj[storeName] = customSnapshot || store.getState(); //eslint-disable-line + return obj; + }, {}); } export function saveInitialSnapshot(instance, key) { - const state = instance.deserialize( - instance.serialize(instance.stores[key].state) - ) - instance._initSnapshot[key] = state - instance._lastSnapshot[key] = state + const state = instance.deserialize( + instance.serialize(instance.stores[key].state), + ); + instance._initSnapshot[key] = state; //eslint-disable-line + instance._lastSnapshot[key] = state; //eslint-disable-line } export function filterSnapshots(instance, state, stores) { - return stores.reduce((obj, store) => { - const storeName = store.displayName || store - if (!state[storeName]) { - throw new ReferenceError(`${storeName} is not a valid store`) - } - obj[storeName] = state[storeName] - return obj - }, {}) + return stores.reduce((obj, store) => { + const storeName = store.displayName || store; + if (!state[storeName]) { + throw new ReferenceError(`${storeName} is not a valid store`); + } + obj[storeName] = state[storeName]; //eslint-disable-line + return obj; + }, {}); } diff --git a/test/index.js b/test/index.js index 1187ca2e..96ec8c7a 100644 --- a/test/index.js +++ b/test/index.js @@ -1,244 +1,243 @@ -import Alt from '../' -import { assert } from 'chai' -import sinon from 'sinon' +import { assert } from 'chai'; +import sinon from 'sinon'; +import Alt from '../'; -const alt = new Alt() +const alt = new Alt(); class MyActions { - constructor() { - this.generateActions( - 'callInternalMethod', - 'shortHandBinary', - 'getInstanceInside', - 'dontEmit', - 'moreActions2', - 'moreActions3', - 'resetRecycled', - 'asyncStoreAction', - 'updateAnotherVal' - ) - this.generateActions('anotherAction') - - this.actionOnThis = function (x) { - return x + constructor() { + this.generateActions( + 'callInternalMethod', + 'shortHandBinary', + 'getInstanceInside', + 'dontEmit', + 'moreActions2', + 'moreActions3', + 'resetRecycled', + 'asyncStoreAction', + 'updateAnotherVal', + ); + this.generateActions('anotherAction'); + + this.actionOnThis = (x) => { + return x; + }; } - } - updateName(name) { - return name - } - - justTestingInternalActions() { - return { - updateThree: this.updateThree, - updateName: this.updateName + updateName(name) { //eslint-disable-line + return name; } - } - moreActions() { - return (dispatch) => { - dispatch(1) - this.moreActions2.defer(2) - this.moreActions3.defer(3) + justTestingInternalActions() { + return { + updateThree: this.updateThree, + updateName: this.updateName, + }; } - } - updateTwo(a, b) { - return { a, b } - } + moreActions() { + return (dispatch) => { + dispatch(1); + this.moreActions2.defer(2); + this.moreActions3.defer(3); + }; + } - updateThree(a, b, c) { - return { a, b, c } - } + updateTwo(a, b) { + return { a, b }; + } + updateThree(a, b, c) { + return { a, b, c }; + } } -const myActions = {} -alt.createActions(MyActions, myActions) +const myActions = {}; +alt.createActions(MyActions, myActions); const objActions = alt.createActions({ - hello() { }, - world() { } -}) + hello() { }, + world() { }, +}); -const myShorthandActions = alt.generateActions('actionOne', 'actionTwo') +const myShorthandActions = alt.generateActions('actionOne', 'actionTwo'); class MyStore { - constructor() { - const myActionsInst = this.alt.getActions('myActions') - if (myActionsInst) { - this.bindAction(myActionsInst.updateName, this.onUpdateName) - } + constructor() { + const myActionsInst = this.alt.getActions('myActions'); + if (myActionsInst) { + this.bindAction(myActionsInst.updateName, this.onUpdateName); + } - this.bindAction(myActions.updateName, this.onUpdateName) - this.bindAction(myActions.CALL_INTERNAL_METHOD, this.doCallInternal) - this.bindAction(myActions.dontEmit, this.dontEmitEvent) - this.bindAction(myActions.asyncStoreAction, this.doStoreAsync) - this.name = 'first' - this.calledInternal = false - this.dontEmitEventCalled = false - this.async = false + this.bindAction(myActions.updateName, this.onUpdateName); + this.bindAction(myActions.CALL_INTERNAL_METHOD, this.doCallInternal); + this.bindAction(myActions.dontEmit, this.dontEmitEvent); + this.bindAction(myActions.asyncStoreAction, this.doStoreAsync); + this.name = 'first'; + this.calledInternal = false; + this.dontEmitEventCalled = false; + this.async = false; - this.exportPublicMethods({ - externalMethodNoStatic: this.externalMethodNoStatic - }) + this.exportPublicMethods({ + externalMethodNoStatic: this.externalMethodNoStatic, + }); - this._dispatcher = this.dispatcher - } + this._dispatcher = this.dispatcher; + } - doStoreAsync() { - setTimeout(() => { - this.async = true - this.getInstance().emitChange() - }) - return false - } + doStoreAsync() { + setTimeout(() => { + this.async = true; + this.getInstance().emitChange(); + }); + return false; + } - onUpdateName(name) { - this.name = name - } + onUpdateName(name) { + this.name = name; + } - doCallInternal() { - this.internalOnly() - } + doCallInternal() { + this.internalOnly(); + } - internalOnly() { - this.calledInternal = true - } + internalOnly() { + this.calledInternal = true; + } - dontEmitEvent() { - this.dontEmitEventCalled = true - return false - } + dontEmitEvent() { + this.dontEmitEventCalled = true; + return false; + } - static externalMethod() { - return true - } + static externalMethod() { + return true; + } - externalMethodNoStatic() { - return true - } + externalMethodNoStatic() { + return true; + } } -const myStore = alt.createStore(MyStore) +const myStore = alt.createStore(MyStore); class SecondStore { - constructor() { - this.foo = 'bar' - this.name = myStore.getState().name - this.instance = null + constructor() { + this.foo = 'bar'; + this.name = myStore.getState().name; + this.instance = null; - this.deferrals = 0 + this.deferrals = 0; - this.recycled = false + this.recycled = false; - this.bindActions(myActions) + this.bindActions(myActions); - this.exportPublicMethods({ - externalMethodNoStatic: this.externalMethodNoStatic, - concatFooWithNoStatic: this.concatFooWithNoStatic - }) + this.exportPublicMethods({ + externalMethodNoStatic: this.externalMethodNoStatic, + concatFooWithNoStatic: this.concatFooWithNoStatic, + }); - this.on('init', () => { - this.recycled = true - }) - } + this.on('init', () => { + this.recycled = true; + }); + } - onResetRecycled() { - this.recycled = false - } + onResetRecycled() { + this.recycled = false; + } - onUpdateTwo(x) { - this.foo = x.a + x.b - } + onUpdateTwo(x) { + this.foo = x.a + x.b; + } - updateThree(x) { - this.waitFor([myStore.dispatchToken]) - this.name = myStore.getState().name - this.foo = x.a + x.b + x.c - } + updateThree(x) { + this.waitFor([myStore.dispatchToken]); + this.name = myStore.getState().name; + this.foo = x.a + x.b + x.c; + } - shortHandBinary(arr) { - this.foo = arr - } + shortHandBinary(arr) { + this.foo = arr; + } - onUpdateName() { - this.waitFor(myStore.dispatchToken) - this.name = myStore.getState().name - } + onUpdateName() { + this.waitFor(myStore.dispatchToken); + this.name = myStore.getState().name; + } - onGetInstanceInside() { - this.instance = this.getInstance() - } + onGetInstanceInside() { + this.instance = this.getInstance(); + } - onMoreActions(x) { - this.deferrals = x - } + onMoreActions(x) { + this.deferrals = x; + } - onMoreActions2(x) { - this.deferrals = x - } + onMoreActions2(x) { + this.deferrals = x; + } - onMoreActions3(x) { - this.deferrals = x - } + onMoreActions3(x) { + this.deferrals = x; + } - static externalMethod() { - return this.getState().foo - } + static externalMethod() { + return this.getState().foo; + } - externalMethodNoStatic() { - return this.getState().foo - } + externalMethodNoStatic() { + return this.getState().foo; + } - static concatFooWith(x) { - return this.getState().foo + x - } + static concatFooWith(x) { + return this.getState().foo + x; + } - concatFooWithNoStatic(x) { - return this.getState().foo + x - } + concatFooWithNoStatic(x) { + return this.getState().foo + x; + } } -const secondStore = alt.createStore(SecondStore, 'AltSecondStore') +const secondStore = alt.createStore(SecondStore, 'AltSecondStore'); class LifeCycleStore { static config = { - onSerialize: (state) => { - state.serialized = true - return state - }, - onDeserialize: (data) => { - data.deserialized = true - } + onSerialize: (state) => { + state.serialized = true; //eslint-disable-line + return state; + }, + onDeserialize: (data) => { + data.deserialized = true; //eslint-disable-line + }, }; constructor() { - this.bootstrapped = false - this.init = false - this.rollback = false - this.snapshotted = false - this.serialized = false - this.deserialized = false - - this.bindListeners({ - test: myActions.updateName, - test2: [myActions.updateName, myActions.updateTwo], - test3: myActions.updateName - }) - - this.on('init', () => { - this.init = true - }) - this.on('bootstrap', () => { - this.bootstrapped = true - }) - this.on('snapshot', () => { - this.snapshotted = true - }) - this.on('rollback', () => { - this.rollback = true - }) + this.bootstrapped = false; + this.init = false; + this.rollback = false; + this.snapshotted = false; + this.serialized = false; + this.deserialized = false; + + this.bindListeners({ + test: myActions.updateName, + test2: [myActions.updateName, myActions.updateTwo], + test3: myActions.updateName, + }); + + this.on('init', () => { + this.init = true; + }); + this.on('bootstrap', () => { + this.bootstrapped = true; + }); + this.on('snapshot', () => { + this.snapshotted = true; + }); + this.on('rollback', () => { + this.rollback = true; + }); } test() { } @@ -246,1054 +245,1055 @@ class LifeCycleStore { test3() { } } -const lifecycleStore = alt.createStore(LifeCycleStore) +const lifecycleStore = alt.createStore(LifeCycleStore); class ThirdStore { - constructor() { - this.bindAction(myActions.updateName, this.onUpdateName) - } + constructor() { + this.bindAction(myActions.updateName, this.onUpdateName); + } - onUpdateName() { - this.waitFor(myStore, secondStore) // Not referencing dispatchToken! - this.name = secondStore.getState().name + '3' - } + onUpdateName() { + this.waitFor(myStore, secondStore); // Not referencing dispatchToken! + this.name = `${secondStore.getState().name}3`; + } } -const thirdStore = alt.createStore(ThirdStore) +const thirdStore = alt.createStore(ThirdStore); class Model { - constructor({x, y}) { - this.x = x - this.y = y - } + constructor({ x, y }) { + this.x = x; + this.y = y; + } - get sum() { - return this.x + this.y - } + get sum() { + return this.x + this.y; + } - get product() { - return this.x * this.y - } + get product() { + return this.x * this.y; + } - get data() { - return { - x: this.x, - y: this.y, - sum: this.sum, - product: this.product + get data() { + return { + x: this.x, + y: this.y, + sum: this.sum, + product: this.product, + }; } - } } class InterceptSnapshotStore { static config = { - onSerialize: (state) => { - return { - modelData: state.modelData.data, - anotherVal: state.anotherVal - } - }, - onDeserialize: (data) => { - const obj = { - modelData: new Model({x: data.modelData.x, y: data.modelData.y}), - anotherVal: data.anotherVal - } - return obj - } + onSerialize: (state) => { + return { + modelData: state.modelData.data, + anotherVal: state.anotherVal, + }; + }, + onDeserialize: (data) => { + const obj = { + modelData: new Model({ x: data.modelData.x, y: data.modelData.y }), + anotherVal: data.anotherVal, + }; + return obj; + }, }; constructor() { - this.bindAction(myActions.updateAnotherVal, this.onUpdateAnotherVal) + this.bindAction(myActions.updateAnotherVal, this.onUpdateAnotherVal); - this.modelData = new Model({x: 2, y: 3}) - this.anotherVal = 5 - this.privateVal = 10 + this.modelData = new Model({ x: 2, y: 3 }); + this.anotherVal = 5; + this.privateVal = 10; } onUpdateAnotherVal(newVal) { - this.anotherVal = newVal + this.anotherVal = newVal; } static getModelData() { - return this.getState().modelData.data + return this.getState().modelData.data; } } -const interceptSnapshotStore = alt.createStore(InterceptSnapshotStore) +const interceptSnapshotStore = alt.createStore(InterceptSnapshotStore); // Alt instances... class AltInstance extends Alt { - constructor() { - super() - this.addActions('myActions', MyActions, this) - this.addActions('fauxActions', ['one', 'two']) - this.addStore('myStore', MyStore, this) - } + constructor() { + super(); + this.addActions('myActions', MyActions, this); + this.addActions('fauxActions', ['one', 'two']); + this.addStore('myStore', MyStore, this); + } } -const altInstance = new AltInstance() +const altInstance = new AltInstance(); // Really confusing set of instances -const alt1 = new Alt() -const alt2 = new Alt() +const alt1 = new Alt(); +const alt2 = new Alt(); function NameActions() { } -NameActions.prototype.updateName = function (name) { - return name -} +NameActions.prototype.updateName = (name) => { + return name; +}; -const nameActions1 = alt1.createActions(NameActions) -const nameActions2 = alt2.createActions(NameActions) +const nameActions1 = alt1.createActions(NameActions); +const nameActions2 = alt2.createActions(NameActions); function NameStore() { - this.bindActions(nameActions1) - this.bindActions(nameActions2) - this.name = 'foo' + this.bindActions(nameActions1); + this.bindActions(nameActions2); + this.name = 'foo'; } -NameStore.prototype.onUpdateName = function (name) { - this.name = name -} +NameStore.prototype.onUpdateName = function onUpdateName(name) { + this.name = name; +}; -const nameStore1 = alt1.createStore(NameStore) -const nameStore2 = alt2.createStore(NameStore) +const nameStore1 = alt1.createStore(NameStore); +const nameStore2 = alt2.createStore(NameStore); -const consoleWarn = console.warn.bind(console) +const consoleWarn = console.warn.bind(console); /* istanbul ignore next */ const tests = { - beforeEach() { - alt.recycle() - altInstance.recycle() - alt1.recycle() - alt2.recycle() - console.warn = consoleWarn - }, - - 'alt instance'() { - assert.isFunction(alt.bootstrap, 'bootstrap function exists') - assert.isObject(alt.dispatcher, 'dispatcher exists') - assert.isFunction(alt.dispatcher.register, 'dispatcher function exists for listening to all events') - assert.isFunction(alt.takeSnapshot, 'snapshot function exists for saving app state') - assert.isFunction(alt.createActions, 'createActions function') - assert.isFunction(alt.createStore, 'createStore function') - assert.isObject(alt.stores.AltSecondStore, 'store exists in alt.stores') - }, - - 'store methods'() { - const storePrototype = Object.getPrototypeOf(myStore) - const assertMethods = ['constructor', 'listen', 'unlisten', 'getState'] - assert.deepEqual(Object.getOwnPropertyNames(storePrototype), assertMethods, 'methods exist for store') - assert.isUndefined(myStore.addListener, 'event emitter methods not present') - assert.isUndefined(myStore.removeListener, 'event emitter methods not present') - assert.isUndefined(myStore.emit, 'event emitter methods not present') - }, - - 'store external methods'() { - assert.isFunction(myStore.externalMethod, 'static methods are made available') - assert.isFunction(myStore.externalMethodNoStatic, 'methods via mixin are made available') - assert(myStore.externalMethod() === true, 'static methods return proper result') - assert(myStore.externalMethodNoStatic() === true, 'methods via mixin return proper result') - assert.isFunction(secondStore.externalMethod, 'static methods are made available') - assert.isFunction(secondStore.externalMethodNoStatic, 'static methods are made available') - assert(secondStore.externalMethod() === 'bar', 'static methods have `this` bound to the instance') - assert(secondStore.externalMethodNoStatic() === 'bar', 'static methods have `this` bound to the instance') - assert(secondStore.concatFooWith('baz') === 'barbaz', 'static methods may be called with params too') - assert(secondStore.concatFooWithNoStatic('baz') === 'barbaz', 'static methods may be called with params too') - }, - - 'getting state'() { - assert.isObject(myStore.getState()._dispatcher, 'the dispatcher is exposed internally') - - assert(lifecycleStore.getState().bootstrapped === false, 'bootstrap has not been called yet') - assert(lifecycleStore.getState().snapshotted === false, 'takeSnapshot has not been called yet') - assert(lifecycleStore.getState().serialized === false, 'takeSnapshot has not been called yet') - assert(lifecycleStore.getState().rollback === false, 'rollback has not been called') - assert(lifecycleStore.getState().init === true, 'init gets called when store initializes') - assert(lifecycleStore.getState().deserialized === true, 'deserialize has not been called yet') - }, - - 'snapshots and bootstrapping'() { - const initialSnapshot = alt.takeSnapshot() - assert(lifecycleStore.getState().snapshotted === true, 'takeSnapshot was called and the life cycle event was triggered') - - const bootstrapReturnValue = alt.bootstrap(initialSnapshot) - assert(bootstrapReturnValue === undefined, 'bootstrap returns nothing') - assert(lifecycleStore.getState().bootstrapped === true, 'bootstrap was called and the life cycle event was triggered') - assert(lifecycleStore.getState().snapshotted === true, 'snapshot was called and the life cycle event was triggered') - assert(lifecycleStore.getState().serialized === true, 'takeSnapshot has not been called yet') - assert(lifecycleStore.getState().deserialized === true, 'deserialize was called and the life cycle event was triggered') - }, - - 'existence of actions'() { - assert.isFunction(myActions.anotherAction, 'shorthand function created with createAction exists') - assert.isFunction(myActions.callInternalMethod, 'shorthand function created with createActions exists') - assert.isFunction(myActions.updateName, 'prototype defined actions exist') - assert.isFunction(myActions.updateTwo, 'prototype defined actions exist') - assert.isFunction(myActions.updateThree, 'prototype defined actions exist') - assert.isFunction(myShorthandActions.actionOne, 'action created with shorthand createActions exists') - assert.isFunction(myShorthandActions.actionTwo, 'other action created with shorthand createActions exists') - assert.isFunction(objActions.hello, 'actions created by obj are functions') - assert.isFunction(objActions.world, 'actions created by obj are functions') - assert.isFunction(myActions.actionOnThis, 'actions defined in `this` are functions') - }, - - 'existence of constants'() { - assert.isDefined(myActions.UPDATE_NAME, 'a constant is created for each action') - assert.isDefined(myActions.UPDATE_TWO, 'a constant is created for each action') - assert.isDefined(myActions.CALL_INTERNAL_METHOD, 'a constant is created for each action') - }, - - 'helper functions'() { - assert.isFunction(myActions.updateName.defer, 'actions have a defer method for async flow') - }, - - 'internal actions'() { - const internalActions = myActions.justTestingInternalActions() - assert.isFunction(internalActions.updateThree, 'actions (below) are available internally through this.actions') - assert.isFunction(internalActions.updateName, 'actions (above) are available internally through this.actions') - assert.isFunction(internalActions.updateName.defer, 'making sure internal actions has a defer as well') - assert.isFunction(internalActions.updateThree.defer, 'making sure internal actions has a defer as well') - - assert.isFunction(myStore.getState, 'the store has a getState method exposed') - assert.isUndefined(myStore.internalOnly, 'internal only method isnt available') - - assert(myStore.getState().name === 'first', 'store has been initialized properly') - assert(myStore.getState().calledInternal === false, 'store has been initialized properly') - }, - - 'calling actions'() { - const actionReturnType = myActions.updateName('bear') - assert(actionReturnType === 'bear', 'action returns what is dispatched') - - assert(myStore.getState().name === 'bear', 'action was called, state was updated properly') - assert(myStore.getState().calledInternal === false, 'internal method has not been called') - assert(secondStore.getState().name === 'bear', 'second store gets its value from myStore') - assert(thirdStore.getState().name === 'bear3', 'third store gets its value from secondStore, adds 3') - }, - - 'calling internal methods'() { - myActions.callInternalMethod() - assert(myStore.getState().calledInternal === true, 'internal method has been called successfully by an action') - }, - - 'snapshotting'() { - myActions.updateName('bear') - const snapshot = alt.takeSnapshot() - assert.isString(snapshot, 'a snapshot json is returned') - assert(JSON.parse(snapshot).MyStore.name === 'bear', 'the state is current') - assert.isObject(JSON.parse(snapshot).AltSecondStore, 'the custom identifier name works') - - myActions.updateName('blossom') - assert(myStore.getState().name === 'blossom', 'action was called, state was updated properly') - assert(JSON.parse(snapshot).MyStore.name === 'bear', 'the snapshot is not affected by action') - }, - - 'specifying stores to snapshot'() { - const snapshot = alt.takeSnapshot('MyStore', 'AltSecondStore') - assert.deepEqual(Object.keys(JSON.parse(snapshot)), ['MyStore', 'AltSecondStore'], 'the snapshot includes specified stores') - assert(Object.keys(JSON.parse(snapshot)).indexOf('LifeCycleStore') === -1, 'the snapshot does not include unspecified stores') - - const snapshot2 = alt.takeSnapshot(myStore, secondStore) - assert.deepEqual(Object.keys(JSON.parse(snapshot2)), ['MyStore', 'AltSecondStore'], 'the snapshot includes specified stores') - assert(Object.keys(JSON.parse(snapshot2)).indexOf('LifeCycleStore') === -1, 'the snapshot does not include unspecified stores') - }, - - 'serializing/deserializing snapshot/bootstrap data'(){ - myActions.updateAnotherVal(11) - const snapshot = alt.takeSnapshot() - const expectedSerializedData = { - modelData: { - x: 2, - y: 3, - sum: 5, - product: 6 - }, - anotherVal: 11 - } - // serializes snapshot data correctly - assert.deepEqual(JSON.parse(snapshot).InterceptSnapshotStore, expectedSerializedData, 'interceptSnapshotStore was serialized correctly') - alt.rollback() - // deserializes data correctly - assert.deepEqual(interceptSnapshotStore.getModelData(), expectedSerializedData.modelData) - }, - - 'mutation'() { - const state = myStore.getState() - state.name = 'foobar' - assert(state.name === 'foobar', 'mutated returned state') - assert(myStore.getState().name === 'first', 'store state was not mutated') - }, - - 'rolling back'() { - const rollbackValue = alt.rollback() - assert(rollbackValue === undefined, 'rollback returns nothing') - - assert(myStore.getState().name === 'first', 'state has been rolledback to last snapshot') - assert(lifecycleStore.getState().rollback === true, 'rollback lifecycle method was called') - - myActions.updateName('blossom') - // check that subsequent snapshots overwrite the LAST_SNAPSHOT such that they can be rolled back to - alt.takeSnapshot() - alt.rollback() - assert(myStore.getState().name === 'blossom', 'rolled back to second snapshot') - }, - - 'store listening'() { - const mooseChecker = (x) => { - assert(x.name === 'moose', 'listener for store works') - assert(myStore.getState().name === 'moose', 'new store state present') - } - const dispose = myStore.listen(mooseChecker) - myActions.updateName('moose') + beforeEach() { + alt.recycle(); + altInstance.recycle(); + alt1.recycle(); + alt2.recycle(); + console.warn = consoleWarn; //eslint-disable-line + }, - assert(myStore.getState().name === 'moose', 'new store state present') + 'alt instance': () => { + assert.isFunction(alt.bootstrap, 'bootstrap function exists'); + assert.isObject(alt.dispatcher, 'dispatcher exists'); + assert.isFunction(alt.dispatcher.register, 'dispatcher function exists for listening to all events'); + assert.isFunction(alt.takeSnapshot, 'snapshot function exists for saving app state'); + assert.isFunction(alt.createActions, 'createActions function'); + assert.isFunction(alt.createStore, 'createStore function'); + assert.isObject(alt.stores.AltSecondStore, 'store exists in alt.stores'); + }, - dispose() - myActions.updateName('badger') + 'store methods': () => { + const storePrototype = Object.getPrototypeOf(myStore); + const assertMethods = ['constructor', 'listen', 'unlisten', 'getState']; + assert.deepEqual(Object.getOwnPropertyNames(storePrototype), assertMethods, 'methods exist for store'); + assert.isUndefined(myStore.addListener, 'event emitter methods not present'); + assert.isUndefined(myStore.removeListener, 'event emitter methods not present'); + assert.isUndefined(myStore.emit, 'event emitter methods not present'); + }, - assert(myStore.getState().name === 'badger', 'new store state present') - }, + 'store external methods': () => { + assert.isFunction(myStore.externalMethod, 'static methods are made available'); + assert.isFunction(myStore.externalMethodNoStatic, 'methods via mixin are made available'); + assert(myStore.externalMethod() === true, 'static methods return proper result'); + assert(myStore.externalMethodNoStatic() === true, 'methods via mixin return proper result'); + assert.isFunction(secondStore.externalMethod, 'static methods are made available'); + assert.isFunction(secondStore.externalMethodNoStatic, 'static methods are made available'); + assert(secondStore.externalMethod() === 'bar', 'static methods have `this` bound to the instance'); + assert(secondStore.externalMethodNoStatic() === 'bar', 'static methods have `this` bound to the instance'); + assert(secondStore.concatFooWith('baz') === 'barbaz', 'static methods may be called with params too'); + assert(secondStore.concatFooWithNoStatic('baz') === 'barbaz', 'static methods may be called with params too'); + }, - 'unlistening'() { - assert(myStore.getState().name !== 'moose', 'state has not been updated') + 'getting state': () => { + assert.isObject(myStore.getState()._dispatcher, 'the dispatcher is exposed internally'); - const mooseChecker = sinon.spy() - const unlisten = myStore.listen(mooseChecker) - myActions.updateName('moose') + assert(lifecycleStore.getState().bootstrapped === false, 'bootstrap has not been called yet'); + assert(lifecycleStore.getState().snapshotted === false, 'takeSnapshot has not been called yet'); + assert(lifecycleStore.getState().serialized === false, 'takeSnapshot has not been called yet'); + assert(lifecycleStore.getState().rollback === false, 'rollback has not been called'); + assert(lifecycleStore.getState().init === true, 'init gets called when store initializes'); + assert(lifecycleStore.getState().deserialized === true, 'deserialize has not been called yet'); + }, - assert(myStore.getState().name === 'moose', 'new store state present') + 'snapshots and bootstrapping': () => { + const initialSnapshot = alt.takeSnapshot(); + assert(lifecycleStore.getState().snapshotted === true, 'takeSnapshot was called and the life cycle event was triggered'); - unlisten() + const bootstrapReturnValue = alt.bootstrap(initialSnapshot); + assert(bootstrapReturnValue === undefined, 'bootstrap returns nothing'); + assert(lifecycleStore.getState().bootstrapped === true, 'bootstrap was called and the life cycle event was triggered'); + assert(lifecycleStore.getState().snapshotted === true, 'snapshot was called and the life cycle event was triggered'); + assert(lifecycleStore.getState().serialized === true, 'takeSnapshot has not been called yet'); + assert(lifecycleStore.getState().deserialized === true, 'deserialize was called and the life cycle event was triggered'); + }, - myActions.updateName('badger') + 'existence of actions': () => { + assert.isFunction(myActions.anotherAction, 'shorthand function created with createAction exists'); + assert.isFunction(myActions.callInternalMethod, 'shorthand function created with createActions exists'); + assert.isFunction(myActions.updateName, 'prototype defined actions exist'); + assert.isFunction(myActions.updateTwo, 'prototype defined actions exist'); + assert.isFunction(myActions.updateThree, 'prototype defined actions exist'); + assert.isFunction(myShorthandActions.actionOne, 'action created with shorthand createActions exists'); + assert.isFunction(myShorthandActions.actionTwo, 'other action created with shorthand createActions exists'); + assert.isFunction(objActions.hello, 'actions created by obj are functions'); + assert.isFunction(objActions.world, 'actions created by obj are functions'); + assert.isFunction(myActions.actionOnThis, 'actions defined in `this` are functions'); + }, - assert(myStore.getState().name === 'badger', 'new store state present') - assert.ok(mooseChecker.calledOnce) - }, + 'existence of constants': () => { + assert.isDefined(myActions.UPDATE_NAME, 'a constant is created for each action'); + assert.isDefined(myActions.UPDATE_TWO, 'a constant is created for each action'); + assert.isDefined(myActions.CALL_INTERNAL_METHOD, 'a constant is created for each action'); + }, - 'unlisten lifecycle hook'() { - const unlistener = sinon.spy() - class XStore { - constructor() { - this.on('unlisten', unlistener) - } - } - const store = alt.createStore(XStore) - - // unlisten directly - store.listen(function () { })() - - assert.ok(unlistener.calledOnce, 'unlisten lifecycle hook called') - }, - - 'bootstrapping'() { - alt.bootstrap('{"MyStore":{"name":"bee"}}') - assert(myStore.getState().name === 'bee', 'I can bootstrap many times') - - alt.bootstrap('{}') - - alt.bootstrap('{"MyStore":{"name":"monkey"}}') - assert(myStore.getState().name === 'monkey', 'I can bootstrap many times') - }, - - 'variadic actions'(done) { - myActions.updateTwo(4, 2) - assert(secondStore.getState().foo === 6, 'im able to pass two params into an action') - - myActions.updateThree(4, 2, 1) - assert(secondStore.getState().foo === 7, 'the store method updateThree works') - - myActions.shortHandBinary(1, 0) - assert(Array.isArray(secondStore.getState().foo) === true, 'shorthand for multiple elements pass through goes as array') - assert(secondStore.getState().foo[0] === 1, 'shorthand for multiple elements pass through goes as array') - assert(secondStore.getState().foo[1] === 0, 'shorthand for multiple elements pass through goes as array') - - - myActions.shortHandBinary.defer(2, 1) - setTimeout(() => { - assert(secondStore.getState().foo[0] === 2, 'shorthand for defer multiple elements pass through goes as array') - assert(secondStore.getState().foo[1] === 1, 'shorthand for defer multiple elements pass through goes as array') - done() - }) - }, - - 'access of stores'() { - assert(secondStore.foo === undefined, 'cant access state properties that live inside store') - assert(secondStore.bindAction === undefined, 'cant access action listeners from outside store') - assert(secondStore.bindActions === undefined, 'cant access action listeners from outside store') - }, - - 'deferral of actions'(done) { - myActions.updateName('gerenuk') - assert(myStore.getState().name === 'gerenuk', 'store state was updated properly') - myActions.updateName.defer('marmot') - assert(myStore.getState().name === 'gerenuk', 'store state has same name (for now)') - setTimeout(() => { - assert(myStore.getState().name === 'marmot', 'store state was updated with defer') - done() - }) - }, - - 'getting instance'() { - assert.isFunction(myActions.getInstanceInside, 'action for getting the instance inside') - assert(secondStore.getState().instance === null, 'instance is null because it has not been set') - myActions.getInstanceInside() - assert.isObject(secondStore.getState().instance, 'instance has been now set') - assert.isFunction(secondStore.getState().instance.getState, 'instance is a pointer to secondStore') - assert.isFunction(secondStore.getState().instance.externalMethod, 'instance has the static methods available') - assert(secondStore.getState().instance.externalMethod() === 'bar', 'calling a static method from instance and able to use this inside') - }, - - 'conflicting listeners on a store'() { - class StoreWithManyListeners { - constructor() { - this.bindActions(myActions) - } - - // listeners with same action - updateName() { } - onUpdateName() { } - } + 'helper functions': () => { + assert.isFunction(myActions.updateName.defer, 'actions have a defer method for async flow'); + }, - assert.throw(() => alt.createStore(StoreWithManyListeners), ReferenceError, 'You have multiple action handlers bound to an action: updateName and onUpdateName') + 'internal actions': () => { + const internalActions = myActions.justTestingInternalActions(); + assert.isFunction(internalActions.updateThree, 'actions (below) are available internally through this.actions'); + assert.isFunction(internalActions.updateName, 'actions (above) are available internally through this.actions'); + assert.isFunction(internalActions.updateName.defer, 'making sure internal actions has a defer as well'); + assert.isFunction(internalActions.updateThree.defer, 'making sure internal actions has a defer as well'); - class EvilStore { - updateName() { } - } + assert.isFunction(myStore.getState, 'the store has a getState method exposed'); + assert.isUndefined(myStore.internalOnly, 'internal only method isnt available'); - class InnocentStore extends EvilStore { - constructor() { - super() - this.bindActions(myActions) - } + assert(myStore.getState().name === 'first', 'store has been initialized properly'); + assert(myStore.getState().calledInternal === false, 'store has been initialized properly'); + }, - onUpdateName() { } - } + 'calling actions': () => { + const actionReturnType = myActions.updateName('bear'); + assert(actionReturnType === 'bear', 'action returns what is dispatched'); - assert.throw(() => alt.createStore(InnocentStore), ReferenceError, 'You have multiple action handlers bound to an action: updateName and onUpdateName') - }, + assert(myStore.getState().name === 'bear', 'action was called, state was updated properly'); + assert(myStore.getState().calledInternal === false, 'internal method has not been called'); + assert(secondStore.getState().name === 'bear', 'second store gets its value from myStore'); + assert(thirdStore.getState().name === 'bear3', 'third store gets its value from secondStore, adds 3'); + }, - 'registering invalid action handlers'() { - class StoreWithInvalidActionHandlers { - constructor() { - this.bindAction(myActions.THIS_DOES_NOT_EXIST, this.trololol) - } + 'calling internal methods': () => { + myActions.callInternalMethod(); + assert(myStore.getState().calledInternal === true, 'internal method has been called successfully by an action'); + }, - trololol() { } - } + snapshotting() { + myActions.updateName('bear'); + const snapshot = alt.takeSnapshot(); + assert.isString(snapshot, 'a snapshot json is returned'); + assert(JSON.parse(snapshot).MyStore.name === 'bear', 'the state is current'); + assert.isObject(JSON.parse(snapshot).AltSecondStore, 'the custom identifier name works'); - assert.throw(() => alt.createStore(StoreWithInvalidActionHandlers), ReferenceError, 'Invalid action reference passed in') + myActions.updateName('blossom'); + assert(myStore.getState().name === 'blossom', 'action was called, state was updated properly'); + assert(JSON.parse(snapshot).MyStore.name === 'bear', 'the snapshot is not affected by action'); + }, - class StoreWithInvalidActionHandlers2 { - constructor() { - this.bindAction(myActions.UPDATE_NAME, this.invisibleFunction) - } - } + 'specifying stores to snapshot': () => { + const snapshot = alt.takeSnapshot('MyStore', 'AltSecondStore'); + assert.deepEqual(Object.keys(JSON.parse(snapshot)), ['MyStore', 'AltSecondStore'], 'the snapshot includes specified stores'); + assert(Object.keys(JSON.parse(snapshot)).indexOf('LifeCycleStore') === -1, 'the snapshot does not include unspecified stores'); - assert.throw(() => alt.createStore(StoreWithInvalidActionHandlers2), TypeError, 'bindAction expects a function') - }, + const snapshot2 = alt.takeSnapshot(myStore, secondStore); + assert.deepEqual(Object.keys(JSON.parse(snapshot2)), ['MyStore', 'AltSecondStore'], 'the snapshot includes specified stores'); + assert(Object.keys(JSON.parse(snapshot2)).indexOf('LifeCycleStore') === -1, 'the snapshot does not include unspecified stores'); + }, - 'exporting invalid store methods'() { - class StoreWithInvalidExportType { - constructor() { - this.foo = 'bar' - this.exportPublicMethods({ foo: 'foo' }) - } - } + 'serializing/deserializing snapshot/bootstrap data': () => { + myActions.updateAnotherVal(11); + const snapshot = alt.takeSnapshot(); + const expectedSerializedData = { + modelData: { + x: 2, + y: 3, + sum: 5, + product: 6, + }, + anotherVal: 11, + }; + // serializes snapshot data correctly + assert.deepEqual(JSON.parse(snapshot).InterceptSnapshotStore, expectedSerializedData, 'interceptSnapshotStore was serialized correctly'); + alt.rollback(); + // deserializes data correctly + assert.deepEqual(interceptSnapshotStore.getModelData(), expectedSerializedData.modelData); + }, - assert.throw(() => alt.createStore(StoreWithInvalidExportType), TypeError, 'exportPublicMethods expects a function') - }, + mutation() { + const state = myStore.getState(); + state.name = 'foobar'; + assert(state.name === 'foobar', 'mutated returned state'); + assert(myStore.getState().name === 'first', 'store state was not mutated'); + }, - 'waiting for nothing'() { - class WaitPlease { - constructor() { - this.generateActions('pleaseWait') - } - } - const waiter = alt.createActions(WaitPlease) + 'rolling back': () => { + const rollbackValue = alt.rollback(); + assert(rollbackValue === undefined, 'rollback returns nothing'); - alt.createStore(class WaitsForNobody { - constructor() { - this.bindActions(waiter) - } + assert(myStore.getState().name === 'first', 'state has been rolledback to last snapshot'); + assert(lifecycleStore.getState().rollback === true, 'rollback lifecycle method was called'); - pleaseWait() { - this.waitFor() - } - }) + myActions.updateName('blossom'); + // check that subsequent snapshots overwrite the LAST_SNAPSHOT such that + // they can be rolled back to + alt.takeSnapshot(); + alt.rollback(); + assert(myStore.getState().name === 'blossom', 'rolled back to second snapshot'); + }, - assert.throw(() => waiter.pleaseWait(), ReferenceError, 'Dispatch tokens not provided') - }, + 'store listening': () => { + const mooseChecker = (x) => { + assert(x.name === 'moose', 'listener for store works'); + assert(myStore.getState().name === 'moose', 'new store state present'); + }; + const dispose = myStore.listen(mooseChecker); + myActions.updateName('moose'); - 'cancelling emit'() { - function eventEmittedFail() { - assert(true === false, 'event was emitted but I did not want it to be') - } - const dispose = myStore.listen(eventEmittedFail) - myActions.dontEmit() - dispose() - assert(myStore.getState().dontEmitEventCalled === true, 'dont emit event was called successfully and event was not emitted') - }, - - 'multiple deferrals'(done) { - myActions.moreActions() - assert(secondStore.getState().deferrals === 1, 'deferrals is initially set to 1') - setTimeout(() => { - assert(secondStore.getState().deferrals === 3, 'but deferrals ends up being set to 3 after all actions complete') - done() - }) - }, - - 'recycling'() { - alt.recycle() - assert(myStore.getState().name === 'first', 'recycle sets the state back to its origin') - - myActions.resetRecycled() - assert(secondStore.getState().recycled === false, 'recycle const was reset due to action') - alt.recycle() - assert(secondStore.getState().recycled === true, 'init lifecycle method was called by recycling') - }, - - 'flushing'() { - myActions.updateName('goat') - const flushed = JSON.parse(alt.flush()) - assert(myStore.getState().name === 'first', 'flush is a lot like recycle') - assert(flushed.MyStore.name === 'goat', 'except that flush returns the state before recycling') - - myActions.updateName('butterfly') - assert(myStore.getState().name === 'butterfly', 'I can update the state again after a flush') - assert(secondStore.getState().name === 'butterfly', 'I can update the state again after a flush') - }, - - 'recycling single store'() { - myActions.updateName('butterfly') - alt.recycle('MyStore') - assert(myStore.getState().name === 'first', 'I can recycle specific stores') - assert(secondStore.getState().name === 'butterfly', 'and other stores will not be recycled') - - myActions.updateName('butterfly') - alt.recycle(myStore) - assert(myStore.getState().name === 'first', 'I can recycle specific stores') - }, - - 'recycling invalid stores'() { - assert.throw(() => alt.recycle('StoreThatDoesNotExist'), ReferenceError, 'StoreThatDoesNotExist is not a valid store') - }, - - 'alt single instances'() { - assert.instanceOf(altInstance, Alt, 'altInstance is an instance of alt') - assert.isObject(altInstance.dispatcher, 'it has a dispatcher') - assert.isFunction(altInstance.bootstrap, 'bootstrap function exists') - assert.isFunction(altInstance.createActions, 'createActions function') - assert.isFunction(altInstance.createStore, 'createStore function') - - const myActionsFromInst = altInstance.getActions('myActions') - assert.isObject(myActionsFromInst, 'the actions exist') - - const fauxActions = altInstance.getActions('fauxActions') - assert.isFunction(fauxActions.one, 'faux actions were generated') - - const myActionsFail = altInstance.getActions('ActionsThatDontExist') - assert.isUndefined(myActionsFail, 'undefined actions') - - myActionsFromInst.updateName('lion') - assert(altInstance.getStore('myStore').getState().name === 'lion', 'state was updated') - assert(myStore.getState().name === 'first', 'and other singleton store was not affected') - }, - - 'multiple alt instances'() { - nameActions1.updateName('bar') - nameActions2.updateName('baz') - - assert(nameStore1.getState().name === 'bar', 'store 1 state is set') - assert(nameStore2.getState().name === 'baz', 'this store has different state') - assert(altInstance.getStore('myStore').getState().name === 'first', 'other stores not affected') - assert(myStore.getState().name === 'first', 'other singleton store not affected') - }, - - 'actions with the same name'() { - const alt = new Alt() - - function UserActions() { - this.generateActions('update') - } - const ua = alt.createActions(UserActions) + assert(myStore.getState().name === 'moose', 'new store state present'); - function LinkActions() { - this.generateActions('update') - } - const la = alt.createActions(LinkActions) + dispose(); + myActions.updateName('badger'); - function Store() { - this.bindAction(ua.UPDATE, this.ua) - this.bindAction(la.UPDATE, this.la) + assert(myStore.getState().name === 'badger', 'new store state present'); + }, - this.a = 0 - this.b = 0 - } + unlistening() { + assert(myStore.getState().name !== 'moose', 'state has not been updated'); - Store.prototype.ua = function () { - this.a = 1 - } + const mooseChecker = sinon.spy(); + const unlisten = myStore.listen(mooseChecker); + myActions.updateName('moose'); - Store.prototype.la = function () { - this.b = 1 - } + assert(myStore.getState().name === 'moose', 'new store state present'); - const store = alt.createStore(Store) + unlisten(); - ua.update() - la.update() + myActions.updateName('badger'); - const state = store.getState() + assert(myStore.getState().name === 'badger', 'new store state present'); + assert.ok(mooseChecker.calledOnce); + }, - assert(state.a === 1, 'both actions were called') - assert(state.b === 1, 'both actions were called') - }, + 'unlisten lifecycle hook': () => { + const unlistener = sinon.spy(); + class XStore { + constructor() { + this.on('unlisten', unlistener); + } + } + const store = alt.createStore(XStore); - 'actions with the same name and same class name'() { - const alt = new Alt() + // unlisten directly + store.listen(() => { })(); - const ua = (function () { - function a() { this.generateActions('update') } - return alt.createActions(a) - }()) + assert.ok(unlistener.calledOnce, 'unlisten lifecycle hook called'); + }, - const la = (function () { - function a() { this.generateActions('update') } - return alt.createActions(a) - }()) + bootstrapping() { + alt.bootstrap('{"MyStore":{"name":"bee"}}'); + assert(myStore.getState().name === 'bee', 'I can bootstrap many times'); - let uaOnce = 0 - let laOnce = 0 + alt.bootstrap('{}'); - class Store { - constructor() { - this.bindAction(ua.UPDATE, this.ua) - this.bindAction(la.UPDATE, this.la) + alt.bootstrap('{"MyStore":{"name":"monkey"}}'); + assert(myStore.getState().name === 'monkey', 'I can bootstrap many times'); + }, - this.a = 0 - this.b = 0 - } + 'variadic actions': (done) => { + myActions.updateTwo(4, 2); + assert(secondStore.getState().foo === 6, 'im able to pass two params into an action'); - ua() { - this.a = 1 - uaOnce += 1 - } + myActions.updateThree(4, 2, 1); + assert(secondStore.getState().foo === 7, 'the store method updateThree works'); - la() { - this.b = 1 - laOnce += 1 - } - } + myActions.shortHandBinary(1, 0); + assert(Array.isArray(secondStore.getState().foo) === true, 'shorthand for multiple elements pass through goes as array'); + assert(secondStore.getState().foo[0] === 1, 'shorthand for multiple elements pass through goes as array'); + assert(secondStore.getState().foo[1] === 0, 'shorthand for multiple elements pass through goes as array'); - const store = alt.createStore(Store) - ua.update() - la.update() + myActions.shortHandBinary.defer(2, 1); + setTimeout(() => { + assert(secondStore.getState().foo[0] === 2, 'shorthand for defer multiple elements pass through goes as array'); + assert(secondStore.getState().foo[1] === 1, 'shorthand for defer multiple elements pass through goes as array'); + done(); + }); + }, - const state = store.getState() + 'access of stores': () => { + assert(secondStore.foo === undefined, 'cant access state properties that live inside store'); + assert(secondStore.bindAction === undefined, 'cant access action listeners from outside store'); + assert(secondStore.bindActions === undefined, 'cant access action listeners from outside store'); + }, - assert(state.a === 1, 'both actions were called') - assert(state.b === 1, 'both actions were called') - assert.equal(uaOnce, 1, 'actions only called once') - assert.equal(laOnce, 1, 'actions only called once') - }, + 'deferral of actions': (done) => { + myActions.updateName('gerenuk'); + assert(myStore.getState().name === 'gerenuk', 'store state was updated properly'); + myActions.updateName.defer('marmot'); + assert(myStore.getState().name === 'gerenuk', 'store state has same name (for now)'); + setTimeout(() => { + assert(myStore.getState().name === 'marmot', 'store state was updated with defer'); + done(); + }); + }, - 'dispatching from alt instance'() { - const inst = new AltInstance() - let called = false - const listen = (x) => { - assert(x.action === inst.getActions('myActions').updateName, 'the action provided is correct') - assert(x.data === 'yo', 'i can dispatch instances on my own') - called = true - } + 'getting instance': () => { + assert.isFunction(myActions.getInstanceInside, 'action for getting the instance inside'); + assert(secondStore.getState().instance === null, 'instance is null because it has not been set'); + myActions.getInstanceInside(); + assert.isObject(secondStore.getState().instance, 'instance has been now set'); + assert.isFunction(secondStore.getState().instance.getState, 'instance is a pointer to secondStore'); + assert.isFunction(secondStore.getState().instance.externalMethod, 'instance has the static methods available'); + assert(secondStore.getState().instance.externalMethod() === 'bar', 'calling a static method from instance and able to use this inside'); + }, - const id = inst.dispatcher.register(listen) - inst.dispatch(inst.getActions('myActions').updateName, 'yo') - inst.dispatcher.unregister(id) + 'conflicting listeners on a store': () => { + class StoreWithManyListeners { + constructor() { + this.bindActions(myActions); + } - assert(called === true, 'listener was called') - }, + // listeners with same action + updateName() { } + onUpdateName() { } + } - 'emit change method works from the store'(done) { - assert(myStore.getState().async === false, 'store async is false') + assert.throw(() => { return alt.createStore(StoreWithManyListeners); }, ReferenceError, 'You have multiple action handlers bound to an action: updateName and onUpdateName'); - const listener = () => { - assert(myStore.getState().async === true, 'store async is true') - dispose() - done() - } + class EvilStore { + updateName() { } + } + + class InnocentStore extends EvilStore { + constructor() { + super(); + this.bindActions(myActions); + } - const dispose = myStore.listen(listener) - myActions.asyncStoreAction() - }, + onUpdateName() { } + } - 'emit change method works with an isolated store'(done) { - const alt = new Alt() + assert.throw(() => { return alt.createStore(InnocentStore); }, ReferenceError, 'You have multiple action handlers bound to an action: updateName and onUpdateName'); + }, - function Actions() { - this.generateActions('test') - } + 'registering invalid action handlers': () => { + class StoreWithInvalidActionHandlers { + constructor() { + this.bindAction(myActions.THIS_DOES_NOT_EXIST, this.trololol); + } + + trololol() { } + } + + assert.throw(() => { return alt.createStore(StoreWithInvalidActionHandlers); }, ReferenceError, 'Invalid action reference passed in'); + + class StoreWithInvalidActionHandlers2 { + constructor() { + this.bindAction(myActions.UPDATE_NAME, this.invisibleFunction); + } + } + + assert.throw(() => { return alt.createStore(StoreWithInvalidActionHandlers2); }, TypeError, 'bindAction expects a function'); + }, - const actions = alt.createActions(Actions) + 'exporting invalid store methods': () => { + class StoreWithInvalidExportType { + constructor() { + this.foo = 'bar'; + this.exportPublicMethods({ foo: 'foo' }); + } + } - class Store { - constructor() { - this.bindActions(actions) - this.test = false - } + assert.throw(() => { return alt.createStore(StoreWithInvalidExportType); }, TypeError, 'exportPublicMethods expects a function'); + }, + + 'waiting for nothing': () => { + class WaitPlease { + constructor() { + this.generateActions('pleaseWait'); + } + } + const waiter = alt.createActions(WaitPlease); + + alt.createStore(class WaitsForNobody { + constructor() { + this.bindActions(waiter); + } + + pleaseWait() { + this.waitFor(); + } + }); + + assert.throw(() => { return waiter.pleaseWait(); }, ReferenceError, 'Dispatch tokens not provided'); + }, - onTest() { + 'cancelling emit': () => { + function eventEmittedFail() { + assert(true === false, 'event was emitted but I did not want it to be'); + } + const dispose = myStore.listen(eventEmittedFail); + myActions.dontEmit(); + dispose(); + assert(myStore.getState().dontEmitEventCalled === true, 'dont emit event was called successfully and event was not emitted'); + }, + + 'multiple deferrals': (done) => { + myActions.moreActions(); + assert(secondStore.getState().deferrals === 1, 'deferrals is initially set to 1'); setTimeout(() => { - this.test = true - this.emitChange() - }) - return false - } - } + assert(secondStore.getState().deferrals === 3, 'but deferrals ends up being set to 3 after all actions complete'); + done(); + }); + }, - const store = alt.createStore(Store) + recycling() { + alt.recycle(); + assert(myStore.getState().name === 'first', 'recycle sets the state back to its origin'); - assert(store.getState().test === false, 'test is false') + myActions.resetRecycled(); + assert(secondStore.getState().recycled === false, 'recycle const was reset due to action'); + alt.recycle(); + assert(secondStore.getState().recycled === true, 'init lifecycle method was called by recycling'); + }, - const listener = () => { - assert(store.getState().test === true, 'test is true') - dispose() - done() - } + flushing() { + myActions.updateName('goat'); + const flushed = JSON.parse(alt.flush()); + assert(myStore.getState().name === 'first', 'flush is a lot like recycle'); + assert(flushed.MyStore.name === 'goat', 'except that flush returns the state before recycling'); - const dispose = store.listen(listener) - actions.test() - }, + myActions.updateName('butterfly'); + assert(myStore.getState().name === 'butterfly', 'I can update the state again after a flush'); + assert(secondStore.getState().name === 'butterfly', 'I can update the state again after a flush'); + }, - 'extending stores'() { - const alt = new Alt() + 'recycling single store': () => { + myActions.updateName('butterfly'); + alt.recycle('MyStore'); + assert(myStore.getState().name === 'first', 'I can recycle specific stores'); + assert(secondStore.getState().name === 'butterfly', 'and other stores will not be recycled'); - class Other { - constructor() { - this.foo = true - } + myActions.updateName('butterfly'); + alt.recycle(myStore); + assert(myStore.getState().name === 'first', 'I can recycle specific stores'); + }, - test() { return true } - } + 'recycling invalid stores': () => { + assert.throw(() => { return alt.recycle('StoreThatDoesNotExist'); }, ReferenceError, 'StoreThatDoesNotExist is not a valid store'); + }, - class Store extends Other { - constructor() { - super() - this.bar = true - this.baz = super.test() - } - } + 'alt single instances': () => { + assert.instanceOf(altInstance, Alt, 'altInstance is an instance of alt'); + assert.isObject(altInstance.dispatcher, 'it has a dispatcher'); + assert.isFunction(altInstance.bootstrap, 'bootstrap function exists'); + assert.isFunction(altInstance.createActions, 'createActions function'); + assert.isFunction(altInstance.createStore, 'createStore function'); - const store = alt.createStore(Store) + const myActionsFromInst = altInstance.getActions('myActions'); + assert.isObject(myActionsFromInst, 'the actions exist'); - assert(store.getState().foo === true, 'store inherits properties') - assert(store.getState().bar === true, 'store properties are available') - assert(store.getState().baz === true, 'inherited methods can be called') - }, + const fauxActions = altInstance.getActions('fauxActions'); + assert.isFunction(fauxActions.one, 'faux actions were generated'); - 'exporting public method of ancestor'() { - class StoreBase { - baseMethod() { - return true - } - } + const myActionsFail = altInstance.getActions('ActionsThatDontExist'); + assert.isUndefined(myActionsFail, 'undefined actions'); - class Store extends StoreBase { - constructor() { - super() - this.exportPublicMethods({ - baseMethod: this.baseMethod - }) - } - } + myActionsFromInst.updateName('lion'); + assert(altInstance.getStore('myStore').getState().name === 'lion', 'state was updated'); + assert(myStore.getState().name === 'first', 'and other singleton store was not affected'); + }, + + 'multiple alt instances': () => { + nameActions1.updateName('bar'); + nameActions2.updateName('baz'); - const store = alt.createStore(Store) + assert(nameStore1.getState().name === 'bar', 'store 1 state is set'); + assert(nameStore2.getState().name === 'baz', 'this store has different state'); + assert(altInstance.getStore('myStore').getState().name === 'first', 'other stores not affected'); + assert(myStore.getState().name === 'first', 'other singleton store not affected'); + }, - assert.isFunction(store.baseMethod, 'ancestor methods via export mixin are made available') - }, + 'actions with the same name': () => { + const newAlt = new Alt(); - 'binding a listener that does not exist'() { - class BadListenerStore { - constructor() { - this.bindListeners({ - methodThatDoesNotExist: myActions.updateName - }) - } - } + function UserActions() { + this.generateActions('update'); + } + const ua = newAlt.createActions(UserActions); - assert.throw(() => alt.createStore(BadListenerStore), ReferenceError, 'methodThatDoesNotExist defined but does not exist in BadListenerStore') - }, + function LinkActions() { + this.generateActions('update'); + } + const la = newAlt.createActions(LinkActions); - 'binding listeners to action that does not exist'() { - class BadListenerStore { - constructor() { - this.bindListeners({ - foo: myActions.trolololololol - }) - } + function Store() { + this.bindAction(ua.UPDATE, this.ua); + this.bindAction(la.UPDATE, this.la); - foo() { } - } + this.a = 0; + this.b = 0; + } + + Store.prototype.ua = function protoUa() { + this.a = 1; + }; - assert.throw(() => alt.createStore(BadListenerStore), ReferenceError, 'Invalid action reference passed in') - }, + Store.prototype.la = function protoLa() { + this.b = 1; + }; - 'do not include store in snapshots'() { - function NoBootstrap() { } + const store = newAlt.createStore(Store); - alt.createUnsavedStore(NoBootstrap, 'NoBootstrap') + ua.update(); + la.update(); - let snapshot = JSON.parse(alt.takeSnapshot()) + const state = store.getState(); - assert.isUndefined(snapshot.NoBootstrap, 'Store does not exist in snapshots') - assert.isObject(snapshot.AltSecondStore, 'AltSecondStore exists') + assert(state.a === 1, 'both actions were called'); + assert(state.b === 1, 'both actions were called'); + }, - alt.createUnsavedStore({ - displayName: 'NoBootstrapObject' - }) + 'actions with the same name and same class name': () => { + const newAlt = new Alt(); - snapshot = JSON.parse(alt.takeSnapshot()) + const ua = (function ua() { + function a() { this.generateActions('update'); } + return newAlt.createActions(a); + }()); - assert.isUndefined(snapshot.NoBootstrapObject, 'Store does not exist in snapshots') - assert.isObject(snapshot.AltSecondStore, 'AltSecondStore exists') - }, + const la = (function la() { + function a() { this.generateActions('update'); } + return newAlt.createActions(a); + }()); - 'actions with no name are still ok'() { - var actions = alt.createActions(function () { - this.generateActions('foo') - }) + let uaOnce = 0; + let laOnce = 0; - assert.isFunction(actions.foo, 'action still exists') - }, + class Store { + constructor() { + this.bindAction(ua.UPDATE, this.ua); + this.bindAction(la.UPDATE, this.la); - 'recycle store that does not exist'() { - assert.doesNotThrow(() => { - alt.bootstrap('{"AStoreThatIJustMadeUpButDoesNotReallyExist": {}}') - }) - }, + this.a = 0; + this.b = 0; + } - 'creating one off actions'() { - const action = alt.createAction('hello', function (x) { - return x - }) + ua() { + this.a = 1; + uaOnce += 1; + } - const store = alt.createStore({ - displayName: 'just testing', - state: { x: 0 }, - bindListeners: { - hello: action - }, - hello(x) { this.state.x = x } - }) + la() { + this.b = 1; + laOnce += 1; + } + } - assert.isFunction(action, 'action was created') + const store = newAlt.createStore(Store); - action(1) + ua.update(); + la.update(); - assert(store.getState().x === 1, 'action fires correctly') - }, + const state = store.getState(); - 'setState emits a change if not dispatching'(done) { - const alt = new Alt() + assert(state.a === 1, 'both actions were called'); + assert(state.b === 1, 'both actions were called'); + assert.equal(uaOnce, 1, 'actions only called once'); + assert.equal(laOnce, 1, 'actions only called once'); + }, - const actions = alt.generateActions('fire') + 'dispatching from alt instance': () => { + const inst = new AltInstance(); + let called = false; + const listen = (x) => { + assert(x.action === inst.getActions('myActions').updateName, 'the action provided is correct'); + assert(x.data === 'yo', 'i can dispatch instances on my own'); + called = true; + }; - const store = alt.createStore(class Store { - constructor() { - this.bindActions(actions) - this.test = false - } + const id = inst.dispatcher.register(listen); + inst.dispatch(inst.getActions('myActions').updateName, 'yo'); + inst.dispatcher.unregister(id); - fire() { - setTimeout(() => { - this.setState({ - test: true - }) - }) - return false - } - }) - - assert(store.getState().test === false) - - const unlisten = store.listen((state) => { - assert(state.test === true) - unlisten() - done() - }) - - actions.fire() - }, - - 'prepare a payload for bootstrap'() { - const serialized = alt.prepare(myStore, { a: 1, b: 2 }) - const parsed = JSON.parse(serialized) - - assert.isString(serialized) - assert.isObject(parsed.MyStore) - assert(parsed.MyStore.a === 1) - assert(parsed.MyStore.b === 2) - assert.isUndefined(parsed.MyStore.c) - - assert.throws(() => { - alt.prepare({}, { x: 0 }) - }, ReferenceError) - }, - - 'async dispatches'(done) { - const AsyncAction = alt.createActions({ - displayName: 'AsyncAction', - fire(x) { - return (dispatch) => { - dispatch(x) + assert(called === true, 'listener was called'); + }, + + 'emit change method works from the store': (done) => { + assert(myStore.getState().async === false, 'store async is false'); + + const listener = () => { + assert(myStore.getState().async === true, 'store async is true'); + dispose(); + done(); + }; + + const dispose = myStore.listen(listener); + myActions.asyncStoreAction(); + }, + + 'emit change method works with an isolated store': (done) => { + const newAlt = new Alt(); + + function Actions() { + this.generateActions('test'); } - } - }) - - const token = alt.dispatcher.register((payload) => { - assert(payload.action === 'AsyncAction.fire') - assert(payload.data === 2) - alt.dispatcher.unregister(token) - done() - }) - - AsyncAction.fire(2) - }, - - 'listen expects function'() { - assert.throws(() => { - myStore.listen(null) - }, TypeError, 'listen expects a function') - }, - - 'lots of listens'() { - const ImportKeysActions = alt.generateActions('change', 'saved') - - const call = sinon.spy() - - const BalanceClaimStore = alt.createStore(class { - constructor() { - this.bindListeners({ - onRefreshBalanceClaims: ImportKeysActions.saved, - onLoadMyAccounts: [ - ImportKeysActions.change, ImportKeysActions.saved - ] - }) - } - - onRefreshBalanceClaims() { - call() - } - - onLoadMyAccounts() { - call() - } - }) - - ImportKeysActions.saved() - - assert(call.calledTwice, 'multiple action handlers are ok') - }, - - 'dispatching action creators'() { - const action = { - id: 'hello', - dispatch(data) { - return data - } - } - const alt = new Alt() + const actions = newAlt.createActions(Actions); + + class Store { + constructor() { + this.bindActions(actions); + this.test = false; + } + + onTest() { + setTimeout(() => { + this.test = true; + this.emitChange(); + }); + return false; + } + } - class Store { - constructor() { - this.bindAction(action, this.hello.bind(this)) - this.state = { x: null } - } + const store = newAlt.createStore(Store); - hello(data) { - this.setState({ x: data }) - } - } + assert(store.getState().test === false, 'test is false'); - const store = alt.createStore(Store) + const listener = () => { + assert(store.getState().test === true, 'test is true'); + dispose(); + done(); + }; - assert(store.getState().x === null, 'x is null') + const dispose = store.listen(listener); + actions.test(); + }, - alt.dispatch(action, 3) + 'extending stores': () => { + const newAlt = new Alt(); - assert(store.getState().x === 3, '3 was dispatched') + class Other { + constructor() { + this.foo = true; + } - alt.dispatch(action, 4) + test() { return true; } + } - assert(store.getState().x === 4, '4 was dispatched') + class Store extends Other { + constructor() { + super(); + this.bar = true; + this.baz = super.test(); + } + } - alt.dispatch(action, undefined) + const store = newAlt.createStore(Store); - assert(store.getState().x === 4, 'undefined means it wont dispatch') - }, + assert(store.getState().foo === true, 'store inherits properties'); + assert(store.getState().bar === true, 'store properties are available'); + assert(store.getState().baz === true, 'inherited methods can be called'); + }, - 'dispatching async action creators'(done) { - const action = { - id: 'hello', - dispatch(data) { - return dispatch => dispatch(done) - } - } + 'exporting public method of ancestor': () => { + class StoreBase { + baseMethod() { + return true; + } + } - const alt = new Alt() + class Store extends StoreBase { + constructor() { + super(); + this.exportPublicMethods({ + baseMethod: this.baseMethod, + }); + } + } - class Store { - constructor() { - this.bindAction(action, this.hello) - } + const store = alt.createStore(Store); - hello(done) { - done() - } - } + assert.isFunction(store.baseMethod, 'ancestor methods via export mixin are made available'); + }, - const store = alt.createStore(Store) - alt.dispatch(action) - }, + 'binding a listener that does not exist': () => { + class BadListenerStore { + constructor() { + this.bindListeners({ + methodThatDoesNotExist: myActions.updateName, + }); + } + } - 'is fsa'(done) { - const res = alt.dispatcher.register((x) => { - assert.isDefined(x.type, 'there is a type') - assert.isDefined(x.payload, 'there is a payload') - assert.isDefined(x.meta, 'meta exists') - assert.isString(x.meta.dispatchId, 'meta contains a unique dispatch id') + assert.throw(() => { return alt.createStore(BadListenerStore); }, ReferenceError, 'methodThatDoesNotExist defined but does not exist in BadListenerStore'); + }, - assert(x.payload === 'Jane', 'the payload is correct') + 'binding listeners to action that does not exist': () => { + class BadListenerStore { + constructor() { + this.bindListeners({ + foo: myActions.trolololololol, + }); + } - alt.dispatcher.unregister(res) + foo() { } + } - done() - }) + assert.throw(() => { return alt.createStore(BadListenerStore); }, ReferenceError, 'Invalid action reference passed in'); + }, - myActions.updateName('Jane') - }, + 'do not include store in snapshots': () => { + function NoBootstrap() { } - 'can dispatch fsa'(done) { - const res = alt.dispatcher.register((x) => { - assert.isDefined(x.type, 'there is a type') - assert(x.type === 'owl') - assert.isDefined(x.payload, 'there is a payload') - assert(x.payload === 'Tawny') - assert.isString(x.meta.dispatchId, 'meta contains a unique dispatch id') + alt.createUnsavedStore(NoBootstrap, 'NoBootstrap'); - alt.dispatcher.unregister(res) + let snapshot = JSON.parse(alt.takeSnapshot()); - done() - }) + assert.isUndefined(snapshot.NoBootstrap, 'Store does not exist in snapshots'); + assert.isObject(snapshot.AltSecondStore, 'AltSecondStore exists'); - alt.dispatch({ type: 'owl', payload: 'Tawny' }) - }, -} + alt.createUnsavedStore({ + displayName: 'NoBootstrapObject', + }); + + snapshot = JSON.parse(alt.takeSnapshot()); + + assert.isUndefined(snapshot.NoBootstrapObject, 'Store does not exist in snapshots'); + assert.isObject(snapshot.AltSecondStore, 'AltSecondStore exists'); + }, + + 'actions with no name are still ok': () => { + const actions = alt.createActions(function createActionsTest() { + this.generateActions('foo'); + }); + + assert.isFunction(actions.foo, 'action still exists'); + }, + + 'recycle store that does not exist': () => { + assert.doesNotThrow(() => { + alt.bootstrap('{"AStoreThatIJustMadeUpButDoesNotReallyExist": {}}'); + }); + }, + + 'creating one off actions': () => { + const action = alt.createAction('hello', (x) => { + return x; + }); + + const store = alt.createStore({ + displayName: 'just testing', + state: { x: 0 }, + bindListeners: { + hello: action, + }, + hello(x) { this.state.x = x; }, + }); + + assert.isFunction(action, 'action was created'); + + action(1); + + assert(store.getState().x === 1, 'action fires correctly'); + }, + + 'setState emits a change if not dispatching': (done) => { + const newAlt = new Alt(); + + const actions = newAlt.generateActions('fire'); + + const store = newAlt.createStore(class Store { + constructor() { + this.bindActions(actions); + this.test = false; + } + + fire() { + setTimeout(() => { + this.setState({ + test: true, + }); + }); + return false; + } + }); + + assert(store.getState().test === false); + + const unlisten = store.listen((state) => { + assert(state.test === true); + unlisten(); + done(); + }); + + actions.fire(); + }, + + 'prepare a payload for bootstrap': () => { + const serialized = alt.prepare(myStore, { a: 1, b: 2 }); + const parsed = JSON.parse(serialized); + + assert.isString(serialized); + assert.isObject(parsed.MyStore); + assert(parsed.MyStore.a === 1); + assert(parsed.MyStore.b === 2); + assert.isUndefined(parsed.MyStore.c); + + assert.throws(() => { + alt.prepare({}, { x: 0 }); + }, ReferenceError); + }, + + 'async dispatches': (done) => { + const AsyncAction = alt.createActions({ + displayName: 'AsyncAction', + fire(x) { + return (dispatch) => { + dispatch(x); + }; + }, + }); + + const token = alt.dispatcher.register((payload) => { + assert(payload.action === 'AsyncAction.fire'); + assert(payload.data === 2); + alt.dispatcher.unregister(token); + done(); + }); + + AsyncAction.fire(2); + }, + + 'listen expects function': () => { + assert.throws(() => { + myStore.listen(null); + }, TypeError, 'listen expects a function'); + }, + + 'lots of listens': () => { + const ImportKeysActions = alt.generateActions('change', 'saved'); + + const call = sinon.spy(); + + const BalanceClaimStore = alt.createStore(class { //eslint-disable-line + constructor() { + this.bindListeners({ + onRefreshBalanceClaims: ImportKeysActions.saved, + onLoadMyAccounts: [ + ImportKeysActions.change, ImportKeysActions.saved, + ], + }); + } + + onRefreshBalanceClaims() { + call(); + } + + onLoadMyAccounts() { + call(); + } + }); + + ImportKeysActions.saved(); + + assert(call.calledTwice, 'multiple action handlers are ok'); + }, + + 'dispatching action creators': () => { + const action = { + id: 'hello', + dispatch(data) { + return data; + }, + }; + + const newAlt = new Alt(); + + class Store { + constructor() { + this.bindAction(action, this.hello.bind(this)); + this.state = { x: null }; + } + + hello(data) { + this.setState({ x: data }); + } + } + + const store = newAlt.createStore(Store); + + assert(store.getState().x === null, 'x is null'); + + newAlt.dispatch(action, 3); + + assert(store.getState().x === 3, '3 was dispatched'); + + newAlt.dispatch(action, 4); + + assert(store.getState().x === 4, '4 was dispatched'); + + newAlt.dispatch(action, undefined); + + assert(store.getState().x === 4, 'undefined means it wont dispatch'); + }, + + 'dispatching async action creators': (done) => { + const action = { + id: 'hello', + dispatch() { + return (dispatch) => { return dispatch(done); }; + }, + }; + + const newAlt = new Alt(); + + class Store { + constructor() { + this.bindAction(action, this.hello); + } + + hello(cb) { + cb(); + } + } + + newAlt.createStore(Store); + newAlt.dispatch(action); + }, + + 'is fsa': (done) => { + const res = alt.dispatcher.register((x) => { + assert.isDefined(x.type, 'there is a type'); + assert.isDefined(x.payload, 'there is a payload'); + assert.isDefined(x.meta, 'meta exists'); + assert.isString(x.meta.dispatchId, 'meta contains a unique dispatch id'); + + assert(x.payload === 'Jane', 'the payload is correct'); + + alt.dispatcher.unregister(res); + + done(); + }); + + myActions.updateName('Jane'); + }, + + 'can dispatch fsa': (done) => { + const res = alt.dispatcher.register((x) => { + assert.isDefined(x.type, 'there is a type'); + assert(x.type === 'owl'); + assert.isDefined(x.payload, 'there is a payload'); + assert(x.payload === 'Tawny'); + assert.isString(x.meta.dispatchId, 'meta contains a unique dispatch id'); + + alt.dispatcher.unregister(res); + + done(); + }); + + alt.dispatch({ type: 'owl', payload: 'Tawny' }); + }, +}; -export default tests +export default tests; diff --git a/yarn.lock b/yarn.lock index 7485a074..13a43191 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,25 +10,29 @@ abbrev@1.0.x: version "1.0.9" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + dependencies: + acorn "^4.0.3" + acorn-globals@^1.0.4: version "1.0.9" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf" dependencies: acorn "^2.1.0" -acorn-to-esprima@^2.0.4: - version "2.0.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn-to-esprima/-/acorn-to-esprima-2.0.8.tgz#003f0c642eb92132f417d3708f14ada82adf2eb1" - -acorn@^1.2.1: - version "1.2.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn/-/acorn-1.2.2.tgz#c8ce27de0acc76d896d2b1fad3df588d9e82f014" +acorn-jsx@^3.0.0: + version "3.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + dependencies: + acorn "^3.0.4" -acorn@^2.1.0: +acorn@^2.1.0, acorn@^2.4.0: version "2.7.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" -acorn@^3.0.0: +acorn@^3.0.4: version "3.3.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" @@ -36,6 +40,14 @@ acorn@^4.0.3: version "4.0.13" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" +acorn@^5.0.0, acorn@^5.1.1: + version "5.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" + +ajv-keywords@^2.0.0, ajv-keywords@^2.1.0: + version "2.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + ajv@^4.9.1: version "4.11.8" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" @@ -43,7 +55,7 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.1.0: +ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.0, ajv@^5.2.3: version "5.3.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda" dependencies: @@ -85,18 +97,28 @@ amdefine@>=0.0.4: version "1.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-escapes@^1.1.0: - version "1.4.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" +ansi-escapes@^3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" ansi-regex@^2.0.0: version "2.1.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" -ansi-styles@^2.1.0, ansi-styles@^2.2.1: +ansi-regex@^3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^2.2.1: version "2.2.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" +ansi-styles@^3.1.0: + version "3.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + anymatch@^1.3.0: version "1.3.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" @@ -115,7 +137,7 @@ are-we-there-yet@~1.1.2: delegates "^1.0.0" readable-stream "^2.0.6" -argparse@^1.0.2, argparse@^1.0.7: +argparse@^1.0.7: version "1.0.9" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" dependencies: @@ -128,6 +150,12 @@ argparse@^1.0.2, argparse@^1.0.7: underscore "~1.7.0" underscore.string "~2.4.0" +aria-query@^0.7.0: + version "0.7.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/aria-query/-/aria-query-0.7.0.tgz#4af10a1e61573ddea0cf3b99b51c52c05b424d24" + dependencies: + ast-types-flow "0.0.7" + arr-diff@^2.0.0: version "2.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" @@ -138,9 +166,12 @@ arr-flatten@^1.0.1: version "1.1.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" -array-find-index@^1.0.1: - version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" +array-includes@^3.0.3: + version "3.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + dependencies: + define-properties "^1.1.2" + es-abstract "^1.7.0" array-union@^1.0.1: version "1.0.2" @@ -148,7 +179,7 @@ array-union@^1.0.1: dependencies: array-uniq "^1.0.1" -array-uniq@^1.0.0, array-uniq@^1.0.1: +array-uniq@^1.0.1: version "1.0.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" @@ -164,6 +195,14 @@ asap@~2.0.3: version "2.0.6" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" +asn1.js@^4.0.0: + version "4.9.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a" + dependencies: + bn.js "^4.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + asn1@0.1.11: version "0.1.11" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" @@ -194,6 +233,10 @@ assertion-error@1.0.0: version "1.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b" +ast-types-flow@0.0.7: + version "0.0.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + ast-types@0.9.6: version "0.9.6" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" @@ -202,18 +245,24 @@ async-each@^1.0.0: version "1.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" -async@1.x, async@^1.3.0, async@^1.4.0: +async@1.x: version "1.5.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" -async@^0.9.0, async@~0.9.0: - version "0.9.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" +async@^2.1.2: + version "2.6.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + dependencies: + lodash "^4.14.0" async@~0.2.6: version "0.2.10" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" +async@~0.9.0: + version "0.9.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + asynckit@^0.4.0: version "0.4.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -240,33 +289,34 @@ axios@^0.5.4: dependencies: es6-promise "^2.0.1" -babel-cli@6.6.5: - version "6.6.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-cli/-/babel-cli-6.6.5.tgz#554a7e8d0c4bc939967a89f4165750fe3887c522" +axobject-query@^0.1.0: + version "0.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" dependencies: - babel-core "^6.6.5" - babel-polyfill "^6.6.0" - babel-register "^6.6.5" - babel-runtime "^5.0.0" - bin-version-check "^2.1.0" - chalk "1.1.1" - commander "^2.8.1" - convert-source-map "^1.1.0" - fs-readdir-recursive "^0.1.0" - glob "^5.0.5" - lodash "^3.2.0" - log-symbols "^1.0.2" - output-file-sync "^1.1.0" - path-exists "^1.0.0" - path-is-absolute "^1.0.0" - request "^2.65.0" + ast-types-flow "0.0.7" + +babel-cli@^6.26.0: + version "6.26.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" + dependencies: + babel-core "^6.26.0" + babel-polyfill "^6.26.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + commander "^2.11.0" + convert-source-map "^1.5.0" + fs-readdir-recursive "^1.0.0" + glob "^7.1.2" + lodash "^4.17.4" + output-file-sync "^1.1.2" + path-is-absolute "^1.0.1" slash "^1.0.0" - source-map "^0.5.0" - v8flags "^2.0.10" + source-map "^0.5.6" + v8flags "^2.1.1" optionalDependencies: - chokidar "^1.0.0" + chokidar "^1.6.1" -babel-code-frame@^6.20.0, babel-code-frame@^6.26.0: +babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: @@ -274,31 +324,7 @@ babel-code-frame@^6.20.0, babel-code-frame@^6.26.0: esutils "^2.0.2" js-tokens "^3.0.2" -babel-core@6.21.0: - version "6.21.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-core/-/babel-core-6.21.0.tgz#75525480c21c803f826ef3867d22c19f080a3724" - dependencies: - babel-code-frame "^6.20.0" - babel-generator "^6.21.0" - babel-helpers "^6.16.0" - babel-messages "^6.8.0" - babel-register "^6.18.0" - babel-runtime "^6.20.0" - babel-template "^6.16.0" - babel-traverse "^6.21.0" - babel-types "^6.21.0" - babylon "^6.11.0" - convert-source-map "^1.1.0" - debug "^2.1.1" - json5 "^0.5.0" - lodash "^4.2.0" - minimatch "^3.0.2" - path-is-absolute "^1.0.0" - private "^0.1.6" - slash "^1.0.0" - source-map "^0.5.0" - -babel-core@^6.26.0, babel-core@^6.6.5: +babel-core@^6.25.0, babel-core@^6.26.0: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" dependencies: @@ -322,18 +348,16 @@ babel-core@^6.26.0, babel-core@^6.6.5: slash "^1.0.0" source-map "^0.5.6" -babel-eslint@5.0.0: - version "5.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-eslint/-/babel-eslint-5.0.0.tgz#47cfed8880090ffdf8569fa82adab5757ea5512f" +babel-eslint@^7.2.3: + version "7.2.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" dependencies: - acorn-to-esprima "^2.0.4" - babel-traverse "^6.0.20" - babel-types "^6.0.19" - babylon "^6.0.18" - lodash.assign "^3.2.0" - lodash.pick "^3.1.0" + babel-code-frame "^6.22.0" + babel-traverse "^6.23.1" + babel-types "^6.23.0" + babylon "^6.17.0" -babel-generator@^6.21.0, babel-generator@^6.26.0: +babel-generator@^6.26.0: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" dependencies: @@ -379,7 +403,7 @@ babel-helper-call-delegate@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-define-map@^6.24.1, babel-helper-define-map@^6.6.5: +babel-helper-define-map@^6.24.1: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" dependencies: @@ -405,7 +429,7 @@ babel-helper-explode-class@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-function-name@^6.24.1, babel-helper-function-name@^6.6.0: +babel-helper-function-name@^6.24.1: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" dependencies: @@ -429,7 +453,7 @@ babel-helper-hoist-variables@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-helper-optimise-call-expression@^6.24.1, babel-helper-optimise-call-expression@^6.6.0: +babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" dependencies: @@ -454,7 +478,7 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-replace-supers@^6.24.1, babel-helper-replace-supers@^6.6.5: +babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" dependencies: @@ -465,22 +489,22 @@ babel-helper-replace-supers@^6.24.1, babel-helper-replace-supers@^6.6.5: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helpers@^6.16.0, babel-helpers@^6.24.1: +babel-helpers@^6.24.1: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-loader@6.2.4: - version "6.2.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-loader/-/babel-loader-6.2.4.tgz#aa70aff8ddc223a5952e839a43a6c3a4c8bfa1e9" +babel-loader@^7.1.1: + version "7.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" dependencies: - loader-utils "^0.2.11" + find-cache-dir "^1.0.0" + loader-utils "^1.0.2" mkdirp "^0.5.1" - object-assign "^4.0.1" -babel-messages@^6.23.0, babel-messages@^6.6.5, babel-messages@^6.8.0: +babel-messages@^6.23.0: version "6.23.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" dependencies: @@ -568,7 +592,7 @@ babel-plugin-transform-async-generator-functions@^6.24.1: babel-plugin-syntax-async-generators "^6.5.0" babel-runtime "^6.22.0" -babel-plugin-transform-async-to-generator@^6.24.1: +babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" dependencies: @@ -584,7 +608,7 @@ babel-plugin-transform-class-constructor-call@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-class-properties@^6.24.1, babel-plugin-transform-class-properties@^6.6.0: +babel-plugin-transform-class-properties@^6.24.1: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" dependencies: @@ -603,7 +627,7 @@ babel-plugin-transform-decorators@^6.24.1: babel-template "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-do-expressions@^6.3.13: +babel-plugin-transform-do-expressions@^6.22.0: version "6.22.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" dependencies: @@ -622,7 +646,7 @@ babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-block-scoping@^6.24.1: +babel-plugin-transform-es2015-block-scoping@^6.23.0: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" dependencies: @@ -632,21 +656,7 @@ babel-plugin-transform-es2015-block-scoping@^6.24.1: babel-types "^6.26.0" lodash "^4.17.4" -babel-plugin-transform-es2015-classes@6.6.5: - version "6.6.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.6.5.tgz#b0273c58277c970d5d15517f61e45f731a65c61a" - dependencies: - babel-helper-define-map "^6.6.5" - babel-helper-function-name "^6.6.0" - babel-helper-optimise-call-expression "^6.6.0" - babel-helper-replace-supers "^6.6.5" - babel-messages "^6.6.5" - babel-runtime "^5.0.0" - babel-template "^6.6.5" - babel-traverse "^6.6.5" - babel-types "^6.6.5" - -babel-plugin-transform-es2015-classes@^6.24.1: +babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" dependencies: @@ -660,33 +670,33 @@ babel-plugin-transform-es2015-classes@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-es2015-computed-properties@^6.24.1: +babel-plugin-transform-es2015-computed-properties@^6.22.0: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-destructuring@^6.22.0: +babel-plugin-transform-es2015-destructuring@^6.23.0: version "6.23.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-duplicate-keys@^6.24.1: +babel-plugin-transform-es2015-duplicate-keys@^6.22.0: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-plugin-transform-es2015-for-of@^6.22.0: +babel-plugin-transform-es2015-for-of@^6.23.0: version "6.23.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-function-name@^6.24.1: +babel-plugin-transform-es2015-function-name@^6.22.0: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" dependencies: @@ -700,7 +710,7 @@ babel-plugin-transform-es2015-literals@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-modules-amd@^6.24.1: +babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" dependencies: @@ -708,7 +718,7 @@ babel-plugin-transform-es2015-modules-amd@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-commonjs@^6.24.1: +babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" dependencies: @@ -717,7 +727,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.24.1: babel-template "^6.26.0" babel-types "^6.26.0" -babel-plugin-transform-es2015-modules-systemjs@^6.24.1: +babel-plugin-transform-es2015-modules-systemjs@^6.23.0: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" dependencies: @@ -725,7 +735,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-modules-umd@^6.24.1: +babel-plugin-transform-es2015-modules-umd@^6.23.0: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" dependencies: @@ -733,14 +743,14 @@ babel-plugin-transform-es2015-modules-umd@^6.24.1: babel-runtime "^6.22.0" babel-template "^6.24.1" -babel-plugin-transform-es2015-object-super@^6.24.1: +babel-plugin-transform-es2015-object-super@^6.22.0: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" dependencies: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" -babel-plugin-transform-es2015-parameters@^6.24.1: +babel-plugin-transform-es2015-parameters@^6.23.0: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" dependencies: @@ -751,7 +761,7 @@ babel-plugin-transform-es2015-parameters@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-es2015-shorthand-properties@^6.24.1: +babel-plugin-transform-es2015-shorthand-properties@^6.22.0: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" dependencies: @@ -764,7 +774,7 @@ babel-plugin-transform-es2015-spread@^6.22.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-sticky-regex@^6.24.1: +babel-plugin-transform-es2015-sticky-regex@^6.22.0: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" dependencies: @@ -772,19 +782,19 @@ babel-plugin-transform-es2015-sticky-regex@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-plugin-transform-es2015-template-literals@^6.0.14, babel-plugin-transform-es2015-template-literals@^6.22.0: +babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-typeof-symbol@^6.22.0: +babel-plugin-transform-es2015-typeof-symbol@^6.23.0: version "6.23.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-unicode-regex@^6.24.1: +babel-plugin-transform-es2015-unicode-regex@^6.22.0: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" dependencies: @@ -792,19 +802,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.24.1: babel-runtime "^6.22.0" regexpu-core "^2.0.0" -babel-plugin-transform-es3-member-expression-literals@^6.0.14: - version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es3-member-expression-literals/-/babel-plugin-transform-es3-member-expression-literals-6.22.0.tgz#733d3444f3ecc41bef8ed1a6a4e09657b8969ebb" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es3-property-literals@^6.0.14: - version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es3-property-literals/-/babel-plugin-transform-es3-property-literals-6.22.0.tgz#b2078d5842e22abf40f73e8cde9cd3711abd5758" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-exponentiation-operator@^6.24.1: +babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" dependencies: @@ -826,19 +824,13 @@ babel-plugin-transform-flow-strip-types@^6.22.0: babel-plugin-syntax-flow "^6.18.0" babel-runtime "^6.22.0" -babel-plugin-transform-function-bind@^6.3.13: +babel-plugin-transform-function-bind@^6.22.0: version "6.22.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" dependencies: babel-plugin-syntax-function-bind "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-jscript@^6.0.14: - version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-jscript/-/babel-plugin-transform-jscript-6.22.0.tgz#6e8af12b7aba49e0a809152616ac05690b3352dc" - dependencies: - babel-runtime "^6.22.0" - babel-plugin-transform-object-rest-spread@^6.22.0: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" @@ -874,7 +866,7 @@ babel-plugin-transform-react-jsx@^6.24.1: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-regenerator@^6.24.1: +babel-plugin-transform-regenerator@^6.22.0: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" dependencies: @@ -887,7 +879,7 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-polyfill@^6.6.0: +babel-polyfill@^6.26.0: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" dependencies: @@ -895,45 +887,40 @@ babel-polyfill@^6.6.0: core-js "^2.5.0" regenerator-runtime "^0.10.5" -babel-preset-airbnb@1.0.1: - version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-airbnb/-/babel-preset-airbnb-1.0.1.tgz#bc0561b4b221257ccb35e00723e79b50cd86760c" - dependencies: - babel-plugin-transform-es2015-template-literals "^6.0.14" - babel-plugin-transform-es3-member-expression-literals "^6.0.14" - babel-plugin-transform-es3-property-literals "^6.0.14" - babel-plugin-transform-jscript "^6.0.14" - babel-preset-es2015 "^6.1.2" - babel-preset-react "^6.1.2" - -babel-preset-es2015@^6.1.2: - version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" +babel-preset-env@^1.6.0: + version "1.6.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" dependencies: babel-plugin-check-es2015-constants "^6.22.0" + babel-plugin-syntax-trailing-function-commas "^6.22.0" + babel-plugin-transform-async-to-generator "^6.22.0" babel-plugin-transform-es2015-arrow-functions "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.24.1" - babel-plugin-transform-es2015-classes "^6.24.1" - babel-plugin-transform-es2015-computed-properties "^6.24.1" - babel-plugin-transform-es2015-destructuring "^6.22.0" - babel-plugin-transform-es2015-duplicate-keys "^6.24.1" - babel-plugin-transform-es2015-for-of "^6.22.0" - babel-plugin-transform-es2015-function-name "^6.24.1" + babel-plugin-transform-es2015-block-scoping "^6.23.0" + babel-plugin-transform-es2015-classes "^6.23.0" + babel-plugin-transform-es2015-computed-properties "^6.22.0" + babel-plugin-transform-es2015-destructuring "^6.23.0" + babel-plugin-transform-es2015-duplicate-keys "^6.22.0" + babel-plugin-transform-es2015-for-of "^6.23.0" + babel-plugin-transform-es2015-function-name "^6.22.0" babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-plugin-transform-es2015-modules-systemjs "^6.24.1" - babel-plugin-transform-es2015-modules-umd "^6.24.1" - babel-plugin-transform-es2015-object-super "^6.24.1" - babel-plugin-transform-es2015-parameters "^6.24.1" - babel-plugin-transform-es2015-shorthand-properties "^6.24.1" + babel-plugin-transform-es2015-modules-amd "^6.22.0" + babel-plugin-transform-es2015-modules-commonjs "^6.23.0" + babel-plugin-transform-es2015-modules-systemjs "^6.23.0" + babel-plugin-transform-es2015-modules-umd "^6.23.0" + babel-plugin-transform-es2015-object-super "^6.22.0" + babel-plugin-transform-es2015-parameters "^6.23.0" + babel-plugin-transform-es2015-shorthand-properties "^6.22.0" babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.24.1" + babel-plugin-transform-es2015-sticky-regex "^6.22.0" babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.22.0" - babel-plugin-transform-es2015-unicode-regex "^6.24.1" - babel-plugin-transform-regenerator "^6.24.1" + babel-plugin-transform-es2015-typeof-symbol "^6.23.0" + babel-plugin-transform-es2015-unicode-regex "^6.22.0" + babel-plugin-transform-exponentiation-operator "^6.22.0" + babel-plugin-transform-regenerator "^6.22.0" + browserslist "^2.1.2" + invariant "^2.2.2" + semver "^5.3.0" babel-preset-flow@^6.23.0: version "6.23.0" @@ -941,7 +928,7 @@ babel-preset-flow@^6.23.0: dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" -babel-preset-react@^6.1.2: +babel-preset-react@^6.24.1: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" dependencies: @@ -952,15 +939,15 @@ babel-preset-react@^6.1.2: babel-plugin-transform-react-jsx-source "^6.22.0" babel-preset-flow "^6.23.0" -babel-preset-stage-0@6.3.13: - version "6.3.13" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-stage-0/-/babel-preset-stage-0-6.3.13.tgz#78a37c56f0b3988f2a79932dcb0ceb8ff377b0d1" +babel-preset-stage-0@^6.24.1: + version "6.24.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a" dependencies: - babel-plugin-transform-do-expressions "^6.3.13" - babel-plugin-transform-function-bind "^6.3.13" - babel-preset-stage-1 "^6.3.13" + babel-plugin-transform-do-expressions "^6.22.0" + babel-plugin-transform-function-bind "^6.22.0" + babel-preset-stage-1 "^6.24.1" -babel-preset-stage-1@^6.3.13: +babel-preset-stage-1@^6.24.1: version "6.24.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" dependencies: @@ -987,7 +974,7 @@ babel-preset-stage-3@^6.24.1: babel-plugin-transform-exponentiation-operator "^6.24.1" babel-plugin-transform-object-rest-spread "^6.22.0" -babel-register@^6.18.0, babel-register@^6.26.0, babel-register@^6.6.5: +babel-register@^6.26.0: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" dependencies: @@ -1005,14 +992,14 @@ babel-runtime@^5.0.0: dependencies: core-js "^1.0.0" -babel-runtime@^6.18.0, babel-runtime@^6.20.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: +babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" -babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.5.0, babel-template@^6.6.5: +babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.5.0: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" dependencies: @@ -1022,7 +1009,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0, babel-te babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.0.20, babel-traverse@^6.21.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0, babel-traverse@^6.6.5: +babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" dependencies: @@ -1036,7 +1023,7 @@ babel-traverse@^6.0.20, babel-traverse@^6.21.0, babel-traverse@^6.24.1, babel-tr invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.0.19, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.24.1, babel-types@^6.26.0, babel-types@^6.6.5: +babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: @@ -1045,7 +1032,7 @@ babel-types@^6.0.19, babel-types@^6.19.0, babel-types@^6.21.0, babel-types@^6.24 lodash "^4.17.4" to-fast-properties "^1.0.3" -babylon@^6.0.18, babylon@^6.11.0, babylon@^6.18.0: +babylon@^6.17.0, babylon@^6.18.0: version "6.18.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -1071,21 +1058,6 @@ big.js@^3.1.3: version "3.2.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" -bin-version-check@^2.1.0: - version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/bin-version-check/-/bin-version-check-2.1.0.tgz#e4e5df290b9069f7d111324031efc13fdd11a5b0" - dependencies: - bin-version "^1.0.0" - minimist "^1.1.0" - semver "^4.0.3" - semver-truncate "^1.0.0" - -bin-version@^1.0.0: - version "1.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/bin-version/-/bin-version-1.0.4.tgz#9eb498ee6fd76f7ab9a7c160436f89579435d78e" - dependencies: - find-versions "^1.0.0" - binary-extensions@^1.0.0: version "1.10.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" @@ -1096,6 +1068,10 @@ block-stream@*: dependencies: inherits "~2.0.0" +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: + version "4.11.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + boom@0.4.x: version "0.4.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" @@ -1135,15 +1111,63 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" +brorand@^1.0.1: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + "browser-request@>= 0.3.1 < 0.4.0": version "0.3.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browser-request/-/browser-request-0.3.3.tgz#9ece5b5aca89a29932242e18bf933def9876cc17" -browserify-aes@0.4.0: - version "0.4.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-aes/-/browserify-aes-0.4.0.tgz#067149b668df31c4b58533e02d01e806d8608e2c" +browser-stdout@1.3.0: + version "1.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + +browserify-aes@^1.0.0, browserify-aes@^1.0.4: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +browserify-cipher@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + dependencies: + browserify-aes "^1.0.4" + browserify-des "^1.0.0" + evp_bytestokey "^1.0.0" + +browserify-des@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + dependencies: + cipher-base "^1.0.1" + des.js "^1.0.0" + inherits "^2.0.1" + +browserify-rsa@^4.0.0: + version "4.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + dependencies: + bn.js "^4.1.0" + randombytes "^2.0.1" + +browserify-sign@^4.0.0: + version "4.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" dependencies: + bn.js "^4.1.1" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.2" + elliptic "^6.0.0" inherits "^2.0.1" + parse-asn1 "^5.0.0" browserify-zlib@^0.1.4: version "0.1.4" @@ -1151,7 +1175,18 @@ browserify-zlib@^0.1.4: dependencies: pako "~0.2.0" -buffer@^4.9.0: +browserslist@^2.1.2: + version "2.8.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserslist/-/browserslist-2.8.0.tgz#27d64028130a2e8585ca96f7c3b7730eff4de493" + dependencies: + caniuse-lite "^1.0.30000758" + electron-to-chromium "^1.3.27" + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + +buffer@^4.3.0: version "4.9.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" dependencies: @@ -1159,7 +1194,7 @@ buffer@^4.9.0: ieee754 "^1.1.4" isarray "^1.0.0" -builtin-modules@^1.0.0: +builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -1167,20 +1202,27 @@ builtin-status-codes@^3.0.0: version "3.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" +caller-path@^0.1.0: + version "0.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" + callsites "^0.2.0" + +callsites@^0.2.0: + version "0.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" camelcase@^1.0.2: version "1.2.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" -camelcase@^2.0.0: - version "2.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" +camelcase@^4.1.0: + version "4.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +caniuse-lite@^1.0.30000758: + version "1.0.30000760" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/caniuse-lite/-/caniuse-lite-1.0.30000760.tgz#ec720395742f1c7ec8947fd6dd2604e77a8f98ff" caseless@~0.12.0: version "0.12.0" @@ -1200,17 +1242,7 @@ chai@^2.3.0: assertion-error "1.0.0" deep-eql "0.1.3" -chalk@1.1.1: - version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/chalk/-/chalk-1.1.1.tgz#509afb67066e7499f7eb3535c77445772ae2d019" - dependencies: - ansi-styles "^2.1.0" - escape-string-regexp "^1.0.2" - has-ansi "^2.0.0" - strip-ansi "^3.0.0" - supports-color "^2.0.0" - -chalk@^1.0.0, chalk@^1.1.3: +chalk@^1.1.3: version "1.1.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -1220,7 +1252,15 @@ chalk@^1.0.0, chalk@^1.1.3: strip-ansi "^3.0.0" supports-color "^2.0.0" -chokidar@^1.0.0: +chalk@^2.0.0, chalk@^2.1.0: + version "2.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + +chokidar@^1.6.1, chokidar@^1.7.0: version "1.7.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: @@ -1235,6 +1275,13 @@ chokidar@^1.0.0: optionalDependencies: fsevents "^1.0.0" +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + circular-json@^0.3.1: version "0.3.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" @@ -1243,15 +1290,15 @@ classnames@^2.1.1: version "2.2.5" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" -cli-cursor@^1.0.1: - version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" +cli-cursor@^2.1.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" dependencies: - restore-cursor "^1.0.1" + restore-cursor "^2.0.0" -cli-width@^1.0.1: - version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cli-width/-/cli-width-1.1.1.tgz#a4d293ef67ebb7b88d4a4d42c0ccf00c4d1e366d" +cli-width@^2.0.0: + version "2.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" cliui@^2.1.0: version "2.1.0" @@ -1261,9 +1308,13 @@ cliui@^2.1.0: right-align "^0.1.1" wordwrap "0.0.2" -clone@^1.0.2: - version "1.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/clone/-/clone-1.0.3.tgz#298d7e2231660f40c003c2ed3140decf3f53085f" +cliui@^3.2.0: + version "3.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" co@^4.6.0: version "4.6.0" @@ -1273,6 +1324,16 @@ code-point-at@^1.0.0: version "1.1.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" +color-convert@^1.9.0: + version "1.9.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" @@ -1285,18 +1346,14 @@ combined-stream@~0.0.4: dependencies: delayed-stream "0.0.5" -commander@0.6.1: - version "0.6.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/commander/-/commander-0.6.1.tgz#fa68a14f6a945d54dbbe50d8cdb3320e9e3b1a06" - -commander@2.3.0: - version "2.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/commander/-/commander-2.3.0.tgz#fd430e889832ec353b9acd1de217c11cb3eef873" - -commander@^2.5.0, commander@^2.8.1: +commander@2.11.0, commander@^2.11.0, commander@^2.5.0: version "2.11.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" +commondir@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + commoner@^0.10.1: version "0.10.8" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" @@ -1315,7 +1372,7 @@ concat-map@0.0.1: version "0.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.4.6: +concat-stream@^1.6.0: version "1.6.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: @@ -1337,7 +1394,11 @@ constants-browserify@^1.0.0: version "1.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" -convert-source-map@^1.1.0, convert-source-map@^1.5.0: +contains-path@^0.1.0: + version "0.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + +convert-source-map@^1.5.0: version "1.5.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" @@ -1362,6 +1423,33 @@ coveralls@2.11.4: log-driver "1.2.4" request "2.40.0" +create-ecdh@^4.0.0: + version "4.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + dependencies: + bn.js "^4.1.0" + elliptic "^6.0.0" + +create-hash@^1.1.0, create-hash@^1.1.2: + version "1.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + ripemd160 "^2.0.0" + sha.js "^2.4.0" + +create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: + version "1.1.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + create-react-class@^15.6.0: version "15.6.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a" @@ -1370,6 +1458,14 @@ create-react-class@^15.6.0: loose-envify "^1.3.1" object-assign "^4.1.1" +cross-spawn@^5.0.1, cross-spawn@^5.1.0: + version "5.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cryptiles@0.2.x: version "0.2.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" @@ -1388,14 +1484,21 @@ cryptiles@3.x.x: dependencies: boom "5.x.x" -crypto-browserify@3.3.0: - version "3.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/crypto-browserify/-/crypto-browserify-3.3.0.tgz#b9fc75bb4a0ed61dcf1cd5dae96eb30c9c3e506c" +crypto-browserify@^3.11.0: + version "3.12.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" dependencies: - browserify-aes "0.4.0" - pbkdf2-compat "2.0.1" - ripemd160 "0.2.0" - sha.js "2.2.6" + browserify-cipher "^1.0.0" + browserify-sign "^4.0.0" + create-ecdh "^4.0.0" + create-hash "^1.1.0" + create-hmac "^1.1.0" + diffie-hellman "^5.0.0" + inherits "^2.0.1" + pbkdf2 "^3.0.3" + public-encrypt "^4.0.0" + randombytes "^2.0.0" + randomfill "^1.0.3" cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0": version "0.3.2" @@ -1411,18 +1514,16 @@ ctype@0.5.3: version "0.5.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - dependencies: - array-find-index "^1.0.1" - d@1: version "1.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" dependencies: es5-ext "^0.10.9" +damerau-levenshtein@^1.0.0: + version "1.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + dashdash@^1.12.0: version "1.14.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" @@ -1433,19 +1534,19 @@ date-now@^0.1.4: version "0.1.4" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" -debug@2.2.0: - version "2.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" +debug@3.1.0, debug@^3.0.1: + version "3.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: - ms "0.7.1" + ms "2.0.0" -debug@^2.1.1, debug@^2.2.0, debug@^2.6.8: +debug@^2.2.0, debug@^2.6.8: version "2.6.9" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" -decamelize@^1.0.0, decamelize@^1.1.2: +decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -1463,6 +1564,13 @@ deep-is@~0.1.2, deep-is@~0.1.3: version "0.1.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +define-properties@^1.1.2: + version "1.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + defined@^1.0.0: version "1.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" @@ -1491,6 +1599,13 @@ delegates@^1.0.0: version "1.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" +des.js@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + dependencies: + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + detect-indent@^4.0.0: version "4.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" @@ -1508,16 +1623,31 @@ detective@^4.3.1: acorn "^4.0.3" defined "^1.0.0" -diff@1.4.0: - version "1.4.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" +diff@3.3.1: + version "3.3.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" -doctrine@^0.7.1: - version "0.7.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/doctrine/-/doctrine-0.7.2.tgz#7cb860359ba3be90e040b26b729ce4bfa654c523" +diffie-hellman@^5.0.0: + version "5.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" dependencies: - esutils "^1.1.6" - isarray "0.0.1" + bn.js "^4.1.0" + miller-rabin "^4.0.0" + randombytes "^2.0.0" + +doctrine@1.5.0: + version "1.5.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" + +doctrine@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" + dependencies: + esutils "^2.0.2" + isarray "^1.0.0" dom-serializer@0: version "0.1.0" @@ -1557,6 +1687,26 @@ ecc-jsbn@~0.1.1: dependencies: jsbn "~0.1.0" +electron-to-chromium@^1.3.27: + version "1.3.27" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d" + +elliptic@^6.0.0: + version "6.4.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + dependencies: + bn.js "^4.4.0" + brorand "^1.0.1" + hash.js "^1.0.0" + hmac-drbg "^1.0.0" + inherits "^2.0.1" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.0" + +emoji-regex@^6.1.0: + version "6.5.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" + emojis-list@^2.0.0: version "2.1.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -1567,13 +1717,14 @@ encoding@^0.1.11: dependencies: iconv-lite "~0.4.13" -enhanced-resolve@~0.9.0: - version "0.9.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/enhanced-resolve/-/enhanced-resolve-0.9.1.tgz#4d6e689b3725f86090927ccc86cd9f1635b89e2e" +enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" dependencies: graceful-fs "^4.1.2" - memory-fs "^0.2.0" - tapable "^0.1.8" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" entities@^1.1.1, entities@~1.1.1: version "1.1.1" @@ -1598,10 +1749,28 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" +es-abstract@^1.7.0: + version "1.9.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227" + dependencies: + es-to-primitive "^1.1.1" + function-bind "^1.1.1" + has "^1.0.1" + is-callable "^1.1.3" + is-regex "^1.0.4" + es-symbol@1.1.2: version "1.1.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es-symbol/-/es-symbol-1.1.2.tgz#dc346fbbf5ed1c52ad69b4ba5cb26008ae218ff5" +es-to-primitive@^1.1.1: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + dependencies: + is-callable "^1.1.1" + is-date-object "^1.0.1" + is-symbol "^1.0.1" + es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: version "0.10.35" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es5-ext/-/es5-ext-0.10.35.tgz#18ee858ce6a3c45c7d79e91c15fcca9ec568494f" @@ -1662,11 +1831,7 @@ escape-html@1.0.2: version "1.0.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c" -escape-string-regexp@1.0.2: - version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escape-string-regexp/-/escape-string-regexp-1.0.2.tgz#4dbc2fe674e71949caf3fb2695ce7f2dc1d9a8d1" - -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -1692,7 +1857,7 @@ escodegen@^1.6.1: optionalDependencies: source-map "~0.5.6" -escope@^3.3.0: +escope@^3.6.0: version "3.6.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" dependencies: @@ -1701,72 +1866,154 @@ escope@^3.3.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-airbnb@2.0.0: - version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-config-airbnb/-/eslint-config-airbnb-2.0.0.tgz#d9b32550fdced6174b067dc96d146fc0ec5fa4c3" +eslint-config-airbnb-base@^11.3.0: + version "11.3.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz#8703b11abe3c88ac7ec2b745b7fdf52e00ae680a" + dependencies: + eslint-restricted-globals "^0.1.1" + +eslint-config-airbnb@^15.1.0: + version "15.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz#fd432965a906e30139001ba830f58f73aeddae8e" + dependencies: + eslint-config-airbnb-base "^11.3.0" -eslint-plugin-react@3.11.3: - version "3.11.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-plugin-react/-/eslint-plugin-react-3.11.3.tgz#c4145e4d03ff86849352ee3720e4c263308dc503" +eslint-import-resolver-node@^0.3.1: + version "0.3.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc" + dependencies: + debug "^2.6.8" + resolve "^1.2.0" -eslint@1.10.3: - version "1.10.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint/-/eslint-1.10.3.tgz#fb19a91b13c158082bbca294b17d979bc8353a0a" +eslint-loader@^1.9.0: + version "1.9.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-loader/-/eslint-loader-1.9.0.tgz#7e1be9feddca328d3dcfaef1ad49d5beffe83a13" dependencies: - chalk "^1.0.0" - concat-stream "^1.4.6" - debug "^2.1.1" - doctrine "^0.7.1" - escape-string-regexp "^1.0.2" - escope "^3.3.0" - espree "^2.2.4" - estraverse "^4.1.1" - estraverse-fb "^1.3.1" - esutils "^2.0.2" - file-entry-cache "^1.1.1" - glob "^5.0.14" - globals "^8.11.0" - handlebars "^4.0.0" - inquirer "^0.11.0" - is-my-json-valid "^2.10.0" - is-resolvable "^1.0.0" - js-yaml "3.4.5" - json-stable-stringify "^1.0.0" - lodash.clonedeep "^3.0.1" - lodash.merge "^3.3.2" - lodash.omit "^3.1.0" - minimatch "^3.0.0" - mkdirp "^0.5.0" + loader-fs-cache "^1.0.0" + loader-utils "^1.0.2" object-assign "^4.0.1" - optionator "^0.6.0" - path-is-absolute "^1.0.0" - path-is-inside "^1.0.1" - shelljs "^0.5.3" - strip-json-comments "~1.0.1" - text-table "~0.2.0" - user-home "^2.0.0" - xml-escape "~1.0.0" + object-hash "^1.1.4" + rimraf "^2.6.1" -espree@^2.2.4: - version "2.2.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/espree/-/espree-2.2.5.tgz#df691b9310889402aeb29cc066708c56690b854b" +eslint-module-utils@^2.1.1: + version "2.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" + dependencies: + debug "^2.6.8" + pkg-dir "^1.0.0" -esprima-fb@^15001.1.0-dev-harmony-fb: - version "15001.1.0-dev-harmony-fb" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" +eslint-plugin-babel@^4.1.2: + version "4.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz#79202a0e35757dd92780919b2336f1fa2fe53c1e" -esprima@2.5.x: - version "2.5.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-2.5.0.tgz#f387a46fd344c1b1a39baf8c20bfb43b6d0058cc" +eslint-plugin-import@^2.7.0: + version "2.8.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894" + dependencies: + builtin-modules "^1.1.1" + contains-path "^0.1.0" + debug "^2.6.8" + doctrine "1.5.0" + eslint-import-resolver-node "^0.3.1" + eslint-module-utils "^2.1.1" + has "^1.0.1" + lodash.cond "^4.3.0" + minimatch "^3.0.3" + read-pkg-up "^2.0.0" + +eslint-plugin-jsx-a11y@^5.0.1: + version "5.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1" + dependencies: + aria-query "^0.7.0" + array-includes "^3.0.3" + ast-types-flow "0.0.7" + axobject-query "^0.1.0" + damerau-levenshtein "^1.0.0" + emoji-regex "^6.1.0" + jsx-ast-utils "^1.4.0" + +eslint-plugin-react@^7.2.0: + version "7.4.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz#300a95861b9729c087d362dd64abcc351a74364a" + dependencies: + doctrine "^2.0.0" + has "^1.0.1" + jsx-ast-utils "^2.0.0" + prop-types "^15.5.10" + +eslint-restricted-globals@^0.1.1: + version "0.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + +eslint-scope@^3.7.1: + version "3.7.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + dependencies: + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint@^4.4.1: + version "4.10.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint/-/eslint-4.10.0.tgz#f25d0d7955c81968c2309aa5c9a229e045176bb7" + dependencies: + ajv "^5.2.0" + babel-code-frame "^6.22.0" + chalk "^2.1.0" + concat-stream "^1.6.0" + cross-spawn "^5.1.0" + debug "^3.0.1" + doctrine "^2.0.0" + eslint-scope "^3.7.1" + espree "^3.5.1" + esquery "^1.0.0" + estraverse "^4.2.0" + esutils "^2.0.2" + file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" + glob "^7.1.2" + globals "^9.17.0" + ignore "^3.3.3" + imurmurhash "^0.1.4" + inquirer "^3.0.6" + is-resolvable "^1.0.0" + js-yaml "^3.9.1" + json-stable-stringify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.4" + minimatch "^3.0.2" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.2" + path-is-inside "^1.0.2" + pluralize "^7.0.0" + progress "^2.0.0" + require-uncached "^1.0.3" + semver "^5.3.0" + strip-ansi "^4.0.0" + strip-json-comments "~2.0.1" + table "^4.0.1" + text-table "~0.2.0" + +espree@^3.5.1: + version "3.5.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e" + dependencies: + acorn "^5.1.1" + acorn-jsx "^3.0.0" + +esprima-fb@^15001.1.0-dev-harmony-fb: + version "15001.1.0-dev-harmony-fb" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" + +esprima@2.5.x: + version "2.5.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-2.5.0.tgz#f387a46fd344c1b1a39baf8c20bfb43b6d0058cc" esprima@^1.2.2: version "1.2.5" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9" -esprima@^2.6.0: - version "2.7.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - esprima@^3.1.3, esprima@~3.1.0: version "3.1.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -1779,6 +2026,12 @@ esprima@^4.0.0: version "1.0.4" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" +esquery@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + dependencies: + estraverse "^4.0.0" + esrecurse@^4.1.0: version "4.2.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" @@ -1786,15 +2039,11 @@ esrecurse@^4.1.0: estraverse "^4.1.0" object-assign "^4.0.1" -estraverse-fb@^1.3.1: - version "1.3.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/estraverse-fb/-/estraverse-fb-1.3.2.tgz#d323a4cb5e5ac331cea033413a9253e1643e07c4" - estraverse@^1.9.1: version "1.9.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" -estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -1821,9 +2070,24 @@ events@^1.0.0: version "1.1.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" -exit-hook@^1.0.0: - version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" +evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +execa@^0.7.0: + version "0.7.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + 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" expand-brackets@^0.1.4: version "0.1.5" @@ -1841,6 +2105,14 @@ extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" +external-editor@^2.0.4: + version "2.0.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/external-editor/-/external-editor-2.0.5.tgz#52c249a3981b9ba187c7cacf5beb50bf1d91a6bc" + dependencies: + iconv-lite "^0.4.17" + jschardet "^1.4.2" + tmp "^0.0.33" + extglob@^0.3.1: version "0.3.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" @@ -1859,7 +2131,7 @@ fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" -fast-levenshtein@~1.0.0, fast-levenshtein@~1.0.6: +fast-levenshtein@~1.0.0: version "1.0.7" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz#0178dcdee023b92905193af0959e8a7639cfdcb9" @@ -1893,16 +2165,15 @@ fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.9: setimmediate "^1.0.5" ua-parser-js "^0.7.9" -figures@^1.3.5: - version "1.7.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" +figures@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" dependencies: escape-string-regexp "^1.0.5" - object-assign "^4.1.0" -file-entry-cache@^1.1.1: - version "1.3.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/file-entry-cache/-/file-entry-cache-1.3.1.tgz#44c61ea607ae4be9c1402f41f44270cbfe334ff8" +file-entry-cache@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" dependencies: flat-cache "^1.2.1" object-assign "^4.0.1" @@ -1928,6 +2199,22 @@ fill-range@^2.1.0: repeat-element "^1.1.2" repeat-string "^1.5.2" +find-cache-dir@^0.1.1: + version "0.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + dependencies: + commondir "^1.0.1" + mkdirp "^0.5.1" + pkg-dir "^1.0.0" + +find-cache-dir@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^2.0.0" + find-up@^1.0.0: version "1.1.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" @@ -1935,14 +2222,11 @@ find-up@^1.0.0: path-exists "^2.0.0" pinkie-promise "^2.0.0" -find-versions@^1.0.0: - version "1.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/find-versions/-/find-versions-1.2.1.tgz#cbde9f12e38575a0af1be1b9a2c5d5fd8f186b62" +find-up@^2.0.0, find-up@^2.1.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" dependencies: - array-uniq "^1.0.0" - get-stdin "^4.0.1" - meow "^3.5.0" - semver-regex "^1.0.0" + locate-path "^2.0.0" flat-cache@^1.2.1: version "1.3.0" @@ -1957,7 +2241,7 @@ flux@2.0.3: version "2.0.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/flux/-/flux-2.0.3.tgz#787e1aedffb34a322a60b49c57a2d23856a6de27" -flux@2.1.1: +flux@^2.1.1: version "2.1.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/flux/-/flux-2.1.1.tgz#2c6ac652d4337488968489c6586f3aff26a38ea4" dependencies: @@ -1975,6 +2259,10 @@ for-own@^0.1.4: dependencies: for-in "^1.0.1" +foreach@^2.0.5: + version "2.0.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + forever-agent@~0.5.0: version "0.5.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" @@ -2013,9 +2301,9 @@ formatio@1.1.1: dependencies: samsam "~1.1" -fs-readdir-recursive@^0.1.0: - version "0.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fs-readdir-recursive/-/fs-readdir-recursive-0.1.2.tgz#315b4fb8c1ca5b8c47defef319d073dad3568059" +fs-readdir-recursive@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" fs.realpath@^1.0.0: version "1.0.0" @@ -2045,6 +2333,14 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: mkdirp ">=0.5 0" rimraf "2" +function-bind@^1.0.2, function-bind@^1.1.1: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + gauge@~2.7.3: version "2.7.4" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -2058,19 +2354,13 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -generate-function@^2.0.0: - version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" +get-caller-file@^1.0.1: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" -get-stdin@^4.0.1: - version "4.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" +get-stream@^3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" getpass@^0.1.1: version "0.1.7" @@ -2097,14 +2387,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@3.2.11: - version "3.2.11" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/glob/-/glob-3.2.11.tgz#4a973f635b9190f715d10987d5c00fd2815ebe3d" - dependencies: - inherits "2" - minimatch "0.3" - -glob@5.x, glob@^5.0.14, glob@^5.0.15, glob@^5.0.5: +glob@5.x, glob@^5.0.15: version "5.0.15" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" dependencies: @@ -2114,7 +2397,7 @@ glob@5.x, glob@^5.0.14, glob@^5.0.15, glob@^5.0.5: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.3, glob@^7.0.5: +glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: version "7.1.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: @@ -2125,11 +2408,7 @@ glob@^7.0.3, glob@^7.0.5: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^8.11.0: - version "8.18.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/globals/-/globals-8.18.0.tgz#93d4a62bdcac38cfafafc47d6b034768cb0ffcb4" - -globals@^9.18.0: +globals@^9.17.0, globals@^9.18.0: version "9.18.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -2148,9 +2427,9 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.4: version "4.1.11" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" -growl@1.9.2: - version "1.9.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" +growl@1.10.3: + version "1.10.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" handlebars@3.0.0: version "3.0.0" @@ -2161,16 +2440,6 @@ handlebars@3.0.0: optionalDependencies: uglify-js "~2.3" -handlebars@^4.0.0: - version "4.0.11" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" - dependencies: - async "^1.4.0" - optimist "^0.6.1" - source-map "^0.4.4" - optionalDependencies: - uglify-js "^2.6" - har-schema@^1.0.5: version "1.0.5" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" @@ -2199,14 +2468,40 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" -has-flag@^1.0.0: - version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" +has-flag@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" has-unicode@^2.0.0: version "2.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" +has@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + dependencies: + function-bind "^1.0.2" + +hash-base@^2.0.0: + version "2.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + dependencies: + inherits "^2.0.1" + +hash-base@^3.0.0: + version "3.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +hash.js@^1.0.0, hash.js@^1.0.3: + version "1.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.0" + hawk@1.1.1: version "1.1.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hawk/-/hawk-1.1.1.tgz#87cd491f9b46e4e2aeaca335416766885d2d1ed9" @@ -2234,6 +2529,18 @@ hawk@~6.0.2: hoek "4.x.x" sntp "2.x.x" +he@1.1.1: + version "1.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + +hmac-drbg@^1.0.0: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + hoek@0.9.x: version "0.9.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" @@ -2296,7 +2603,7 @@ https-browserify@0.0.1: version "0.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" -iconv-lite@^0.4.5, iconv-lite@~0.4.13: +iconv-lite@^0.4.17, iconv-lite@^0.4.5, iconv-lite@~0.4.13: version "0.4.19" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" @@ -2304,15 +2611,17 @@ ieee754@^1.1.4: version "1.1.8" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" +ignore@^3.3.3: + version "3.3.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + immutable@^3.7.2, immutable@^3.7.4: version "3.8.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" -indent-string@^2.1.0: - version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - dependencies: - repeating "^2.0.0" +imurmurhash@^0.1.4: + version "0.1.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" indexof@0.0.1: version "0.0.1" @@ -2337,27 +2646,28 @@ ini@~1.3.0: version "1.3.4" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" -inquirer@^0.11.0: - version "0.11.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/inquirer/-/inquirer-0.11.4.tgz#81e3374e8361beaff2d97016206d359d0b32fa4d" - dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^1.0.1" - figures "^1.3.5" - lodash "^3.3.1" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - string-width "^1.0.1" - strip-ansi "^3.0.0" +inquirer@^3.0.6: + version "3.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + dependencies: + ansi-escapes "^3.0.0" + chalk "^2.0.0" + cli-cursor "^2.1.0" + cli-width "^2.0.0" + external-editor "^2.0.4" + figures "^2.0.0" + lodash "^4.3.0" + mute-stream "0.0.7" + run-async "^2.2.0" + rx-lite "^4.0.8" + rx-lite-aggregates "^4.0.8" + string-width "^2.1.0" + strip-ansi "^4.0.0" through "^2.3.6" -interpret@^0.6.4: - version "0.6.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/interpret/-/interpret-0.6.6.tgz#fecd7a18e7ce5ca6abfb953e1f86213a49f1625b" +interpret@^1.0.0: + version "1.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0" invariant@^2.2.2: version "2.2.2" @@ -2365,6 +2675,10 @@ invariant@^2.2.2: dependencies: loose-envify "^1.0.0" +invert-kv@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + is-arrayish@^0.2.1: version "0.2.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -2385,6 +2699,14 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" +is-callable@^1.1.1, is-callable@^1.1.3: + version "1.1.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + +is-date-object@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + is-dotfile@^1.0.0: version "1.0.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" @@ -2415,21 +2737,16 @@ is-fullwidth-code-point@^1.0.0: dependencies: number-is-nan "^1.0.0" +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" dependencies: is-extglob "^1.0.0" -is-my-json-valid@^2.10.0: - version "2.16.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - is-number@^2.1.0: version "2.1.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" @@ -2466,13 +2783,15 @@ is-primitive@^2.0.0: version "2.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" -is-promise@2.1.0: +is-promise@^2.1.0: version "2.1.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" -is-property@^1.0.0: - version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" +is-regex@^1.0.4: + version "1.0.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + dependencies: + has "^1.0.1" is-resolvable@^1.0.0: version "1.0.0" @@ -2480,26 +2799,26 @@ is-resolvable@^1.0.0: dependencies: tryit "^1.0.1" -is-stream@^1.0.1: +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" +is-symbol@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + is-typedarray@~1.0.0: version "1.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" -is-utf8@^0.2.0: - version "0.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - -isarray@0.0.1: - version "0.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" +isexe@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + iso@^4.1.0: version "4.2.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/iso/-/iso-4.2.0.tgz#528a6aad29cd4663f589e16cd1e148f38a7eecdb" @@ -2542,13 +2861,6 @@ istanbul@0.3.19: which "1.0.x" wordwrap "0.0.x" -jade@0.26.3: - version "0.26.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jade/-/jade-0.26.3.tgz#8f10d7977d8d79f2f6ff862a81b0513ccb25686c" - dependencies: - commander "0.6.1" - mkdirp "0.3.0" - js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" @@ -2560,14 +2872,7 @@ js-yaml@3.0.1: argparse "~ 0.1.11" esprima "~ 1.0.2" -js-yaml@3.4.5: - version "3.4.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/js-yaml/-/js-yaml-3.4.5.tgz#c3403797df12b91866574f2de23646fe8cafb44d" - dependencies: - argparse "^1.0.2" - esprima "^2.6.0" - -js-yaml@3.x: +js-yaml@3.x, js-yaml@^3.9.1: version "3.10.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" dependencies: @@ -2578,11 +2883,15 @@ jsbn@~0.1.0: version "0.1.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" -jsdom@6.3.0: - version "6.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsdom/-/jsdom-6.3.0.tgz#0470e6c093f5d9f7d2f91236b7834dbbf56b964d" +jschardet@^1.4.2: + version "1.6.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jschardet/-/jschardet-1.6.0.tgz#c7d1a71edcff2839db2f9ec30fc5d5ebd3c1a678" + +jsdom@^6.3.0: + version "6.5.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsdom/-/jsdom-6.5.1.tgz#b6064d6a7651081af41d576edc56bc51e00122c0" dependencies: - acorn "^1.2.1" + acorn "^2.4.0" acorn-globals "^1.0.4" browser-request ">= 0.3.1 < 0.4.0" cssom ">= 0.3.0 < 0.4.0" @@ -2593,7 +2902,7 @@ jsdom@6.3.0: parse5 "^1.4.2" request "^2.55.0" symbol-tree ">= 3.1.0 < 4.0.0" - tough-cookie "^1.1.0" + tough-cookie "^2.0.0" whatwg-url-compat "~0.6.5" xml-name-validator ">= 2.0.1 < 3.0.0" xmlhttprequest ">= 1.6.0 < 2.0.0" @@ -2607,6 +2916,10 @@ jsesc@~0.5.0: version "0.5.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" +json-loader@^0.5.4: + version "0.5.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + json-schema-traverse@^0.3.0: version "0.3.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" @@ -2615,7 +2928,7 @@ json-schema@0.2.3: version "0.2.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: +json-stable-stringify@^1.0.1: version "1.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" dependencies: @@ -2633,10 +2946,6 @@ jsonify@~0.0.0: version "0.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" -jsonpointer@^4.0.0: - version "4.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - jsprim@^1.2.2: version "1.4.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -2656,6 +2965,16 @@ jstransform@^11.0.3: object-assign "^2.0.0" source-map "^0.4.2" +jsx-ast-utils@^1.4.0: + version "1.4.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" + +jsx-ast-utils@^2.0.0: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + dependencies: + array-includes "^3.0.3" + kind-of@^3.0.2: version "3.2.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -2672,10 +2991,23 @@ lazy-cache@^1.0.3: version "1.0.4" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" +lcid@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + dependencies: + invert-kv "^1.0.0" + lcov-parse@0.0.6: version "0.0.6" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lcov-parse/-/lcov-parse-0.0.6.tgz#819e5da8bf0791f9d3f39eea5ed1868187f11175" +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + levn@~0.2.5: version "0.2.5" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/levn/-/levn-0.2.5.tgz#ba8d339d0ca4a610e3a3f145b9caf48807155054" @@ -2683,33 +3015,27 @@ levn@~0.2.5: prelude-ls "~1.1.0" type-check "~0.3.1" -levn@~0.3.0: - version "0.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" +load-json-file@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" + strip-bom "^3.0.0" -loader-utils@^0.2.11: - version "0.2.17" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" +loader-fs-cache@^1.0.0: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc" dependencies: - big.js "^3.1.3" - emojis-list "^2.0.0" - json5 "^0.5.0" - object-assign "^4.0.1" + find-cache-dir "^0.1.1" + mkdirp "0.5.1" + +loader-runner@^2.3.0: + version "2.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" -loader-utils@^1.0.2: +loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.1.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" dependencies: @@ -2717,209 +3043,18 @@ loader-utils@^1.0.2: emojis-list "^2.0.0" json5 "^0.5.0" -lodash._arraycopy@^3.0.0: - version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" - -lodash._arrayeach@^3.0.0: - version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" - -lodash._arraymap@^3.0.0: - version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._arraymap/-/lodash._arraymap-3.0.0.tgz#1a8fd0f4c0df4b61dea076d717cdc97f0a3c3e66" - -lodash._baseassign@^3.0.0: - version "3.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" - dependencies: - lodash._basecopy "^3.0.0" - lodash.keys "^3.0.0" - -lodash._baseclone@^3.0.0: - version "3.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._baseclone/-/lodash._baseclone-3.3.0.tgz#303519bf6393fe7e42f34d8b630ef7794e3542b7" - dependencies: - lodash._arraycopy "^3.0.0" - lodash._arrayeach "^3.0.0" - lodash._baseassign "^3.0.0" - lodash._basefor "^3.0.0" - lodash.isarray "^3.0.0" - lodash.keys "^3.0.0" - -lodash._basecopy@^3.0.0: - version "3.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" - -lodash._basedifference@^3.0.0: - version "3.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._basedifference/-/lodash._basedifference-3.0.3.tgz#f2c204296c2a78e02b389081b6edcac933cf629c" - dependencies: - lodash._baseindexof "^3.0.0" - lodash._cacheindexof "^3.0.0" - lodash._createcache "^3.0.0" - -lodash._baseflatten@^3.0.0: - version "3.1.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz#0770ff80131af6e34f3b511796a7ba5214e65ff7" - dependencies: - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash._basefor@^3.0.0: - version "3.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" - -lodash._baseindexof@^3.0.0: - version "3.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - -lodash._bindcallback@^3.0.0: - version "3.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - -lodash._cacheindexof@^3.0.0: - version "3.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - -lodash._createassigner@^3.0.0: - version "3.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" - dependencies: - lodash._bindcallback "^3.0.0" - lodash._isiterateecall "^3.0.0" - lodash.restparam "^3.0.0" - -lodash._createcache@^3.0.0: - version "3.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - dependencies: - lodash._getnative "^3.0.0" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - -lodash._pickbyarray@^3.0.0: - version "3.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._pickbyarray/-/lodash._pickbyarray-3.0.2.tgz#1f898d9607eb560b0e167384b77c7c6d108aa4c5" - -lodash._pickbycallback@^3.0.0: - version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash._pickbycallback/-/lodash._pickbycallback-3.0.0.tgz#ff61b9a017a7b3af7d30e6c53de28afa19b8750a" - dependencies: - lodash._basefor "^3.0.0" - lodash.keysin "^3.0.0" - -lodash.assign@^3.2.0: - version "3.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" - dependencies: - lodash._baseassign "^3.0.0" - lodash._createassigner "^3.0.0" - lodash.keys "^3.0.0" - -lodash.clonedeep@^3.0.1: - version "3.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.clonedeep/-/lodash.clonedeep-3.0.2.tgz#a0a1e40d82a5ea89ff5b147b8444ed63d92827db" - dependencies: - lodash._baseclone "^3.0.0" - lodash._bindcallback "^3.0.0" - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - -lodash.isplainobject@^3.0.0: - version "3.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5" - dependencies: - lodash._basefor "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.keysin "^3.0.0" - -lodash.istypedarray@^3.0.0: - version "3.0.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" - -lodash.keys@^3.0.0: - version "3.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" - dependencies: - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.keysin@^3.0.0: - version "3.0.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f" - dependencies: - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash.merge@^3.3.2: - version "3.3.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994" - dependencies: - lodash._arraycopy "^3.0.0" - lodash._arrayeach "^3.0.0" - lodash._createassigner "^3.0.0" - lodash._getnative "^3.0.0" - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - lodash.isplainobject "^3.0.0" - lodash.istypedarray "^3.0.0" - lodash.keys "^3.0.0" - lodash.keysin "^3.0.0" - lodash.toplainobject "^3.0.0" - -lodash.omit@^3.1.0: - version "3.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.omit/-/lodash.omit-3.1.0.tgz#897fe382e6413d9ac97c61f78ed1e057a00af9f3" - dependencies: - lodash._arraymap "^3.0.0" - lodash._basedifference "^3.0.0" - lodash._baseflatten "^3.0.0" - lodash._bindcallback "^3.0.0" - lodash._pickbyarray "^3.0.0" - lodash._pickbycallback "^3.0.0" - lodash.keysin "^3.0.0" - lodash.restparam "^3.0.0" - -lodash.pick@^3.1.0: - version "3.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.pick/-/lodash.pick-3.1.0.tgz#f252a855b2046b61bcd3904b26f76bd2efc65550" - dependencies: - lodash._baseflatten "^3.0.0" - lodash._bindcallback "^3.0.0" - lodash._pickbyarray "^3.0.0" - lodash._pickbycallback "^3.0.0" - lodash.restparam "^3.0.0" - -lodash.restparam@^3.0.0: - version "3.6.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - -lodash.toplainobject@^3.0.0: - version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d" +locate-path@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" dependencies: - lodash._basecopy "^3.0.0" - lodash.keysin "^3.0.0" + p-locate "^2.0.0" + path-exists "^3.0.0" -lodash@^3.2.0, lodash@^3.3.1: - version "3.10.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" +lodash.cond@^4.3.0: + version "4.5.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" -lodash@^4.17.4, lodash@^4.2.0: +lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0: version "4.17.4" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -2927,12 +3062,6 @@ log-driver@1.2.4: version "1.2.4" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/log-driver/-/log-driver-1.2.4.tgz#2d62d7faef45d8a71341961a04b0761eca99cfa3" -log-symbols@^1.0.2: - version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/log-symbols/-/log-symbols-1.0.2.tgz#376ff7b58ea3086a0f09facc74617eca501e1a18" - dependencies: - chalk "^1.0.0" - lolex@1.3.2: version "1.3.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31" @@ -2947,54 +3076,46 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: dependencies: js-tokens "^3.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" +lru-cache@^4.0.1: + version "4.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lru-cache@2: - version "2.7.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lru-cache/-/lru-cache-2.7.3.tgz#6d4524e8b955f95d4f5b58851ce21dd72fb4e952" + pseudomap "^1.0.2" + yallist "^2.1.2" lunr@^0.5.9: version "0.5.12" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lunr/-/lunr-0.5.12.tgz#a2f6b7d7801cbe2ccb1696da67f1f7788f89e0c8" -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" +make-dir@^1.0.0: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" + dependencies: + pify "^3.0.0" marked@^0.3.3: version "0.3.6" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" -memory-fs@^0.2.0: - version "0.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/memory-fs/-/memory-fs-0.2.0.tgz#f2bb25368bc121e391c2520de92969caee0a0290" +md5.js@^1.3.4: + version "1.3.4" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" -memory-fs@~0.3.0: - version "0.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/memory-fs/-/memory-fs-0.3.0.tgz#7bcc6b629e3a43e871d7e29aca6ae8a7f15cbb20" +mem@^1.1.0: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" dependencies: - errno "^0.1.3" - readable-stream "^2.0.1" + mimic-fn "^1.0.0" -meow@^3.5.0: - version "3.7.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" dependencies: - 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" + errno "^0.1.3" + readable-stream "^2.0.1" micromatch@^2.1.5: version "2.3.11" @@ -3014,6 +3135,13 @@ micromatch@^2.1.5: parse-glob "^3.0.4" regex-cache "^0.4.2" +miller-rabin@^4.0.0: + version "4.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + dependencies: + bn.js "^4.0.0" + brorand "^1.0.1" + mime-db@~1.30.0: version "1.30.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" @@ -3032,14 +3160,19 @@ mime@~1.2.11: version "1.2.11" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" -minimatch@0.3: - version "0.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimatch/-/minimatch-0.3.0.tgz#275d8edaac4f1bb3326472089e7949c8394699dd" - dependencies: - lru-cache "2" - sigmund "~1.0.0" +mimic-fn@^1.0.0: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + +minimalistic-assert@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" -"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: +minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: @@ -3055,7 +3188,7 @@ minimist@0.0.8: version "0.0.8" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" -minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: +minimist@^1.2.0: version "1.2.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" @@ -3063,47 +3196,43 @@ minimist@~0.0.1: version "0.0.10" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" -mkdirp@0.3.0: - version "0.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" - mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" -mocha@^2.2.4: - version "2.5.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mocha/-/mocha-2.5.3.tgz#161be5bdeb496771eb9b35745050b622b5aefc58" - dependencies: - commander "2.3.0" - debug "2.2.0" - diff "1.4.0" - escape-string-regexp "1.0.2" - glob "3.2.11" - growl "1.9.2" - jade "0.26.3" +mocha@^4.0.1: + version "4.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mocha/-/mocha-4.0.1.tgz#0aee5a95cf69a4618820f5e51fa31717117daf1b" + dependencies: + browser-stdout "1.3.0" + commander "2.11.0" + debug "3.1.0" + diff "3.3.1" + escape-string-regexp "1.0.5" + glob "7.1.2" + growl "1.10.3" + he "1.1.1" mkdirp "0.5.1" - supports-color "1.2.0" - to-iso-string "0.0.2" - -ms@0.7.1: - version "0.7.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + supports-color "4.4.0" ms@2.0.0: version "2.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" -mute-stream@0.0.5: - version "0.0.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" +mute-stream@0.0.7: + version "0.0.7" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" nan@^2.3.0: version "2.7.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" +natural-compare@^1.4.0: + version "1.4.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + node-fetch@^1.0.1: version "1.7.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" @@ -3111,16 +3240,16 @@ node-fetch@^1.0.1: encoding "^0.1.11" is-stream "^1.0.1" -node-libs-browser@^0.7.0: - version "0.7.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/node-libs-browser/-/node-libs-browser-0.7.0.tgz#3e272c0819e308935e26674408d7af0e1491b83b" +node-libs-browser@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" dependencies: assert "^1.1.1" browserify-zlib "^0.1.4" - buffer "^4.9.0" + buffer "^4.3.0" console-browserify "^1.1.0" constants-browserify "^1.0.0" - crypto-browserify "3.3.0" + crypto-browserify "^3.11.0" domain-browser "^1.1.1" events "^1.0.0" https-browserify "0.0.1" @@ -3172,7 +3301,7 @@ nopt@^4.0.1: abbrev "1" osenv "^0.1.4" -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: +normalize-package-data@^2.3.2: version "2.4.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: @@ -3187,6 +3316,12 @@ normalize-path@^2.0.0, normalize-path@^2.0.1: dependencies: remove-trailing-separator "^1.0.1" +npm-run-path@^2.0.0: + version "2.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + npmlog@^4.0.2: version "4.1.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" @@ -3220,6 +3355,14 @@ object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" +object-hash@^1.1.4: + version "1.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/object-hash/-/object-hash-1.2.0.tgz#e96af0e96981996a1d47f88ead8f74f1ebc4422b" + +object-keys@^1.0.8: + version "1.0.11" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + object.omit@^2.0.0: version "2.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -3233,11 +3376,13 @@ once@1.x, once@^1.3.0, once@^1.3.3: dependencies: wrappy "1" -onetime@^1.0.0: - version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" +onetime@^2.0.0: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + dependencies: + mimic-fn "^1.0.0" -optimist@^0.6.1, optimist@~0.6.0: +optimist@^0.6.1: version "0.6.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" dependencies: @@ -3261,18 +3406,7 @@ optionator@^0.5.0: type-check "~0.3.1" wordwrap "~0.0.2" -optionator@^0.6.0: - version "0.6.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/optionator/-/optionator-0.6.0.tgz#b63ecbbf0e315fad4bc9827b45dc7ba45284fcb6" - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~1.0.6" - levn "~0.2.5" - prelude-ls "~1.1.1" - type-check "~0.3.1" - wordwrap "~0.0.2" - -optionator@^0.8.1: +optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: @@ -3291,7 +3425,15 @@ os-homedir@^1.0.0: version "1.0.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1: +os-locale@^2.0.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -3302,7 +3444,7 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -output-file-sync@^1.1.0: +output-file-sync@^1.1.2: version "1.1.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" dependencies: @@ -3310,10 +3452,34 @@ output-file-sync@^1.1.0: mkdirp "^0.5.1" object-assign "^4.1.0" +p-finally@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +p-limit@^1.1.0: + version "1.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + +p-locate@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + dependencies: + p-limit "^1.1.0" + pako@~0.2.0: version "0.2.9" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" +parse-asn1@^5.0.0: + version "5.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + dependencies: + asn1.js "^4.0.0" + browserify-aes "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.0" + pbkdf2 "^3.0.3" + parse-glob@^3.0.4: version "3.0.4" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -3337,35 +3503,47 @@ path-browserify@0.0.0: version "0.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" -path-exists@^1.0.0: - version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-exists/-/path-exists-1.0.0.tgz#d5a8998eb71ef37a74c34eb0d9eba6e878eea081" - path-exists@^2.0.0: version "2.1.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" dependencies: pinkie-promise "^2.0.0" +path-exists@^3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1: +path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" -path-type@^1.0.0: - version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" +path-key@^2.0.0: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-parse@^1.0.5: + version "1.0.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + +path-type@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" dependencies: - graceful-fs "^4.1.2" pify "^2.0.0" - pinkie-promise "^2.0.0" -pbkdf2-compat@2.0.1: - version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pbkdf2-compat/-/pbkdf2-compat-2.0.1.tgz#b6e0c8fa99494d94e0511575802a59a5c142f288" +pbkdf2@^3.0.3: + version "3.0.14" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" performance-now@^0.2.0: version "0.2.0" @@ -3379,6 +3557,10 @@ pify@^2.0.0: version "2.3.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" +pify@^3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + pinkie-promise@^2.0.0: version "2.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -3389,6 +3571,22 @@ pinkie@^2.0.0: version "2.0.4" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" +pkg-dir@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + dependencies: + find-up "^1.0.0" + +pkg-dir@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + dependencies: + find-up "^2.1.0" + +pluralize@^7.0.0: + version "7.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + prelude-ls@~1.1.0, prelude-ls@~1.1.1, prelude-ls@~1.1.2: version "1.1.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -3409,6 +3607,10 @@ process@^0.11.0: version "0.11.10" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" +progress@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + promise@^7.0.3, promise@^7.1.1: version "7.3.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -3427,6 +3629,20 @@ prr@~0.0.0: version "0.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" +pseudomap@^1.0.2: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +public-encrypt@^4.0.0: + version "4.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + dependencies: + bn.js "^4.1.0" + browserify-rsa "^4.0.0" + create-hash "^1.1.0" + parse-asn1 "^5.0.0" + randombytes "^2.0.1" + punycode@1.3.2: version "1.3.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" @@ -3466,6 +3682,19 @@ randomatic@^1.1.3: is-number "^3.0.0" kind-of "^4.0.0" +randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: + version "2.0.5" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" + dependencies: + safe-buffer "^5.1.0" + +randomfill@^1.0.3: + version "1.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62" + dependencies: + randombytes "^2.0.5" + safe-buffer "^5.1.0" + rc@^1.1.7: version "1.2.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" @@ -3506,20 +3735,20 @@ react@~15.6.2: object-assign "^4.1.0" prop-types "^15.5.10" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" + find-up "^2.0.0" + read-pkg "^2.0.0" -read-pkg@^1.0.0: - version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" +read-pkg@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" dependencies: - load-json-file "^1.0.0" + load-json-file "^2.0.0" normalize-package-data "^2.3.2" - path-type "^1.0.0" + path-type "^2.0.0" readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6: version "2.3.3" @@ -3542,14 +3771,6 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" -readline2@^1.0.1: - version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" - recast@^0.11.17: version "0.11.23" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" @@ -3559,13 +3780,6 @@ recast@^0.11.17: private "~0.1.5" source-map "~0.5.0" -redent@^1.0.0: - version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - regenerate@^1.2.1: version "1.3.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" @@ -3674,7 +3888,7 @@ request@2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@^2.55.0, request@^2.65.0: +request@^2.55.0: version "2.83.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" dependencies: @@ -3701,16 +3915,41 @@ request@^2.55.0, request@^2.65.0: tunnel-agent "^0.6.0" uuid "^3.1.0" +require-directory@^2.1.1: + version "2.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + +require-main-filename@^1.0.1: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + +require-uncached@^1.0.3: + version "1.0.3" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + dependencies: + caller-path "^0.1.0" + resolve-from "^1.0.0" + +resolve-from@^1.0.0: + version "1.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + resolve@1.1.x: version "1.1.7" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -restore-cursor@^1.0.1: - version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" +resolve@^1.2.0: + version "1.5.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + dependencies: + path-parse "^1.0.5" + +restore-cursor@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" + onetime "^2.0.0" + signal-exit "^3.0.2" right-align@^0.1.1: version "0.1.3" @@ -3724,21 +3963,30 @@ rimraf@2, rimraf@^2.2.8, rimraf@^2.3.2, rimraf@^2.5.1, rimraf@^2.6.1: dependencies: glob "^7.0.5" -ripemd160@0.2.0: - version "0.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce" +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + dependencies: + hash-base "^2.0.0" + inherits "^2.0.1" -run-async@^0.1.0: - version "0.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" +run-async@^2.2.0: + version "2.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" dependencies: - once "^1.3.0" + is-promise "^2.1.0" -rx-lite@^3.1.2: - version "3.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" +rx-lite-aggregates@^4.0.8: + version "4.0.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + dependencies: + rx-lite "*" -safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: +rx-lite@*, rx-lite@^4.0.8: + version "4.0.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" @@ -3750,25 +3998,17 @@ samsam@~1.1: version "1.1.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/samsam/-/samsam-1.1.3.tgz#9f5087419b4d091f232571e7fa52e90b0f552621" -semver-regex@^1.0.0: - version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/semver-regex/-/semver-regex-1.0.0.tgz#92a4969065f9c70c694753d55248fc68f8f652c9" - -semver-truncate@^1.0.0: - version "1.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/semver-truncate/-/semver-truncate-1.1.2.tgz#57f41de69707a62709a7e0104ba2117109ea47e8" +schema-utils@^0.3.0: + version "0.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" dependencies: - semver "^5.3.0" + ajv "^5.0.0" "semver@2 || 3 || 4 || 5", semver@^5.3.0: version "5.4.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" -semver@^4.0.3: - version "4.3.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/semver/-/semver-4.3.6.tgz#300bc6e0e86374f7ba61068b5b1ecd57fc6532da" - -set-blocking@~2.0.0: +set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -3780,19 +4020,24 @@ setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" -sha.js@2.2.6: - version "2.2.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba" +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.9" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d" + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" -shelljs@^0.5.3: - version "0.5.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/shelljs/-/shelljs-0.5.3.tgz#c54982b996c76ef0c1e6b59fbdc5825f5b713113" +shebang-command@^1.2.0: + version "1.2.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" -sigmund@~1.0.0: - version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sigmund/-/sigmund-1.0.1.tgz#3ff21f198cad2175f9f3b781853fd94d0d19b590" +shebang-regex@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" -signal-exit@^3.0.0: +signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -3809,6 +4054,12 @@ slash@^1.0.0: version "1.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" +slice-ansi@1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + dependencies: + is-fullwidth-code-point "^2.0.0" + sntp@0.2.x: version "0.2.4" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" @@ -3827,9 +4078,9 @@ sntp@2.x.x: dependencies: hoek "4.x.x" -source-list-map@~0.1.7: - version "0.1.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-list-map/-/source-list-map-0.1.8.tgz#c550b2ab5427f6b3f21f5afead88c4f5587b2106" +source-list-map@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" source-map-support@^0.4.15: version "0.4.18" @@ -3843,16 +4094,20 @@ source-map@^0.1.40, source-map@~0.1.40, source-map@~0.1.7: dependencies: amdefine ">=0.0.4" -source-map@^0.4.2, source-map@^0.4.4, source-map@~0.4.1: +source-map@^0.4.2: version "0.4.4" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.6: +source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.6: version "0.5.7" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" +source-map@~0.6.1: + version "0.6.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + spawn-command@^0.0.2: version "0.0.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" @@ -3914,6 +4169,13 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: + version "2.1.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + string_decoder@^0.10.25: version "0.10.31" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" @@ -3934,57 +4196,69 @@ strip-ansi@^3.0.0, strip-ansi@^3.0.1: dependencies: ansi-regex "^2.0.0" -strip-bom@^2.0.0: - version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" +strip-ansi@^4.0.0: + version "4.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" dependencies: - is-utf8 "^0.2.0" + ansi-regex "^3.0.0" -strip-indent@^1.0.1: - version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - dependencies: - get-stdin "^4.0.1" +strip-bom@^3.0.0: + version "3.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" -strip-json-comments@~1.0.1: - version "1.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-json-comments/-/strip-json-comments-1.0.4.tgz#1e15fbcac97d3ee99bf2d73b4c656b082bbafb91" +strip-eof@^1.0.0: + version "1.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" strip-json-comments@~2.0.1: version "2.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" -style-loader@^0.13.0: - version "0.13.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/style-loader/-/style-loader-0.13.2.tgz#74533384cf698c7104c7951150b49717adc2f3bb" +style-loader@^0.18.2: + version "0.18.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/style-loader/-/style-loader-0.18.2.tgz#cc31459afbcd6d80b7220ee54b291a9fd66ff5eb" dependencies: loader-utils "^1.0.2" - -supports-color@1.2.0: - version "1.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-1.2.0.tgz#ff1ed1e61169d06b3cf2d588e188b18d8847e17e" + schema-utils "^0.3.0" supports-color@1.3.x: version "1.3.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-1.3.1.tgz#15758df09d8ff3b4acc307539fabe27095e1042d" +supports-color@4.4.0: + version "4.4.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" + dependencies: + has-flag "^2.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" -supports-color@^3.1.0: - version "3.2.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" +supports-color@^4.0.0, supports-color@^4.2.1: + version "4.5.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" dependencies: - has-flag "^1.0.0" + has-flag "^2.0.0" "symbol-tree@>= 3.1.0 < 4.0.0": version "3.2.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" -tapable@^0.1.8, tapable@~0.1.8: - version "0.1.10" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tapable/-/tapable-0.1.10.tgz#29c35707c2b70e50d07482b5d202e8ed446dafd4" +table@^4.0.1: + version "4.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + dependencies: + ajv "^5.2.3" + ajv-keywords "^2.1.0" + chalk "^2.1.0" + lodash "^4.17.4" + slice-ansi "1.0.0" + string-width "^2.1.1" + +tapable@^0.2.7: + version "0.2.8" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" tar-pack@^3.4.0: version "3.4.1" @@ -4021,6 +4295,12 @@ timers-browserify@^2.0.2: dependencies: setimmediate "^1.0.4" +tmp@^0.0.33: + version "0.0.33" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + dependencies: + os-tmpdir "~1.0.2" + to-arraybuffer@^1.0.0: version "1.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" @@ -4029,32 +4309,20 @@ to-fast-properties@^1.0.3: version "1.0.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" -to-iso-string@0.0.2: - version "0.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/to-iso-string/-/to-iso-string-0.0.2.tgz#4dc19e664dfccbe25bd8db508b00c6da158255d1" - -tough-cookie@>=0.12.0, tough-cookie@~2.3.0, tough-cookie@~2.3.3: +tough-cookie@>=0.12.0, tough-cookie@^2.0.0, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: punycode "^1.4.1" -tough-cookie@^1.1.0: - version "1.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tough-cookie/-/tough-cookie-1.2.0.tgz#9b7e9d98e769e80b5aa899d944fe44e02ebf82ad" - tr46@~0.0.1: version "0.0.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" -transmitter@3.0.1: +transmitter@^3.0.1: version "3.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/transmitter/-/transmitter-3.0.1.tgz#32e99e43d1321e49dc2e194fa75df4fe84a8b918" -trim-newlines@^1.0.0: - version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - trim-right@^1.0.1: version "1.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" @@ -4099,7 +4367,7 @@ ua-parser-js@^0.7.9: version "0.7.17" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" -uglify-js@^2.6: +uglify-js@^2.8.29: version "2.8.29" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" dependencies: @@ -4116,19 +4384,18 @@ uglify-js@~2.3: optimist "~0.3.5" source-map "~0.1.7" -uglify-js@~2.7.3: - version "2.7.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uglify-js/-/uglify-js-2.7.5.tgz#4612c0c7baaee2ba7c487de4904ae122079f2ca8" - dependencies: - async "~0.2.6" - source-map "~0.5.1" - uglify-to-browserify "~1.0.0" - yargs "~3.10.0" - uglify-to-browserify@~1.0.0: version "1.0.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" +uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" + uid-number@^0.0.6: version "0.0.6" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" @@ -4152,12 +4419,6 @@ user-home@^1.1.1: version "1.1.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" -user-home@^2.0.0: - version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" - dependencies: - os-homedir "^1.0.0" - util-deprecate@~1.0.1: version "1.0.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -4172,7 +4433,7 @@ uuid@^3.0.0, uuid@^3.1.0: version "3.1.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" -v8flags@^2.0.10: +v8flags@^2.1.1: version "2.1.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" dependencies: @@ -4199,40 +4460,47 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" -watchpack@^0.2.1: - version "0.2.9" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/watchpack/-/watchpack-0.2.9.tgz#62eaa4ab5e5ba35fdfc018275626e3c0f5e3fb0b" +watchpack@^1.4.0: + version "1.4.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" dependencies: - async "^0.9.0" - chokidar "^1.0.0" + async "^2.1.2" + chokidar "^1.7.0" graceful-fs "^4.1.2" -webpack-core@~0.6.9: - version "0.6.9" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/webpack-core/-/webpack-core-0.6.9.tgz#fc571588c8558da77be9efb6debdc5a3b172bdc2" - dependencies: - source-list-map "~0.1.7" - source-map "~0.4.1" - -webpack@^1.9.12: - version "1.15.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/webpack/-/webpack-1.15.0.tgz#4ff31f53db03339e55164a9d468ee0324968fe98" - dependencies: - acorn "^3.0.0" - async "^1.3.0" - clone "^1.0.2" - enhanced-resolve "~0.9.0" - interpret "^0.6.4" - loader-utils "^0.2.11" - memory-fs "~0.3.0" +webpack-sources@^1.0.1: + version "1.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/webpack-sources/-/webpack-sources-1.0.2.tgz#d0148ec083b3b5ccef1035a6b3ec16442983b27a" + dependencies: + source-list-map "^2.0.0" + source-map "~0.6.1" + +webpack@^3.8.1: + version "3.8.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83" + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^5.1.5" + ajv-keywords "^2.0.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" mkdirp "~0.5.0" - node-libs-browser "^0.7.0" - optimist "~0.6.0" - supports-color "^3.1.0" - tapable "~0.1.8" - uglify-js "~2.7.3" - watchpack "^0.2.1" - webpack-core "~0.6.9" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" whatwg-fetch@>=0.10.0: version "2.0.3" @@ -4248,10 +4516,20 @@ whatwg-url-compat@~0.6.5: dependencies: tr46 "~0.0.1" +which-module@^2.0.0: + version "2.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + which@1.0.x: version "1.0.9" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/which/-/which-1.0.9.tgz#460c1da0f810103d0321a9b633af9e575e64486f" +which@^1.2.9: + version "1.3.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" @@ -4274,6 +4552,13 @@ wordwrap@~1.0.0: version "1.0.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrappy@1: version "1.0.2" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" @@ -4284,10 +4569,6 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -xml-escape@~1.0.0: - version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/xml-escape/-/xml-escape-1.0.0.tgz#00963d697b2adf0c185c4e04e73174ba9b288eb2" - "xml-name-validator@>= 2.0.1 < 3.0.0": version "2.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" @@ -4300,6 +4581,38 @@ xtend@^4.0.0: version "4.0.1" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" +y18n@^3.2.1: + version "3.2.1" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + +yallist@^2.1.2: + version "2.1.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + dependencies: + camelcase "^4.1.0" + +yargs@^8.0.2: + version "8.0.2" + resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + yargs@~3.10.0: version "3.10.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" From 7d9bec0c5d258326256959685004f8853b9365bb Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 12:35:40 -0500 Subject: [PATCH 05/21] Update readme --- README.md | 7 +++++-- package.json | 6 +++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 807c9a09..5e3b96fc 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ -# alt +# modern-alt + +### Forked from [alt](https://github.com/goatslacker/alt) and modernized +We rely pretty heavily on using alt for our flux implementation and rather than trying to switch everything over to redux, we decided that it's best for us (and possibly the community) to fork alt and modernize it with the latest react/babel/webpack niceties. Given that the old alt implementation has basically been abandoned, we are trying to maintain this fork and keep it up to date, and eventually make it compatible with React 16+ Check out the [API Reference](http://alt.js.org/docs/) for full in-depth docs. For a high-level walk-through on flux, take a look at the [Getting Started](http://alt.js.org/guide/) guide. What follows below applies only to the master branch of `alt` and not the latest distribution. Any questions? ask in the gitter room. @@ -67,7 +70,7 @@ class TodoStore { export default alt.createStore(TodoStore, 'TodoStore'); ``` -View +View Using the [connectToStores](https://github.com/altjs/utils/blob/master/src/connectToStores.js) util from [alt-utils](https://github.com/altjs/utils) package (`npm install alt-utils`) diff --git a/package.json b/package.json index 13394611..1cc39411 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "alt", - "version": "0.18.6", - "description": "A flux implementation", + "name": "modern-alt", + "version": "1.10.0", + "description": "A modern update to alt's flux implementation", "main": "lib", "jsnext:main": "src", "dependencies": { From d0911625710c599b8a0a2d6f5534d4c8dd97046b Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 14:17:35 -0500 Subject: [PATCH 06/21] Update readme and such --- README.md | 5 +---- dist/alt.js | 2 +- dist/alt.min.js | 2 +- package.json | 4 ++-- 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 5e3b96fc..7376c78e 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,4 @@ -# modern-alt - -### Forked from [alt](https://github.com/goatslacker/alt) and modernized -We rely pretty heavily on using alt for our flux implementation and rather than trying to switch everything over to redux, we decided that it's best for us (and possibly the community) to fork alt and modernize it with the latest react/babel/webpack niceties. Given that the old alt implementation has basically been abandoned, we are trying to maintain this fork and keep it up to date, and eventually make it compatible with React 16+ +# alt Check out the [API Reference](http://alt.js.org/docs/) for full in-depth docs. For a high-level walk-through on flux, take a look at the [Getting Started](http://alt.js.org/guide/) guide. What follows below applies only to the master branch of `alt` and not the latest distribution. Any questions? ask in the gitter room. diff --git a/dist/alt.js b/dist/alt.js index ac5adae9..24d51946 100644 --- a/dist/alt.js +++ b/dist/alt.js @@ -1468,7 +1468,7 @@ var AltStore = function () { if (actionHandlers) { result = handleDispatch(function () { - actionHandlers.filter(Boolean).every(function (handler) { + return actionHandlers.filter(Boolean).every(function (handler) { return handler.call(model, payload.data, payload.action) !== false; }); }, payload); diff --git a/dist/alt.min.js b/dist/alt.min.js index 3f1f9aaa..b1d04d30 100644 --- a/dist/alt.min.js +++ b/dist/alt.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Alt=e():t.Alt=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=3)}([function(t,e,n){"use strict";function r(t){var e=t.constructor;return!!t&&"[object Object]"===Object.prototype.toString.call(t)&&s(e)&&!Object.isFrozen(t)&&(e instanceof e||"AltStore"===t.type)}function i(t,e){e.forEach(function(e){Object.keys(Object(e)).forEach(function(n){t(n,e[n])})})}function o(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:{};return t===Function.prototype?e:i(Object.getPrototypeOf(t),d.assign(r(t,!0),e))}function o(t){"undefined"!=typeof console&&console.warn(new ReferenceError(t))}function s(t,e){for(var n=0,r=e;Object.hasOwnProperty.call(t,r);)n+=1,r=e+String(n);return r}function a(t){return t.replace(/[a-z]([A-Z])/g,function(t){return t[0]+"_"+t[1].toLowerCase()}).toUpperCase()}function c(t){if(void 0===t)return null;for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r0&&void 0!==arguments[0]?arguments[0]:{};s(this,t),this.config=e,this.serialize=e.serialize||JSON.stringify,this.deserialize=e.deserialize||JSON.parse,this.dispatcher=e.dispatcher||new a.Dispatcher,this.batchingFunction=e.batchingFunction||function(t){return t()},this.actions={global:{}},this.stores={},this.storeTransforms=e.storeTransforms||[],this.trapAsync=!1,this._actionsRegistry={},this._initSnapshot={},this._lastSnapshot={}}return t.prototype.dispatch=function(t,e,n){var r=this;this.batchingFunction(function(){var i=Math.random().toString(18).substr(2,16);if(t.hasOwnProperty("type")&&t.hasOwnProperty("payload")){var o={id:t.type,namespace:t.type,name:t.type};return r.dispatcher.dispatch(y.fsa(i,t.type,t.payload,o))}return t.id&&t.dispatch?y.dispatch(i,t,e,r):r.dispatcher.dispatch(y.fsa(i,t,e,n))})},t.prototype.createUnsavedStore=function(t){var e=t.displayName||"";h.createStoreConfig(this.config,t);for(var n=h.transformStore(this.storeTransforms,t),r=arguments.length,i=Array(r>1?r-1:0),o=1;o2?i-2:0),s=2;s1&&void 0!==arguments[1]?arguments[1]:{},r={},a=y.uid(this._actionsRegistry,t.displayName||t.name||"Unknown");if(l.isFunction(t)){l.assign(r,y.getPrototypeChain(t));for(var c=function(t){function e(){return s(this,e),i(this,t.apply(this,arguments))}return o(e,t),e.prototype.generateActions=function(){for(var t=arguments.length,e=Array(t),n=0;n2?u-2:0),p=2;p2?n-2:0),i=2;i2?n-2:0),i=2;i1&&void 0!==arguments[1]?arguments[1]:[];return(e.length?e:Object.keys(t.stores)).reduce(function(e,n){var r=n.displayName||n,i=t.stores[r],o=i.StoreModel.config;i.lifecycle("snapshot");var s=o.onSerialize&&o.onSerialize(i.state);return e[r]=s||i.getState(),e},{})}function o(t,e){var n=t.deserialize(t.serialize(t.stores[e].state));t._initSnapshot[e]=n,t._lastSnapshot[e]=n}function s(t,e,n){return n.reduce(function(t,n){var r=n.displayName||n;if(!e[r])throw new ReferenceError(r+" is not a valid store");return t[r]=e[r],t},{})}Object.defineProperty(e,"__esModule",{value:!0}),e.setAppState=r,e.snapshot=i,e.saveInitialSnapshot=o,e.filterSnapshots=s;var a=n(0),c=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(a)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e,n){if(n){var r=e.StoreModel.config,i=b.isFunction(n)?n(e.state):n;e.state=r.setState.call(t,e.state,i),t.alt.dispatcher.isDispatching()||t.emitChange()}}function u(t,e,n,r){return b.assign(t,m.default,{displayName:n,alt:e,dispatcher:e.dispatcher,preventDefault:function(){this.getInstance().preventDefault=!0},boundListeners:[],lifecycleEvents:{},actionListeners:{},publicMethods:{},handlesOwnErrors:!1},r)}function f(t,e){e.config=b.assign({getState:function(t){return Array.isArray(t)?t.slice():b.isMutableObject(t)?b.assign({},t):t},setState:function(t,e){return b.isMutableObject(e)?b.assign(t,e):e}},t,e.config)}function l(t,e){return t.reduce(function(t,e){return e(t)},e)}function p(t,e,n){var r=void 0,i=u({},t,n,b.assign({getInstance:function(){return r},setState:function(t){c(this,r,t)}},e));return i.bindListeners&&m.default.bindListeners.call(i,i.bindListeners),i.observe&&m.default.bindListeners.call(i,i.observe(t)),i.lifecycle&&b.eachObject(function(t,e){m.default.on.call(i,t,e)},[i.lifecycle]),r=b.assign(new _.default(t,i,void 0!==i.state?i.state:{},e),i.publicMethods,{displayName:n,config:e.config})}function h(t,e,n){var r=void 0,i=e.config,f=function(t){function e(){return o(this,e),s(this,t.apply(this,arguments))}return a(e,t),e}(e);u(f.prototype,t,n,{type:"AltStore",getInstance:function(){return r},setState:function(t){c(this,r,t)}});for(var l=arguments.length,p=Array(l>3?l-3:0),h=3;h0}})},exportPublicMethods:function(t){var e=this;s.eachObject(function(t,n){if(!s.isFunction(n))throw new TypeError("exportPublicMethods expects a function");e.publicMethods[t]=n},[t])},emitChange:function(){this.getInstance().emitChange()},on:function(t,e){"error"===t&&(this.handlesOwnErrors=!0);var n=this.lifecycleEvents[t]||(0,i.default)();return this.lifecycleEvents[t]=n,n.subscribe(e.bind(this))},bindAction:function(t,e){if(!t)throw new ReferenceError("Invalid action reference passed in");if(!s.isFunction(e))throw new TypeError("bindAction expects a function");var n=t.id?t.id:t;this.actionListeners[n]=this.actionListeners[n]||[],this.actionListeners[n].push(e.bind(this)),this.boundListeners.push(n)},bindActions:function(t){var e=this;s.eachObject(function(t,n){var r=/./,i=t.replace(r,function(t){return"on"+t[0].toUpperCase()});if(e[t]&&e[i])throw new ReferenceError("You have multiple action handlers bound to an action: "+t+" and "+i);var o=e[t]||e[i];o&&e.bindAction(n,o)},[t])},bindListeners:function(t){var e=this;s.eachObject(function(t,n){var r=e[t];if(!r)throw new ReferenceError(t+" defined but does not exist in "+e.displayName);Array.isArray(n)?n.forEach(function(t){e.bindAction(t,r)}):e.bindAction(n,r)},[t])}};e.default=a,t.exports=e.default},function(t,e,n){"use strict";function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function i(t,e,n,r,i){var o=f.uid(t._actionsRegistry,e+"."+n);t._actionsRegistry[o]=1;var a={id:o,namespace:e,name:n},u=function(e){return t.dispatch(o,e,a)},l=function(){for(var e=arguments.length,n=Array(e),o=0;o1?e-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:{};return t===Function.prototype?e:i(Object.getPrototypeOf(t),d.assign(r(t,!0),e))}function o(t){"undefined"!=typeof console&&console.warn(new ReferenceError(t))}function s(t,e){for(var n=0,r=e;Object.hasOwnProperty.call(t,r);)n+=1,r=e+String(n);return r}function a(t){return t.replace(/[a-z]([A-Z])/g,function(t){return t[0]+"_"+t[1].toLowerCase()}).toUpperCase()}function c(t){if(void 0===t)return null;for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r0&&void 0!==arguments[0]?arguments[0]:{};s(this,t),this.config=e,this.serialize=e.serialize||JSON.stringify,this.deserialize=e.deserialize||JSON.parse,this.dispatcher=e.dispatcher||new a.Dispatcher,this.batchingFunction=e.batchingFunction||function(t){return t()},this.actions={global:{}},this.stores={},this.storeTransforms=e.storeTransforms||[],this.trapAsync=!1,this._actionsRegistry={},this._initSnapshot={},this._lastSnapshot={}}return t.prototype.dispatch=function(t,e,n){var r=this;this.batchingFunction(function(){var i=Math.random().toString(18).substr(2,16);if(t.hasOwnProperty("type")&&t.hasOwnProperty("payload")){var o={id:t.type,namespace:t.type,name:t.type};return r.dispatcher.dispatch(y.fsa(i,t.type,t.payload,o))}return t.id&&t.dispatch?y.dispatch(i,t,e,r):r.dispatcher.dispatch(y.fsa(i,t,e,n))})},t.prototype.createUnsavedStore=function(t){var e=t.displayName||"";h.createStoreConfig(this.config,t);for(var n=h.transformStore(this.storeTransforms,t),r=arguments.length,i=Array(r>1?r-1:0),o=1;o2?i-2:0),s=2;s1&&void 0!==arguments[1]?arguments[1]:{},r={},a=y.uid(this._actionsRegistry,t.displayName||t.name||"Unknown");if(l.isFunction(t)){l.assign(r,y.getPrototypeChain(t));for(var c=function(t){function e(){return s(this,e),i(this,t.apply(this,arguments))}return o(e,t),e.prototype.generateActions=function(){for(var t=arguments.length,e=Array(t),n=0;n2?u-2:0),p=2;p2?n-2:0),i=2;i2?n-2:0),i=2;i1&&void 0!==arguments[1]?arguments[1]:[];return(e.length?e:Object.keys(t.stores)).reduce(function(e,n){var r=n.displayName||n,i=t.stores[r],o=i.StoreModel.config;i.lifecycle("snapshot");var s=o.onSerialize&&o.onSerialize(i.state);return e[r]=s||i.getState(),e},{})}function o(t,e){var n=t.deserialize(t.serialize(t.stores[e].state));t._initSnapshot[e]=n,t._lastSnapshot[e]=n}function s(t,e,n){return n.reduce(function(t,n){var r=n.displayName||n;if(!e[r])throw new ReferenceError(r+" is not a valid store");return t[r]=e[r],t},{})}Object.defineProperty(e,"__esModule",{value:!0}),e.setAppState=r,e.snapshot=i,e.saveInitialSnapshot=o,e.filterSnapshots=s;var a=n(0),c=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(a)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e,n){if(n){var r=e.StoreModel.config,i=b.isFunction(n)?n(e.state):n;e.state=r.setState.call(t,e.state,i),t.alt.dispatcher.isDispatching()||t.emitChange()}}function u(t,e,n,r){return b.assign(t,m.default,{displayName:n,alt:e,dispatcher:e.dispatcher,preventDefault:function(){this.getInstance().preventDefault=!0},boundListeners:[],lifecycleEvents:{},actionListeners:{},publicMethods:{},handlesOwnErrors:!1},r)}function f(t,e){e.config=b.assign({getState:function(t){return Array.isArray(t)?t.slice():b.isMutableObject(t)?b.assign({},t):t},setState:function(t,e){return b.isMutableObject(e)?b.assign(t,e):e}},t,e.config)}function l(t,e){return t.reduce(function(t,e){return e(t)},e)}function p(t,e,n){var r=void 0,i=u({},t,n,b.assign({getInstance:function(){return r},setState:function(t){c(this,r,t)}},e));return i.bindListeners&&m.default.bindListeners.call(i,i.bindListeners),i.observe&&m.default.bindListeners.call(i,i.observe(t)),i.lifecycle&&b.eachObject(function(t,e){m.default.on.call(i,t,e)},[i.lifecycle]),r=b.assign(new _.default(t,i,void 0!==i.state?i.state:{},e),i.publicMethods,{displayName:n,config:e.config})}function h(t,e,n){var r=void 0,i=e.config,f=function(t){function e(){return o(this,e),s(this,t.apply(this,arguments))}return a(e,t),e}(e);u(f.prototype,t,n,{type:"AltStore",getInstance:function(){return r},setState:function(t){c(this,r,t)}});for(var l=arguments.length,p=Array(l>3?l-3:0),h=3;h0}})},exportPublicMethods:function(t){var e=this;s.eachObject(function(t,n){if(!s.isFunction(n))throw new TypeError("exportPublicMethods expects a function");e.publicMethods[t]=n},[t])},emitChange:function(){this.getInstance().emitChange()},on:function(t,e){"error"===t&&(this.handlesOwnErrors=!0);var n=this.lifecycleEvents[t]||(0,i.default)();return this.lifecycleEvents[t]=n,n.subscribe(e.bind(this))},bindAction:function(t,e){if(!t)throw new ReferenceError("Invalid action reference passed in");if(!s.isFunction(e))throw new TypeError("bindAction expects a function");var n=t.id?t.id:t;this.actionListeners[n]=this.actionListeners[n]||[],this.actionListeners[n].push(e.bind(this)),this.boundListeners.push(n)},bindActions:function(t){var e=this;s.eachObject(function(t,n){var r=/./,i=t.replace(r,function(t){return"on"+t[0].toUpperCase()});if(e[t]&&e[i])throw new ReferenceError("You have multiple action handlers bound to an action: "+t+" and "+i);var o=e[t]||e[i];o&&e.bindAction(n,o)},[t])},bindListeners:function(t){var e=this;s.eachObject(function(t,n){var r=e[t];if(!r)throw new ReferenceError(t+" defined but does not exist in "+e.displayName);Array.isArray(n)?n.forEach(function(t){e.bindAction(t,r)}):e.bindAction(n,r)},[t])}};e.default=a,t.exports=e.default},function(t,e,n){"use strict";function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function i(t,e,n,r,i){var o=f.uid(t._actionsRegistry,e+"."+n);t._actionsRegistry[o]=1;var a={id:o,namespace:e,name:n},u=function(e){return t.dispatch(o,e,a)},l=function(){for(var e=arguments.length,n=Array(e),o=0;o Date: Thu, 9 Nov 2017 14:22:56 -0500 Subject: [PATCH 07/21] Bring back bower, update package json --- bower.json | 37 +++++++++++++++++++++++++++++++++++++ package.json | 4 ++-- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 bower.json diff --git a/bower.json b/bower.json new file mode 100644 index 00000000..4f405eba --- /dev/null +++ b/bower.json @@ -0,0 +1,37 @@ +{ + "name": "alt", + "version": "0.18.3", + "homepage": "https://github.com/goatslacker/alt", + "authors": [ + "Josh Perez " + ], + "description": "Alt is a flux implementation that is small (~4.3kb & 400 LOC), well tested, terse, insanely flexible, and forward thinking.", + "main": "dist/alt.js", + "devDependencies": { + "babel": "^6.25.0", + "coveralls": "^2.11.2", + "istanbul": "^0.3.5", + "mocha": "^2.1.0" + }, + "keywords": [ + "alt", + "es6", + "flow", + "flux", + "react", + "unidirectional" + ], + "license": "MIT", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests", + "examples", + "src", + "coverage-test.js", + "coverage", + "TODO" + ] +} diff --git a/package.json b/package.json index c151a3a3..38d720f0 100644 --- a/package.json +++ b/package.json @@ -52,9 +52,9 @@ "url": "https://github.com/ryank311/alt.git" }, "authors": [ - "Ryan King ", "Josh Perez ", - "Jonathan Lehman " + "Jonathan Lehman ", + "Ryan King " ], "license": "MIT", "scripts": { From 83b37ec8d2c9a6995c568969b65e696d1cb19b30 Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 14:25:59 -0500 Subject: [PATCH 08/21] Revert package json message for pull request --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 38d720f0..ea96d44c 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "alt", "version": "1.0.0", - "description": "A modern update to alt's flux implementation", + "description": "A flux implementation", "main": "lib", "jsnext:main": "src", "dependencies": { From b9c80f81af26884c33fe66042f39bdc82b8f415c Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 15:18:49 -0500 Subject: [PATCH 09/21] Eslint fix all the test cases --- .eslintrc | 12 +- package.json | 1 + src/index.js | 2 +- src/store/AltStore.js | 6 +- src/store/StoreMixin.js | 4 +- src/store/index.js | 10 +- src/utils/AltUtils.js | 4 +- test/actions-dump-test.js | 64 +-- test/alt-config-object.js | 114 ++--- test/async-action-test.js | 60 +-- test/async-test.js | 510 ++++++++++---------- test/babel/index.js | 703 ++++++++++++++-------------- test/batching-test.js | 192 ++++---- test/before-and-after-test.js | 143 +++--- test/bound-listeners-test.js | 140 +++--- test/browser/index.js | 95 ++-- test/config-set-get-state-test.js | 95 ++-- test/debug-alt-test.js | 48 +- test/es3-module-pattern.js | 232 ++++----- test/failed-dispatch-test.js | 139 +++--- test/functional-test.js | 250 +++++----- test/functions-test.js | 152 +++--- test/helpers/SaaM.js | 9 +- test/helpers/SampleActions.js | 4 +- test/helpers/alt.js | 5 +- test/index.js | 56 +-- test/setting-state.js | 235 +++++----- test/store-as-a-module.js | 31 +- test/store-model-test.js | 80 ++-- test/store-transforms-test.js | 52 +- test/stores-get-alt.js | 40 +- test/stores-with-colliding-names.js | 79 ++-- test/value-stores-test.js | 140 +++--- yarn.lock | 2 +- 34 files changed, 1855 insertions(+), 1854 deletions(-) diff --git a/.eslintrc b/.eslintrc index d1f6e648..0b30e896 100644 --- a/.eslintrc +++ b/.eslintrc @@ -9,11 +9,21 @@ "indent": [1, 4, { "SwitchCase": 1 }], + "comma-dangle": [2, "never"], "arrow-body-style": [2, "always"], "class-methods-use-this": 0, "no-console": 0, + "no-param-reassign": 0, + "func-names": 0, + "no-restricted-syntax": 0, + "no-plusplus": 0, + "no-continue": 0, "no-prototype-builtins": 0, - "no-underscore-dangle": 0 + "prefer-rest-params": 0, + "no-unused-vars": [2, { "args": "none" }], + "no-underscore-dangle": 0, + "react/jsx-filename-extension": 0, + "react/forbid-prop-types": 0, }, "parser": "babel-eslint" } diff --git a/package.json b/package.json index ea96d44c..5f110f16 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "dependencies": { "flux": "^2.1.1", "is-promise": "^2.1.0", + "prop-types": "^15.6.0", "transmitter": "^3.0.1" }, "devDependencies": { diff --git a/src/index.js b/src/index.js index 1617eaa9..ba8774cb 100644 --- a/src/index.js +++ b/src/index.js @@ -32,7 +32,7 @@ class Alt { const fsaDetails = { id: action.type, namespace: action.type, - name: action.type, + name: action.type }; return this.dispatcher.dispatch( utils.fsa(id, action.type, action.payload, fsaDetails), diff --git a/src/store/AltStore.js b/src/store/AltStore.js index e7c443df..16fd8a28 100644 --- a/src/store/AltStore.js +++ b/src/store/AltStore.js @@ -30,7 +30,7 @@ class AltStore { this.lifecycle('error', { error: e, payload, - state: this.state, + state: this.state }); return false; } @@ -47,7 +47,7 @@ class AltStore { this.lifecycle('beforeEach', { payload, - state: this.state, + state: this.state }); const actionHandlers = model.actionListeners[payload.action]; @@ -79,7 +79,7 @@ class AltStore { this.lifecycle('afterEach', { payload, - state: this.state, + state: this.state }); }); diff --git a/src/store/StoreMixin.js b/src/store/StoreMixin.js index b0b2558d..955f04b1 100644 --- a/src/store/StoreMixin.js +++ b/src/store/StoreMixin.js @@ -81,7 +81,7 @@ const StoreMixin = { this.exportPublicMethods(toExport); this.exportPublicMethods({ - isLoading: () => { return loadCounter > 0; }, + isLoading: () => { return loadCounter > 0; } }); }, @@ -159,7 +159,7 @@ const StoreMixin = { this.bindAction(symbol, listener); } }, [obj]); - }, + } }; export default StoreMixin; diff --git a/src/store/index.js b/src/store/index.js index ca84ce07..1ad0904c 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -37,7 +37,7 @@ function createPrototype(proto, alt, key, extras) { lifecycleEvents: {}, actionListeners: {}, publicMethods: {}, - handlesOwnErrors: false, + handlesOwnErrors: false }, extras); } @@ -56,7 +56,7 @@ export function createStoreConfig(globalConfig, StoreModel) { return fn.assign(currentState, nextState); } return nextState; - }, + } }, globalConfig, StoreModel.config); } @@ -73,7 +73,7 @@ export function createStoreFromObject(alt, StoreModel, key) { }, setState(nextState) { doSetState(this, storeInstance, nextState); - }, + } }, StoreModel)); // bind the store listeners @@ -111,7 +111,7 @@ export function createStoreFromObject(alt, StoreModel, key) { StoreProto.publicMethods, { displayName: key, - config: StoreModel.config, + config: StoreModel.config }, ); @@ -134,7 +134,7 @@ export function createStoreFromClass(alt, StoreModel, key, ...argsForClass) { }, setState(nextState) { doSetState(this, storeInstance, nextState); - }, + } }); const store = new Store(...argsForClass); diff --git a/src/utils/AltUtils.js b/src/utils/AltUtils.js index 4cee06e7..c9dec088 100644 --- a/src/utils/AltUtils.js +++ b/src/utils/AltUtils.js @@ -61,13 +61,13 @@ export function fsa(id, type, payload, details) { payload, meta: { dispatchId: id, - ...details, + ...details }, id, action: type, data: payload, - details, + details }; } diff --git a/test/actions-dump-test.js b/test/actions-dump-test.js index faabd985..e6c6f8d4 100644 --- a/test/actions-dump-test.js +++ b/test/actions-dump-test.js @@ -1,45 +1,45 @@ -import Alt from '../' -import { assert } from 'chai' +import { assert } from 'chai'; +import Alt from '../'; -const alt = new Alt() +const alt = new Alt(); -alt.generateActions('one', 'two') -const test = alt.generateActions('three') -alt.generateActions('one') +alt.generateActions('one', 'two'); +alt.generateActions('three'); +alt.generateActions('one'); alt.createActions(class FooActions { static displayName = 'FooActions'; one() {} two() {} -}) +}); -const pojo = alt.createActions({ - displayName: 'Pojo', - one() { }, - two() { } -}) +alt.createActions({ + displayName: 'Pojo', + one() { }, + two() { } +}); alt.createActions({ - one() { }, - two() { } -}) + one() { }, + two() { } +}); -alt.createAction('test', function () { }) +alt.createAction('test', () => { }); export default { - 'actions obj'() { - assert.isObject(alt.actions, 'actions exist') - assert.isFunction(alt.actions.global.test, 'test exists') - assert(Object.keys(alt.actions.global).length === 10, 'global actions contain stuff from createAction and generateActions') - assert(Object.keys(alt.actions.FooActions).length === 4, '2 actions namespaced on FooActions') - assert.isObject(alt.actions.Pojo, 'pojo named action exists') - assert(Object.keys(alt.actions.Pojo).length == 4, 'pojo has 2 actions associated with it') - - assert.isDefined(alt.actions.global.three, 'three action is defined in global') - - assert.isDefined(alt.actions.Unknown.one, 'one exists in Unknown') - assert.isDefined(alt.actions.global.one1, 'one1 was created because of a name clash') - - assert.isDefined(alt.actions.global.THREE, 'the constant exists too') - }, -} + 'actions obj': function () { + assert.isObject(alt.actions, 'actions exist'); + assert.isFunction(alt.actions.global.test, 'test exists'); + assert(Object.keys(alt.actions.global).length === 10, 'global actions contain stuff from createAction and generateActions'); + assert(Object.keys(alt.actions.FooActions).length === 4, '2 actions namespaced on FooActions'); + assert.isObject(alt.actions.Pojo, 'pojo named action exists'); + assert(Object.keys(alt.actions.Pojo).length === 4, 'pojo has 2 actions associated with it'); + + assert.isDefined(alt.actions.global.three, 'three action is defined in global'); + + assert.isDefined(alt.actions.Unknown.one, 'one exists in Unknown'); + assert.isDefined(alt.actions.global.one1, 'one1 was created because of a name clash'); + + assert.isDefined(alt.actions.global.THREE, 'the constant exists too'); + } +}; diff --git a/test/alt-config-object.js b/test/alt-config-object.js index f10f9567..94310f70 100644 --- a/test/alt-config-object.js +++ b/test/alt-config-object.js @@ -1,72 +1,72 @@ -import { assert } from 'chai' -import Alt from '../dist/alt-with-runtime' +import { assert } from 'chai'; +import Alt from '../dist/alt-with-runtime'; class MyActions { - constructor() { - this.generateActions('changeNumber') - } + constructor() { + this.generateActions('changeNumber'); + } } class MyStore { - constructor() { - this.number = 2 - this.letter = 'a' - } + constructor() { + this.number = 2; + this.letter = 'a'; + } - onChangeNumber() { - this.number *= 2 - } + onChangeNumber() { + this.number *= 2; + } } export default { - 'custom dispatcher can be specified in alt config'() { - class CustomDispatcher { - waitFor() {} - register() {} - dispatch() {} - extraMethod() {} - } + 'custom dispatcher can be specified in alt config': function () { + class CustomDispatcher { + waitFor() {} + register() {} + dispatch() {} + extraMethod() {} + } - const alt = new Alt({ - dispatcher: new CustomDispatcher() - }) - const dispatcher = alt.dispatcher + const alt = new Alt({ + dispatcher: new CustomDispatcher() + }); + const dispatcher = alt.dispatcher; - // uses custom dispatcher - assert.equal(typeof dispatcher.extraMethod, 'function') - assert.equal(typeof dispatcher.dispatch, 'function') - }, + // uses custom dispatcher + assert.equal(typeof dispatcher.extraMethod, 'function'); + assert.equal(typeof dispatcher.dispatch, 'function'); + }, - 'custom serialize/deserialize'() { - const CustomSerialize = (data) => { - return Object.keys(data).reduce((obj, key) => { - obj[key] = {wrapper: data[key]} - return obj - }, {}) - } - const CustomDeserialize = (data) => { - return Object.keys(data).reduce((obj, key) => { - obj[key] = data[key].wrapper - return obj - }, {}) - } + 'custom serialize/deserialize': function () { + const CustomSerialize = (data) => { + return Object.keys(data).reduce((obj, key) => { + obj[key] = { wrapper: data[key] }; + return obj; + }, {}); + }; + const CustomDeserialize = (data) => { + return Object.keys(data).reduce((obj, key) => { + obj[key] = data[key].wrapper; + return obj; + }, {}); + }; - const alt = new Alt({ - serialize: CustomSerialize, - deserialize: CustomDeserialize, - }) - alt.addStore('MyStore', MyStore) - alt.addActions('MyActions', MyActions) - const snapshot = alt.takeSnapshot() - alt.getActions('MyActions').changeNumber() - alt.rollback() + const alt = new Alt({ + serialize: CustomSerialize, + deserialize: CustomDeserialize + }); + alt.addStore('MyStore', MyStore); + alt.addActions('MyActions', MyActions); + const snapshot = alt.takeSnapshot(); + alt.getActions('MyActions').changeNumber(); + alt.rollback(); - assert.deepEqual(snapshot, {MyStore: {wrapper: {number: 2, letter: 'a'}}}) - assert.deepEqual(alt.getStore('MyStore').getState(), {number: 2, letter: 'a'}) - }, + assert.deepEqual(snapshot, { MyStore: { wrapper: { number: 2, letter: 'a' } } }); + assert.deepEqual(alt.getStore('MyStore').getState(), { number: 2, letter: 'a' }); + }, - 'custom transforms'() { - const alt = new Alt({ storeTransforms: [] }) - assert.isArray(alt.storeTransforms) - }, -} + 'custom transforms': function () { + const alt = new Alt({ storeTransforms: [] }); + assert.isArray(alt.storeTransforms); + } +}; diff --git a/test/async-action-test.js b/test/async-action-test.js index 3d0756ac..26d1343a 100644 --- a/test/async-action-test.js +++ b/test/async-action-test.js @@ -1,52 +1,52 @@ -import Alt from '../' -import { assert } from 'chai' -import isPromise from 'is-promise' +import { assert } from 'chai'; +import isPromise from 'is-promise'; +import Alt from '../'; -const alt = new Alt() +const alt = new Alt(); const actions = alt.createActions(class AsyncActions { static displayName = 'AsyncActions'; fetch() { - return Promise.resolve('foo') + return Promise.resolve('foo'); } fetchAndDispatch() { - return (dispatch) => { - dispatch() - return Promise.resolve('foo') - } + return (dispatch) => { + dispatch(); + return Promise.resolve('foo'); + }; } -}) +}); const store = alt.createStore(class FooStore { static displayName = 'FooStore'; constructor() { - this.dispatched = false - this.bindActions(actions) + this.dispatched = false; + this.bindActions(actions); } onFetch() { - this.dispatched = true + this.dispatched = true; } onFetchAndDispatch() { - this.dispatched = true + this.dispatched = true; } -}) +}); export default { - 'async actions': { - afterEach() { - alt.recycle(store) - }, + 'async actions': { + afterEach() { + alt.recycle(store); + }, - 'are not dispatched automatically'() { - actions.fetch() - assert(store.state.dispatched === false, 'async action is not automatically dispatched') - }, + 'are not dispatched automatically': function () { + actions.fetch(); + assert(store.state.dispatched === false, 'async action is not automatically dispatched'); + }, - 'return the result of inner function invocation'() { - const promise = actions.fetchAndDispatch() - assert(isPromise(promise), 'async action does not return the result of inner function invocation') - assert(store.state.dispatched === true, 'async action is dispatched when the dispatch is invoked manually') - }, - }, -} + 'return the result of inner function invocation': function () { + const promise = actions.fetchAndDispatch(); + assert(isPromise(promise), 'async action does not return the result of inner function invocation'); + assert(store.state.dispatched === true, 'async action is dispatched when the dispatch is invoked manually'); + } + } +}; diff --git a/test/async-test.js b/test/async-test.js index cd2be64a..91f79072 100644 --- a/test/async-test.js +++ b/test/async-test.js @@ -1,307 +1,307 @@ -import Alt from '../' -import sinon from 'sinon' -import { assert } from 'chai' -import { Promise } from 'es6-promise' +import sinon from 'sinon'; +import { assert } from 'chai'; +import { Promise } from 'es6-promise'; +import Alt from '../'; -const alt = new Alt() +const alt = new Alt(); const StargazerActions = alt.generateActions( - 'fetchingUsers', - 'usersReceived', - 'failed' -) + 'fetchingUsers', + 'usersReceived', + 'failed', +); -const fauxjax = sinon.stub().returns(Promise.resolve([1, 2, 3, 4])) -const failjax = sinon.stub().returns(Promise.reject(new Error('things broke'))) +const fauxjax = sinon.stub().returns(Promise.resolve([1, 2, 3, 4])); +const failjax = sinon.stub().returns(Promise.reject(new Error('things broke'))); const api = { - remote(state) { }, - local(state) { }, -} + remote(state) { }, + local(state) { } +}; const remote = sinon.stub(api, 'remote', (state, repo = state.repo) => { - const url = `https://api.github.com/repos/${state.user}/${repo}/stargazers` - return repo === 'alts' ? failjax(url) : fauxjax(url) -}) + const url = `https://api.github.com/repos/${state.user}/${repo}/stargazers`; + return repo === 'alts' ? failjax(url) : fauxjax(url); +}); const local = sinon.stub(api, 'local', (state) => { - return state.users.length ? state.users : null -}) + return state.users.length ? state.users : null; +}); const StargazerSource = { - fetchUsers() { - return { - remote, - local, - loading: StargazerActions.fetchingUsers, - success: StargazerActions.usersReceived, - error: StargazerActions.failed - } - }, - - alwaysFetchUsers: { - remote, - local: () => true, - loading: StargazerActions.fetchingUsers, - success: StargazerActions.usersReceived, - error: StargazerActions.failed, - shouldFetch: () => true - }, - - neverFetchUsers: { - remote, - local: () => false, - loading: StargazerActions.fetchingUsers, - success: StargazerActions.usersReceived, - error: StargazerActions.failed, - shouldFetch: () => false - }, - - fetchRepos: { - remote() { - return Promise.resolve('batman') + fetchUsers() { + return { + remote, + local, + loading: StargazerActions.fetchingUsers, + success: StargazerActions.usersReceived, + error: StargazerActions.failed + }; }, - interceptResponse(x, action, args) { - assert(x === 'batman') - assert(action === StargazerActions.usersReceived) - assert(Array.isArray(args)) - return 'TESTTEST' + + alwaysFetchUsers: { + remote, + local: () => { return true; }, + loading: StargazerActions.fetchingUsers, + success: StargazerActions.usersReceived, + error: StargazerActions.failed, + shouldFetch: () => { return true; } }, - success: StargazerActions.usersReceived, - error: StargazerActions.failed - } -} + + neverFetchUsers: { + remote, + local: () => { return false; }, + loading: StargazerActions.fetchingUsers, + success: StargazerActions.usersReceived, + error: StargazerActions.failed, + shouldFetch: () => { return false; } + }, + + fetchRepos: { + remote() { + return Promise.resolve('batman'); + }, + interceptResponse(x, action, args) { + assert(x === 'batman'); + assert(action === StargazerActions.usersReceived); + assert(Array.isArray(args)); + return 'TESTTEST'; + }, + success: StargazerActions.usersReceived, + error: StargazerActions.failed + } +}; const StargazerStore = alt.createStore(class { static config = { - stateKey: 'state' + stateKey: 'state' }; constructor() { - this.state = { - user: 'goatslacker', - repo: 'alt', - users: [], - errorMessage: null, - isLoading: false - } - - this.registerAsync(StargazerSource) - - this.bindListeners({ - loading: StargazerActions.fetchingUsers, - receivedUsers: StargazerActions.usersReceived, - failed: StargazerActions.failed - }) + this.state = { + user: 'goatslacker', + repo: 'alt', + users: [], + errorMessage: null, + isLoading: false + }; + + this.registerAsync(StargazerSource); + + this.bindListeners({ + loading: StargazerActions.fetchingUsers, + receivedUsers: StargazerActions.usersReceived, + failed: StargazerActions.failed + }); } loading() { - this.setState({ isLoading: true }) + this.setState({ isLoading: true }); } failed(e) { - this.setState({ errorMessage: e.statusText || String(e) }) + this.setState({ errorMessage: e.statusText || String(e) }); } receivedUsers(users) { - this.setState({ users, errorMessage: null }) + this.setState({ users, errorMessage: null }); } -}) +}); export default { - 'async': { - beforeEach() { - global.window = {} - - alt.recycle() - local.reset() - remote.reset() - }, - - afterEach() { - delete global.window - }, - - 'methods are available'() { - assert.isFunction(StargazerStore.fetchUsers) - assert.isFunction(StargazerStore.isLoading) - }, - - 'data source with no action'() { - assert.throws(() => { - const Store = alt.createStore(class { - constructor() { - this.registerAsync({ - derp() { return { success: () => null } } - }) - } - }) - }, Error, /handler must be an action function/) - }, - - 'loading state'(done) { - const spy = sinon.spy() - const begin = StargazerStore.listen(spy) - - const test = StargazerStore.listen((state) => { - assert.isArray(state.users, 'we have an array') - - if (spy.callCount === 1) { - assert(state.isLoading === true, 'the loading action was called') - assert.ok(StargazerStore.isLoading(), 'and the loading function returns true') - assert(state.users.length === 0, 'empty array') - } else if (spy.callCount === 2) { - assert.notOk(StargazerStore.isLoading(), 'and the loading function returns false') - assert(state.users.length === 4, 'there are 4 elements present') - } - }) - - const end = StargazerStore.listen((state) => { - if (spy.callCount === 2) { - begin() - test() - end() - - assert.ok(local.calledOnce) - assert.ok(remote.calledOnce) - done() - } - }) - - StargazerStore.fetchUsers() - assert.ok(StargazerStore.isLoading()) - }, - - 'data available already'(done) { - StargazerActions.usersReceived([1, 2, 3]) - - const spy = sinon.spy() - const count = StargazerStore.listen(spy) - - const test = StargazerStore.listen((state) => { - if (spy.callCount === 1) { - assert(state.users.length === 3) - count() - test() - assert.ok(local.calledOnce) - assert.notOk(StargazerStore.isLoading()) - assert(remote.callCount === 0) - done() - } - }) - - StargazerStore.fetchUsers() - assert.notOk(StargazerStore.isLoading()) - }, - - 'errors'(done) { - const spy = sinon.spy() - const count = StargazerStore.listen(spy) - - const test = StargazerStore.listen((state) => { - if (spy.callCount === 1) { - assert(state.users.length === 0) - } else if (spy.callCount === 2) { - assert.match(state.errorMessage, /things broke/) - count() - test() - assert.notOk(StargazerStore.isLoading()) - assert.ok(local.calledOnce) - assert.ok(remote.calledOnce) - done() - } - }) - - StargazerStore.fetchUsers('alts') - assert.ok(StargazerStore.isLoading()) - }, - - 'shouldFetch is true'() { - StargazerStore.alwaysFetchUsers() - assert.ok(StargazerStore.isLoading(), 'i am loading') - assert.ok(remote.calledOnce, 'remote was called once') - }, - - 'shouldFetch is false'() { - StargazerStore.neverFetchUsers() - assert.notOk(StargazerStore.isLoading(), 'loading now') - assert(remote.callCount === 0, 'remote was not called') - }, - - 'multiple loads'(done) { - const unsub = StargazerStore.listen((state) => { - if (state.users === 'TESTTEST') { - assert.notOk(StargazerStore.isLoading()) - unsub() - done() - } else { - assert.ok(StargazerStore.isLoading()) - } - }) - - StargazerStore.fetchUsers() - StargazerStore.fetchRepos() - assert.ok(StargazerStore.isLoading()) - }, - - 'as a function'() { - const FauxSource = sinon.stub().returns({}) - - class FauxStore { + async: { + beforeEach() { + global.window = {}; + + alt.recycle(); + local.reset(); + remote.reset(); + }, + + afterEach() { + delete global.window; + }, + + 'methods are available': function () { + assert.isFunction(StargazerStore.fetchUsers); + assert.isFunction(StargazerStore.isLoading); + }, + + 'data source with no action': function () { + assert.throws(() => { + alt.createStore(class { + constructor() { + this.registerAsync({ + derp() { return { success: () => { return null; } }; } + }); + } + }); + }, Error, /handler must be an action function/); + }, + + 'loading state': function (done) { + const spy = sinon.spy(); + const begin = StargazerStore.listen(spy); + + const test = StargazerStore.listen((state) => { + assert.isArray(state.users, 'we have an array'); + + if (spy.callCount === 1) { + assert(state.isLoading === true, 'the loading action was called'); + assert.ok(StargazerStore.isLoading(), 'and the loading function returns true'); + assert(state.users.length === 0, 'empty array'); + } else if (spy.callCount === 2) { + assert.notOk(StargazerStore.isLoading(), 'and the loading function returns false'); + assert(state.users.length === 4, 'there are 4 elements present'); + } + }); + + const end = StargazerStore.listen((state) => { + if (spy.callCount === 2) { + begin(); + test(); + end(); + + assert.ok(local.calledOnce); + assert.ok(remote.calledOnce); + done(); + } + }); + + StargazerStore.fetchUsers(); + assert.ok(StargazerStore.isLoading()); + }, + + 'data available already': function (done) { + StargazerActions.usersReceived([1, 2, 3]); + + const spy = sinon.spy(); + const count = StargazerStore.listen(spy); + + const test = StargazerStore.listen((state) => { + if (spy.callCount === 1) { + assert(state.users.length === 3); + count(); + test(); + assert.ok(local.calledOnce); + assert.notOk(StargazerStore.isLoading()); + assert(remote.callCount === 0); + done(); + } + }); + + StargazerStore.fetchUsers(); + assert.notOk(StargazerStore.isLoading()); + }, + + errors(done) { + const spy = sinon.spy(); + const count = StargazerStore.listen(spy); + + const test = StargazerStore.listen((state) => { + if (spy.callCount === 1) { + assert(state.users.length === 0); + } else if (spy.callCount === 2) { + assert.match(state.errorMessage, /things broke/); + count(); + test(); + assert.notOk(StargazerStore.isLoading()); + assert.ok(local.calledOnce); + assert.ok(remote.calledOnce); + done(); + } + }); + + StargazerStore.fetchUsers('alts'); + assert.ok(StargazerStore.isLoading()); + }, + + 'shouldFetch is true': function () { + StargazerStore.alwaysFetchUsers(); + assert.ok(StargazerStore.isLoading(), 'i am loading'); + assert.ok(remote.calledOnce, 'remote was called once'); + }, + + 'shouldFetch is false': function () { + StargazerStore.neverFetchUsers(); + assert.notOk(StargazerStore.isLoading(), 'loading now'); + assert(remote.callCount === 0, 'remote was not called'); + }, + + 'multiple loads': function (done) { + const unsub = StargazerStore.listen((state) => { + if (state.users === 'TESTTEST') { + assert.notOk(StargazerStore.isLoading()); + unsub(); + done(); + } else { + assert.ok(StargazerStore.isLoading()); + } + }); + + StargazerStore.fetchUsers(); + StargazerStore.fetchRepos(); + assert.ok(StargazerStore.isLoading()); + }, + + 'as a function': function () { + const FauxSource = sinon.stub().returns({}); + + class FauxStore { static displayName = 'FauxStore'; constructor() { - this.exportAsync(FauxSource) + this.exportAsync(FauxSource); } - } + } - const store = alt.createStore(FauxStore) + const store = alt.createStore(FauxStore); - assert(FauxSource.firstCall.args[0] === alt) - assert.isFunction(store.isLoading) - }, + assert(FauxSource.firstCall.args[0] === alt); + assert.isFunction(store.isLoading); + }, - 'server rendering does not happen unless you lock alt'(done) { - delete global.window + 'server rendering does not happen unless you lock alt': function (done) { + delete global.window; - const actions = alt.generateActions('test') - alt.trapAsync = true + const actions = alt.generateActions('test'); + alt.trapAsync = true; - const PojoSource = { - justTesting: { - remote() { - return Promise.resolve(true) - }, - success: actions.test, - error: actions.test, - } - } + const PojoSource = { + justTesting: { + remote() { + return Promise.resolve(true); + }, + success: actions.test, + error: actions.test + } + }; - class MyStore { + class MyStore { static displayName = 'ServerRenderingStore'; constructor() { - this.registerAsync(PojoSource) + this.registerAsync(PojoSource); } - } + } - const spy = sinon.spy() + const spy = sinon.spy(); - const dispatchToken = alt.dispatcher.register(spy) + const dispatchToken = alt.dispatcher.register(spy); - const store = alt.createStore(MyStore) + const store = alt.createStore(MyStore); - store.justTesting().then((value) => { - assert.isFunction(value) - assert(spy.callCount === 0, 'the dispatcher was never called') + store.justTesting().then((value) => { + assert.isFunction(value); + assert(spy.callCount === 0, 'the dispatcher was never called'); - value() + value(); - assert.ok(spy.calledOnce, 'the dispatcher was flushed') + assert.ok(spy.calledOnce, 'the dispatcher was flushed'); - alt.dispatcher.unregister(dispatchToken) - alt.trapAsync = false - done() - }) - }, - } -} + alt.dispatcher.unregister(dispatchToken); + alt.trapAsync = false; + done(); + }); + } + } +}; diff --git a/test/babel/index.js b/test/babel/index.js index 97eca62d..04eb1f83 100644 --- a/test/babel/index.js +++ b/test/babel/index.js @@ -1,373 +1,370 @@ +/* eslint-disable */ (function (global) { - var babelHelpers = global.babelHelpers = {}; - - babelHelpers.jsx = (function () { - var REACT_ELEMENT_TYPE = typeof Symbol === "function" && Symbol.for && Symbol.for("react.element") || 0xeac7; - return function createRawReactElement(type, props, key, children) { - var defaultProps = type && type.defaultProps; - var childrenLength = arguments.length - 3; - - if (!props && childrenLength !== 0) { - props = {}; - } - - if (props && defaultProps) { - for (var propName in defaultProps) { - if (props[propName] === void 0) { - props[propName] = defaultProps[propName]; - } + const babelHelpers = global.babelHelpers = {}; + + babelHelpers.jsx = (function () { + const REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol.for && Symbol.for('react.element') || 0xeac7; + return function createRawReactElement(type, props, key, children) { + const defaultProps = type && type.defaultProps; + const childrenLength = arguments.length - 3; + + if (!props && childrenLength !== 0) { + props = {}; + } + + if (props && defaultProps) { + for (const propName in defaultProps) { + if (props[propName] === void 0) { + props[propName] = defaultProps[propName]; + } + } + } else if (!props) { + props = defaultProps || {}; + } + + if (childrenLength === 1) { + props.children = children; + } else if (childrenLength > 1) { + const childArray = Array(childrenLength); + + for (let i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 3]; + } + + props.children = childArray; + } + + return { + $$typeof: REACT_ELEMENT_TYPE, + type, + key: key === undefined ? null : `${key}`, + ref: null, + props, + _owner: null, + }; + }; + }()); + + babelHelpers.asyncToGenerator = function (fn) { + return function () { + const gen = fn.apply(this, arguments); + return new Promise(((resolve, reject) => { + function step(key, arg) { + let info = null; + let value = null; + try { + info = gen[key](arg); + value = info.value; + } catch (error) { + reject(error); + return; + } + + if (info.done) { + resolve(value); + } else { + Promise.resolve(value).then((value) => { + step('next', value); + }, (err) => { + step('throw', err); + }); + } + } + + step('next'); + })); + }; + }; + + babelHelpers.classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError('Cannot call a class as a function'); + } + }; + + babelHelpers.createClass = (function () { + function defineProperties(target, props) { + for (let i = 0; i < props.length; i++) { + const descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ('value' in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } } - } else if (!props) { - props = defaultProps || {}; - } - if (childrenLength === 1) { - props.children = children; - } else if (childrenLength > 1) { - var childArray = Array(childrenLength); + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps); + if (staticProps) defineProperties(Constructor, staticProps); + return Constructor; + }; + }()); + + babelHelpers.defineEnumerableProperties = function (obj, descs) { + for (const key in descs) { + if (!descs.hasOwnProperty(key)) continue; + const desc = descs[key]; + desc.configurable = desc.enumerable = true; + if ('value' in desc) desc.writable = true; + Object.defineProperty(obj, key, desc); + } + + return obj; + }; + + babelHelpers.defaults = function (obj, defaults) { + const keys = Object.getOwnPropertyNames(defaults); - for (var i = 0; i < childrenLength; i++) { - childArray[i] = arguments[i + 3]; + for (let i = 0; i < keys.length; i++) { + const key = keys[i]; + const value = Object.getOwnPropertyDescriptor(defaults, key); + + if (value && value.configurable && obj[key] === undefined) { + Object.defineProperty(obj, key, value); + } } - props.children = childArray; - } - - return { - $$typeof: REACT_ELEMENT_TYPE, - type: type, - key: key === undefined ? null : '' + key, - ref: null, - props: props, - _owner: null - }; + return obj; }; - })(); - - babelHelpers.asyncToGenerator = function (fn) { - return function () { - var gen = fn.apply(this, arguments); - return new Promise(function (resolve, reject) { - function step(key, arg) { - try { - var info = gen[key](arg); - var value = info.value; - } catch (error) { - reject(error); - return; - } - - if (info.done) { - resolve(value); - } else { - Promise.resolve(value).then(function (value) { - step("next", value); - }, function (err) { - step("throw", err); + + babelHelpers.defineProperty = function (obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value, + enumerable: true, + configurable: true, + writable: true, }); - } + } else { + obj[key] = value; + } + + return obj; + }; + + babelHelpers.extends = Object.assign || function (target) { + for (let i = 1; i < arguments.length; i++) { + const source = arguments[i]; + + for (const key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + babelHelpers.get = function get(object, property, receiver) { + if (object === null) object = Function.prototype; + const desc = Object.getOwnPropertyDescriptor(object, property); + + if (desc === undefined) { + const parent = Object.getPrototypeOf(object); + + if (parent === null) { + return undefined; + } + return get(parent, property, receiver); + } else if ('value' in desc) { + return desc.value; } + const getter = desc.get; - step("next"); - }); + if (getter === undefined) { + return undefined; + } + + return getter.call(receiver); }; - }; - - babelHelpers.classCallCheck = function (instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } - }; - - babelHelpers.createClass = (function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; + + babelHelpers.inherits = function (subClass, superClass) { + if (typeof superClass !== 'function' && superClass !== null) { + throw new TypeError(`Super expression must either be null or a function, not ${typeof superClass}`); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true, + }, + }); + if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }; - })(); - - babelHelpers.defineEnumerableProperties = function (obj, descs) { - for (var key in descs) { - var desc = descs[key]; - desc.configurable = desc.enumerable = true; - if ("value" in desc) desc.writable = true; - Object.defineProperty(obj, key, desc); - } - - return obj; - }; - - babelHelpers.defaults = function (obj, defaults) { - var keys = Object.getOwnPropertyNames(defaults); - - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - var value = Object.getOwnPropertyDescriptor(defaults, key); - - if (value && value.configurable && obj[key] === undefined) { - Object.defineProperty(obj, key, value); - } - } - - return obj; - }; - - babelHelpers.defineProperty = function (obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value: value, - enumerable: true, - configurable: true, - writable: true - }); - } else { - obj[key] = value; - } - - return obj; - }; - - babelHelpers.extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; + + babelHelpers.instanceof = function (left, right) { + if (right != null && typeof Symbol !== 'undefined' && right[Symbol.hasInstance]) { + return right[Symbol.hasInstance](left); } - } - } - - return target; - }; - - babelHelpers.get = function get(object, property, receiver) { - if (object === null) object = Function.prototype; - var desc = Object.getOwnPropertyDescriptor(object, property); - - if (desc === undefined) { - var parent = Object.getPrototypeOf(object); - - if (parent === null) { - return undefined; - } else { - return get(parent, property, receiver); - } - } else if ("value" in desc) { - return desc.value; - } else { - var getter = desc.get; - - if (getter === undefined) { - return undefined; - } - - return getter.call(receiver); - } - }; - - babelHelpers.inherits = function (subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: false, - writable: true, - configurable: true - } - }); - if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; - }; - - babelHelpers.instanceof = function (left, right) { - if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) { - return right[Symbol.hasInstance](left); - } else { - return left instanceof right; - } - }; - - babelHelpers.interopRequireDefault = function (obj) { - return obj && obj.__esModule ? obj : { - default: obj + return left instanceof right; }; - }; - babelHelpers.interopRequireWildcard = function (obj) { - if (obj && obj.__esModule) { - return obj; - } else { - var newObj = {}; + babelHelpers.interopRequireDefault = function (obj) { + return obj && obj.__esModule ? obj : { + default: obj, + }; + }; - if (obj != null) { - for (var key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; + babelHelpers.interopRequireWildcard = function (obj) { + if (obj && obj.__esModule) { + return obj; } - } - - newObj.default = obj; - return newObj; - } - }; - - babelHelpers.newArrowCheck = function (innerThis, boundThis) { - if (innerThis !== boundThis) { - throw new TypeError("Cannot instantiate an arrow function"); - } - }; - - babelHelpers.objectDestructuringEmpty = function (obj) { - if (obj == null) throw new TypeError("Cannot destructure undefined"); - }; - - babelHelpers.objectWithoutProperties = function (obj, keys) { - var target = {}; - - for (var i in obj) { - if (keys.indexOf(i) >= 0) continue; - if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; - target[i] = obj[i]; - } - - return target; - }; - - babelHelpers.possibleConstructorReturn = function (self, call) { - if (!self) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return call && (typeof call === "object" || typeof call === "function") ? call : self; - }; - - babelHelpers.selfGlobal = typeof global === "undefined" ? self : global; - - babelHelpers.set = function set(object, property, value, receiver) { - var desc = Object.getOwnPropertyDescriptor(object, property); - - if (desc === undefined) { - var parent = Object.getPrototypeOf(object); - - if (parent !== null) { - set(parent, property, value, receiver); - } - } else if ("value" in desc && desc.writable) { - desc.value = value; - } else { - var setter = desc.set; - - if (setter !== undefined) { - setter.call(receiver, value); - } - } - - return value; - }; - - babelHelpers.slicedToArray = (function () { - function sliceIterator(arr, i) { - var _arr = []; - var _n = true; - var _d = false; - var _e = undefined; - - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; + const newObj = {}; + + if (obj != null) { + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; + } } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i["return"]) _i["return"](); - } finally { - if (_d) throw _e; + + newObj.default = obj; + return newObj; + }; + + babelHelpers.newArrowCheck = function (innerThis, boundThis) { + if (innerThis !== boundThis) { + throw new TypeError('Cannot instantiate an arrow function'); + } + }; + + babelHelpers.objectDestructuringEmpty = function (obj) { + if (obj == null) throw new TypeError('Cannot destructure undefined'); + }; + + babelHelpers.objectWithoutProperties = function (obj, keys) { + const target = {}; + + for (const i in obj) { + if (keys.indexOf(i) >= 0) continue; + if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; + target[i] = obj[i]; + } + + return target; + }; + + babelHelpers.possibleConstructorReturn = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return call && (typeof call === 'object' || typeof call === 'function') ? call : self; + }; + + babelHelpers.selfGlobal = typeof global === 'undefined' ? self : global; + + babelHelpers.set = function set(object, property, value, receiver) { + const desc = Object.getOwnPropertyDescriptor(object, property); + + if (desc === undefined) { + const parent = Object.getPrototypeOf(object); + + if (parent !== null) { + set(parent, property, value, receiver); + } + } else if ('value' in desc && desc.writable) { + desc.value = value; + } else { + const setter = desc.set; + + if (setter !== undefined) { + setter.call(receiver, value); + } + } + + return value; + }; + + babelHelpers.slicedToArray = (function () { + function sliceIterator(arr, i) { + const _arr = []; + let _n = true; + let _d = false; + let _e; + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); + + if (i && _arr.length === i) break; + } + } catch (err) { + _d = true; + _e = err; + } finally { + try { + if (!_n && _i.return) _i.return(); + } finally { + if (_d) throw _e; + } + } + + return _arr; + } + + return function (arr, i) { + if (Array.isArray(arr)) { + return arr; + } else if (Symbol.iterator in Object(arr)) { + return sliceIterator(arr, i); + } + throw new TypeError('Invalid attempt to destructure non-iterable instance'); + }; + }()); + + babelHelpers.slicedToArrayLoose = function (arr, i) { + if (Array.isArray(arr)) { + return arr; + } else if (Symbol.iterator in Object(arr)) { + const _arr = []; + + for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { + _arr.push(_step.value); + + if (i && _arr.length === i) break; + } + + return _arr; + } + throw new TypeError('Invalid attempt to destructure non-iterable instance'); + }; + + babelHelpers.taggedTemplateLiteral = function (strings, raw) { + return Object.freeze(Object.defineProperties(strings, { + raw: { + value: Object.freeze(raw), + }, + })); + }; + + babelHelpers.taggedTemplateLiteralLoose = function (strings, raw) { + strings.raw = raw; + return strings; + }; + + babelHelpers.temporalRef = function (val, name, undef) { + if (val === undef) { + throw new ReferenceError(`${name} is not defined - temporal dead zone`); + } else { + return val; + } + }; + + babelHelpers.temporalUndefined = {}; + + babelHelpers.toArray = function (arr) { + return Array.isArray(arr) ? arr : Array.from(arr); + }; + + babelHelpers.toConsumableArray = function (arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; } - } - - return _arr; - } - - return function (arr, i) { - if (Array.isArray(arr)) { - return arr; - } else if (Symbol.iterator in Object(arr)) { - return sliceIterator(arr, i); - } else { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } + return Array.from(arr); }; - })(); - - babelHelpers.slicedToArrayLoose = function (arr, i) { - if (Array.isArray(arr)) { - return arr; - } else if (Symbol.iterator in Object(arr)) { - var _arr = []; - - for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - _arr.push(_step.value); - - if (i && _arr.length === i) break; - } - - return _arr; - } else { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - }; - - babelHelpers.taggedTemplateLiteral = function (strings, raw) { - return Object.freeze(Object.defineProperties(strings, { - raw: { - value: Object.freeze(raw) - } - })); - }; - - babelHelpers.taggedTemplateLiteralLoose = function (strings, raw) { - strings.raw = raw; - return strings; - }; - - babelHelpers.temporalRef = function (val, name, undef) { - if (val === undef) { - throw new ReferenceError(name + " is not defined - temporal dead zone"); - } else { - return val; - } - }; - - babelHelpers.temporalUndefined = {}; - - babelHelpers.toArray = function (arr) { - return Array.isArray(arr) ? arr : Array.from(arr); - }; - - babelHelpers.toConsumableArray = function (arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; - } else { - return Array.from(arr); - } - }; -})(typeof global === "undefined" ? self : global); +}(typeof global === 'undefined' ? self : global)); diff --git a/test/batching-test.js b/test/batching-test.js index ded881b0..5cf94047 100644 --- a/test/batching-test.js +++ b/test/batching-test.js @@ -1,109 +1,119 @@ -import { jsdom } from 'jsdom' -import Alt from '../' -import React from 'react' -import { assert } from 'chai' -import TestUtils from 'react-dom/test-utils' -import ReactDom from 'react-dom' +import React from 'react'; +import PropTypes from 'prop-types'; +import { jsdom } from 'jsdom'; +import { assert } from 'chai'; +import TestUtils from 'react-dom/test-utils'; +import ReactDom from 'react-dom'; +import Alt from '../'; const Actions = { - buttonClick() { - setTimeout(() => { - this.switchComponent() - }, 10) - return null - }, - - switchComponent() { - return null - }, - - uhoh() { - return null - }, -} + buttonClick() { + setTimeout(() => { + this.switchComponent(); + }, 10); + return null; + }, + + switchComponent() { + return null; + }, + + uhoh() { + return null; + } +}; function Store(actions) { - this.active = false + this.active = false; - this.bindAction(actions.switchComponent, () => { - this.active = true - }) + this.bindAction(actions.switchComponent, () => { + this.active = true; + }); } class ComponentA extends React.Component { - constructor(props) { - super(props) - - this.state = props.alt.stores.store.getState() - } + static propTypes = { + alt: PropTypes.object.isRequired, + callback: PropTypes.func.isRequired + }; + + constructor(props) { + super(props); + this.state = props.alt.stores.store.getState(); + } - componentWillMount() { - this.props.alt.stores.store.listen(state => this.setState(state)) - } + componentWillMount() { + this.props.alt.stores.store.listen((state) => { return this.setState(state); }); + } - render() { - if (this.state.active) { - return + render() { + if (this.state.active) { + return ; + } + return
; } - return
- } } -class ComponentB extends React.Component { - componentWillMount() { - let error = null - try { - this.props.alt.actions.actions.uhoh() - } catch (err) { - error = err - } finally { - this.props.callback(error) +class ComponentB extends React.Component { //eslint-disable-line + static propTypes = { + alt: PropTypes.object.isRequired, + callback: PropTypes.func.isRequired + }; + + componentWillMount() { + let error = null; + try { + this.props.alt.actions.actions.uhoh(); + } catch (err) { + error = err; + } finally { + this.props.callback(error); + } } - } - render() { - return
- } + render() { + return
; + } } export default { - 'Batching dispatcher': { - beforeEach() { - global.document = jsdom('') - global.window = global.document.defaultView - }, - - afterEach() { - delete global.document - delete global.window - }, - - 'does not batch'(done) { - const alt = new Alt() - alt.addActions('actions', Actions) - alt.addStore('store', Store, alt.actions.actions) - - function test(err) { - assert.match(err, /dispatch in the middle of a dispatch/) - done() - } - - TestUtils.renderIntoDocument() - alt.actions.actions.buttonClick() - }, - - 'allows batching'(done) { - const alt = new Alt({ batchingFunction: ReactDom.unstable_batchedUpdates }) - alt.addActions('actions', Actions) - alt.addStore('store', Store, alt.actions.actions) - - function test(err) { - assert.isNull(err) - done() - } - - TestUtils.renderIntoDocument() - alt.actions.actions.buttonClick() - }, - } -} + 'Batching dispatcher': { + beforeEach() { + global.document = jsdom(''); + global.window = global.document.defaultView; + }, + + afterEach() { + delete global.document; + delete global.window; + }, + + 'does not batch': function (done) { + const alt = new Alt(); + alt.addActions('actions', Actions); + alt.addStore('store', Store, alt.actions.actions); + + function test(err) { + assert.match(err, /dispatch in the middle of a dispatch/); + done(); + } + + TestUtils.renderIntoDocument(); + alt.actions.actions.buttonClick(); + }, + + 'allows batching': function (done) { + const alt = new Alt({ batchingFunction: ReactDom.unstable_batchedUpdates }); + alt.addActions('actions', Actions); + alt.addStore('store', Store, alt.actions.actions); + + function test(err) { + assert.isNull(err); + done(); + } + + TestUtils.renderIntoDocument(); + alt.actions.actions.buttonClick(); + } + } +}; diff --git a/test/before-and-after-test.js b/test/before-and-after-test.js index 11233578..f7a197bd 100644 --- a/test/before-and-after-test.js +++ b/test/before-and-after-test.js @@ -1,90 +1,89 @@ -import Alt from '../' -import { assert } from 'chai' +import { assert } from 'chai'; +import sinon from 'sinon'; +import Alt from '../'; -import sinon from 'sinon' +const alt = new Alt(); +const action = alt.generateActions('fire'); -const alt = new Alt() -const action = alt.generateActions('fire') +const beforeEach = sinon.spy(); +const afterEach = sinon.spy(); -const beforeEach = sinon.spy() -const afterEach = sinon.spy() +alt.createStore({ + displayName: 'Store', -const store = alt.createStore({ - displayName: 'Store', + state: { a: 1 }, - state: { a: 1 }, - - bindListeners: { - change: action.fire - }, - - lifecycle: { - beforeEach, - afterEach - }, - - change(x) { - this.setState({ a: x }) - }, -}) + bindListeners: { + change: action.fire + }, -export default { - 'Before and After hooks': { - beforeEach() { - alt.recycle() + lifecycle: { + beforeEach, + afterEach }, - 'before and after hook fire once'() { - action.fire(2) + change(x) { + this.setState({ a: x }); + } +}); - assert.ok(beforeEach.calledOnce) - assert.ok(afterEach.calledOnce) - }, +export default { + 'Before and After hooks': { + beforeEach() { + alt.recycle(); + }, - 'before is called before after'() { - action.fire(2) + 'before and after hook fire once': function () { + action.fire(2); - assert.ok(beforeEach.calledBefore(afterEach)) - assert.ok(afterEach.calledAfter(beforeEach)) - }, + assert.ok(beforeEach.calledOnce); + assert.ok(afterEach.calledOnce); + }, - 'args passed in'() { - action.fire(2) + 'before is called before after': function () { + action.fire(2); - assert.ok(beforeEach.args[0].length === 1, '1 arg is passed') - assert.ok(afterEach.args[0].length === 1, '1 arg is passed') + assert.ok(beforeEach.calledBefore(afterEach)); + assert.ok(afterEach.calledAfter(beforeEach)); + }, - assert.ok(beforeEach.args[0][0].payload.data === 2, 'before has payload') - assert.ok(afterEach.args[0][0].payload.data === 2, 'after has payload') - }, + 'args passed in': function () { + action.fire(2); - 'before and after get state'() { - let beforeValue = null - let afterValue = null + assert.ok(beforeEach.args[0].length === 1, '1 arg is passed'); + assert.ok(afterEach.args[0].length === 1, '1 arg is passed'); - const store = alt.createStore({ - displayName: 'SpecialStore', - state: { a: 1 }, - bindListeners: { - change: action.fire - }, - lifecycle: { - beforeEach({ state }) { - beforeValue = state.a - }, - afterEach({ state }) { - afterValue = state.a - } + assert.ok(beforeEach.args[0][0].payload.data === 2, 'before has payload'); + assert.ok(afterEach.args[0][0].payload.data === 2, 'after has payload'); }, - change(x) { - this.setState({ a: x }) - } - }) - - action.fire(2) - assert.ok(beforeValue === 1, 'before has current state') - assert.ok(afterValue === 2, 'after has next state') - }, - } -} + 'before and after get state': function () { + let beforeValue = null; + let afterValue = null; + + alt.createStore({ + displayName: 'SpecialStore', + state: { a: 1 }, + bindListeners: { + change: action.fire + }, + lifecycle: { + beforeEach({ state }) { + beforeValue = state.a; + }, + afterEach({ state }) { + afterValue = state.a; + } + }, + change(x) { + this.setState({ a: x }); + } + }); + + action.fire(2); + + assert.ok(beforeValue === 1, 'before has current state'); + assert.ok(afterValue === 2, 'after has next state'); + } + } +}; diff --git a/test/bound-listeners-test.js b/test/bound-listeners-test.js index a718affd..5247de97 100644 --- a/test/bound-listeners-test.js +++ b/test/bound-listeners-test.js @@ -1,92 +1,92 @@ -import Alt from '../dist/alt-with-runtime' -import { assert } from 'chai' +import { assert } from 'chai'; +import Alt from '../dist/alt-with-runtime'; -const alt = new Alt() +const alt = new Alt(); -const Actions = alt.generateActions('one', 'two', 'three') +const Actions = alt.generateActions('one', 'two', 'three'); class NoActions { - constructor() { - this.bindActions(Actions) - } + constructor() { + this.bindActions(Actions); + } - foo() { } - bar() { } + foo() { } + bar() { } } class OneAction { - constructor() { - this.bindAction(Actions.ONE, this.one) - } + constructor() { + this.bindAction(Actions.ONE, this.one); + } - one() { } + one() { } } class TwoAction { - constructor() { - this.bindListeners({ - two: Actions.TWO - }) - } + constructor() { + this.bindListeners({ + two: Actions.TWO + }); + } - two() { } + two() { } } class BindActions { - constructor() { - this.bindActions(Actions) - } + constructor() { + this.bindActions(Actions); + } - one() { } - two() { } + one() { } + two() { } } export default { - 'Exporting listener names': { - 'when no actions are listened on'() { - const myStore = alt.createStore(NoActions) - assert(myStore.boundListeners.length === 0, 'none are returned') - }, - - 'when using bindAction'() { - const myStore = alt.createStore(OneAction) - assert(myStore.boundListeners.length === 1) - assert(myStore.boundListeners[0] === Actions.ONE) - }, - - 'when using bindListeners'() { - const myStore = alt.createStore(TwoAction) - assert(myStore.boundListeners.length === 1) - assert(myStore.boundListeners[0] === Actions.TWO) - }, - - 'when using bindActions'() { - const myStore = alt.createStore(BindActions) - assert(myStore.boundListeners.length === 2) - assert( - myStore.boundListeners.indexOf(Actions.ONE) > -1 && + 'Exporting listener names': { + 'when no actions are listened on': function () { + const myStore = alt.createStore(NoActions); + assert(myStore.boundListeners.length === 0, 'none are returned'); + }, + + 'when using bindAction': function () { + const myStore = alt.createStore(OneAction); + assert(myStore.boundListeners.length === 1); + assert(myStore.boundListeners[0] === Actions.ONE); + }, + + 'when using bindListeners': function () { + const myStore = alt.createStore(TwoAction); + assert(myStore.boundListeners.length === 1); + assert(myStore.boundListeners[0] === Actions.TWO); + }, + + 'when using bindActions': function () { + const myStore = alt.createStore(BindActions); + assert(myStore.boundListeners.length === 2); + assert( + myStore.boundListeners.indexOf(Actions.ONE) > -1 && myStore.boundListeners.indexOf(Actions.TWO) > -1 - ) - }, - - 'dispatching actions'() { - const alt = new Alt() - - const one = alt.generateActions('one') - const two = alt.generateActions('one') - - const store = alt.createStore(function Store() { - this.bindAction(one.one, function (x) { - assert(x === 1) - }) - this.bindAction(two.one, function (x) { - assert(x === 2) - }) - }) - - alt.dispatch('global.one', 1) - alt.dispatch('global.one1', 2) - }, - } -} + ); + }, + + 'dispatching actions': function () { + const newAlt = new Alt(); + + const one = newAlt.generateActions('one'); + const two = newAlt.generateActions('one'); + + newAlt.createStore(function Store() { + this.bindAction(one.one, (x) => { + assert(x === 1); + }); + this.bindAction(two.one, (x) => { + assert(x === 2); + }); + }); + + newAlt.dispatch('global.one', 1); + newAlt.dispatch('global.one1', 2); + } + } +}; diff --git a/test/browser/index.js b/test/browser/index.js index 2e53b4d8..9b8ecde2 100644 --- a/test/browser/index.js +++ b/test/browser/index.js @@ -1,60 +1,61 @@ -const assign = require('object-assign') +/* eslint-disable */ +const assign = require('object-assign'); const tests = assign( - {}, - require('../index'), - require('../listen-to-actions'), - require('../final-store'), - require('../recorder'), - require('../setting-state'), - require('../stores-get-alt'), - require('../stores-with-colliding-names'), - require('../testing-utils'), - require('../use-event-emitter'), - require('../store-as-a-module'), - require('../es3-module-pattern') -) + {}, + require('../index'), + require('../listen-to-actions'), + require('../final-store'), + require('../recorder'), + require('../setting-state'), + require('../stores-get-alt'), + require('../stores-with-colliding-names'), + require('../testing-utils'), + require('../use-event-emitter'), + require('../store-as-a-module'), + require('../es3-module-pattern') +); // This code is directly from mocha/lib/interfaces/exports.js // with a few modifications function manualExports(exports, suite) { - var suites = [suite] + const suites = [suite]; - visit(exports) + visit(exports); - function visit(obj) { - var suite - for (var key in obj) { - if ('function' == typeof obj[key]) { - var fn = obj[key] - switch (key) { - case 'before': - suites[0].beforeAll(fn) - break - case 'after': - suites[0].afterAll(fn) - break - case 'beforeEach': - suites[0].beforeEach(fn) - break - case 'afterEach': - suites[0].afterEach(fn) - break - default: - suites[0].addTest(new Mocha.Test(key, fn)) + function visit(obj) { + var suite; + for (const key in obj) { + if (typeof obj[key] === 'function') { + const fn = obj[key]; + switch (key) { + case 'before': + suites[0].beforeAll(fn); + break; + case 'after': + suites[0].afterAll(fn); + break; + case 'beforeEach': + suites[0].beforeEach(fn); + break; + case 'afterEach': + suites[0].afterEach(fn); + break; + default: + suites[0].addTest(new Mocha.Test(key, fn)); + } + } else { + var suite = Mocha.Suite.create(suites[0], key); + suites.unshift(suite); + visit(obj[key]); + suites.shift(); + } } - } else { - var suite = Mocha.Suite.create(suites[0], key) - suites.unshift(suite) - visit(obj[key]) - suites.shift() - } } - } } -manualExports(tests, mocha.suite) +manualExports(tests, mocha.suite); -mocha.setup('exports') -mocha.checkLeaks() -mocha.run() +mocha.setup('exports'); +mocha.checkLeaks(); +mocha.run(); diff --git a/test/config-set-get-state-test.js b/test/config-set-get-state-test.js index 4fc59460..61df44f3 100644 --- a/test/config-set-get-state-test.js +++ b/test/config-set-get-state-test.js @@ -1,56 +1,55 @@ -import Alt from '../' -import { assert } from 'chai' -import sinon from 'sinon' - +import { assert } from 'chai'; +import sinon from 'sinon'; +import Alt from '../'; export default { - 'Config state getter and setter': { - 'setting state'() { - const setState = sinon.stub().returns({ - foo: 'bar' - }) - - const alt = new Alt({ setState }) - - const action = alt.generateActions('fire') - - const store = alt.createStore({ - displayName: 'store', - bindListeners: { - fire: action.fire + 'Config state getter and setter': { + 'setting state': function () { + const setState = sinon.stub().returns({ + foo: 'bar' + }); + + const alt = new Alt({ setState }); + + const action = alt.generateActions('fire'); + + const store = alt.createStore({ + displayName: 'store', + bindListeners: { + fire: action.fire + }, + state: { x: 1 }, + fire() { + this.setState({ x: 2 }); + } + }); + + assert(store.getState().x === 1); + + action.fire(); + + assert.ok(setState.calledOnce); + assert(setState.args[0].length === 2); + assert(store.getState().foo === 'bar'); }, - state: { x: 1 }, - fire() { - this.setState({ x: 2 }) - } - }) - assert(store.getState().x === 1) + 'getting state': function () { + const getState = sinon.stub().returns({ + foo: 'bar' + }); - action.fire() + const alt = new Alt({ getState }); - assert.ok(setState.calledOnce) - assert(setState.args[0].length === 2) - assert(store.getState().foo === 'bar') - }, + const store = alt.createStore({ + displayName: 'store', + state: { x: 1 } + }); - 'getting state'() { - const getState = sinon.stub().returns({ - foo: 'bar' - }) + assert.isUndefined(store.getState().x); - const alt = new Alt({ getState }) - - const store = alt.createStore({ - displayName: 'store', - state: { x: 1 } - }) - - assert.isUndefined(store.getState().x) - - assert.ok(getState.calledOnce) - assert(getState.args[0].length === 1) - assert(store.getState().foo === 'bar') - }, - } -} + assert.ok(getState.calledOnce); + assert(getState.args[0].length === 1); + assert(store.getState().foo === 'bar'); + } + } +}; diff --git a/test/debug-alt-test.js b/test/debug-alt-test.js index 173f739a..175406f5 100644 --- a/test/debug-alt-test.js +++ b/test/debug-alt-test.js @@ -1,31 +1,31 @@ -import Alt from '../' -import { assert } from 'chai' +import { assert } from 'chai'; +import Alt from '../'; export default { - 'debug mode': { - beforeEach() { - global.window = {} - }, + 'debug mode': { + beforeEach() { + global.window = {}; + }, + + 'enable debug mode': function () { + const alt = new Alt(); + Alt.debug('an identifier', alt); - 'enable debug mode'() { - const alt = new Alt() - Alt.debug('an identifier', alt) + assert.isArray(global.window['alt.js.org']); + assert(global.window['alt.js.org'].length === 1); + assert.isString(global.window['alt.js.org'][0].name); + assert(global.window['alt.js.org'][0].alt === alt); + }, - assert.isArray(global.window['alt.js.org']) - assert(global.window['alt.js.org'].length === 1) - assert.isString(global.window['alt.js.org'][0].name) - assert(global.window['alt.js.org'][0].alt === alt) + afterEach() { + delete global.window; + } }, - afterEach() { - delete global.window + 'isomorphic debug mode': { + 'enable debug mode does not make things explode': function () { + const alt = new Alt(); + Alt.debug(alt); + } } - }, - - 'isomorphic debug mode': { - 'enable debug mode does not make things explode'() { - const alt = new Alt() - Alt.debug(alt) - }, - } -} +}; diff --git a/test/es3-module-pattern.js b/test/es3-module-pattern.js index a44d5efd..2424b7ed 100644 --- a/test/es3-module-pattern.js +++ b/test/es3-module-pattern.js @@ -1,146 +1,146 @@ -import Alt from '../dist/alt-with-runtime' -import { assert } from 'chai' -import sinon from 'sinon' +import { assert } from 'chai'; +import sinon from 'sinon'; +import Alt from '../dist/alt-with-runtime'; -const alt = new Alt() +const alt = new Alt(); -const actions = alt.generateActions('fire') +const actions = alt.generateActions('fire'); function MyStore() { - var privateVariable = true + const privateVariable = true; //eslint-disable-line - return { - displayName: 'MyStore', + return { + displayName: 'MyStore', - state: { - data: 1 - }, + state: { + data: 1 + }, - publicMethods: { - getData: function () { - return this.getState().data - } - }, + publicMethods: { + getData() { + return this.getState().data; + } + }, - testProperty: 4, + testProperty: 4, - bindListeners: { - handleFire: actions.FIRE - }, + bindListeners: { + handleFire: actions.FIRE + }, - handleFire: function (data) { - this.setState({ data }) - } - } + handleFire(data) { + this.setState({ data }); + } + }; } -const myStore = alt.createStore(MyStore()) +const myStore = alt.createStore(MyStore()); export default { - 'Creating store using ES3 module pattern': { - beforeEach() { - alt.recycle() - console.warn = function () { } - }, - - 'store method exists'() { - const storePrototype = Object.getPrototypeOf(myStore) - const assertMethods = ['constructor', 'listen', 'unlisten', 'getState'] - assert.deepEqual(Object.getOwnPropertyNames(storePrototype), assertMethods, 'methods exist for store') - assert.isUndefined(myStore.addListener, 'event emitter methods not present') - assert.isUndefined(myStore.removeListener, 'event emitter methods not present') - assert.isUndefined(myStore.emit, 'event emitter methods not present') - }, - - 'public methods available'() { - assert.isFunction(myStore.getData, 'public methods are available') - assert(myStore.getData() === 1, 'initial store data is set') - }, - - 'private and instance variables are not available'() { - assert.isUndefined(myStore.privateVariable, 'encapsulated variables are not available') - assert.isUndefined(myStore.testProperty, 'instance variables are not available') - }, - - 'firing an action'() { - actions.fire(2) - - assert(myStore.getState().data === 2, 'action was fired and handled correctly') - }, - - 'adding lifecycle events'() { - let spy = sinon.spy() - - class TestStore { - constructor() { - this.lifecycle = { init: spy } - - this.state = { - foo: 'bar' - } - } - } + 'Creating store using ES3 module pattern': { + beforeEach() { + alt.recycle(); + console.warn = function () { }; + }, - const store = alt.createStore(new TestStore()) + 'store method exists': function () { + const storePrototype = Object.getPrototypeOf(myStore); + const assertMethods = ['constructor', 'listen', 'unlisten', 'getState']; + assert.deepEqual(Object.getOwnPropertyNames(storePrototype), assertMethods, 'methods exist for store'); + assert.isUndefined(myStore.addListener, 'event emitter methods not present'); + assert.isUndefined(myStore.removeListener, 'event emitter methods not present'); + assert.isUndefined(myStore.emit, 'event emitter methods not present'); + }, - assert.ok(spy.calledOnce, 'lifecycle event was called') - assert(store.getState().foo === 'bar', 'state is set') - }, + 'public methods available': function () { + assert.isFunction(myStore.getData, 'public methods are available'); + assert(myStore.getData() === 1, 'initial store data is set'); + }, - 'set state'() { - const TestStore = { - state: { hello: null }, + 'private and instance variables are not available': function () { + assert.isUndefined(myStore.privateVariable, 'encapsulated variables are not available'); + assert.isUndefined(myStore.testProperty, 'instance variables are not available'); + }, - bindListeners: { - handleFire: actions.FIRE + 'firing an action': function () { + actions.fire(2); + + assert(myStore.getState().data === 2, 'action was fired and handled correctly'); }, - handleFire(data) { - this.setState({ - hello: data - }) + 'adding lifecycle events': function () { + const spy = sinon.spy(); - this.setState() - } - } + class TestStore { + constructor() { + this.lifecycle = { init: spy }; - const store = alt.createStore(TestStore) - assert.isNull(store.getState().hello, 'store state property has not been set yet') + this.state = { + foo: 'bar' + }; + } + } - actions.fire('world') + const store = alt.createStore(new TestStore()); - assert(store.getState().hello === 'world', 'store state was set using setState') - }, + assert.ok(spy.calledOnce, 'lifecycle event was called'); + assert(store.getState().foo === 'bar', 'state is set'); + }, - 'set state in lifecycle'() { - const TestStore = { - state: { test: null }, + 'set state': function () { + const TestStore = { + state: { hello: null }, - lifecycle: { - init() { - this.state.test = 'i am here' - } - } - } + bindListeners: { + handleFire: actions.FIRE + }, - const store = alt.createStore(TestStore) - assert(store.getState().test === 'i am here', 'setting state on lifecycle') - }, + handleFire(data) { + this.setState({ + hello: data + }); - 'get instance works'() { - const TestStore = { - state: { test: null }, - bindListeners: { - handleFire: actions.FIRE + this.setState(); + } + }; + + const store = alt.createStore(TestStore); + assert.isNull(store.getState().hello, 'store state property has not been set yet'); + + actions.fire('world'); + + assert(store.getState().hello === 'world', 'store state was set using setState'); }, - handleFire() { - this.setState({ test: this.getInstance() }) - } - } - const store = alt.createStore(TestStore) - actions.fire() - assert(store.getState().test === store) - }, - } -} + 'set state in lifecycle': function () { + const TestStore = { + state: { test: null }, + + lifecycle: { + init() { + this.state.test = 'i am here'; + } + } + }; + + const store = alt.createStore(TestStore); + assert(store.getState().test === 'i am here', 'setting state on lifecycle'); + }, + + 'get instance works': function () { + const TestStore = { + state: { test: null }, + bindListeners: { + handleFire: actions.FIRE + }, + handleFire() { + this.setState({ test: this.getInstance() }); + } + }; + + const store = alt.createStore(TestStore); + actions.fire(); + assert(store.getState().test === store); + } + } +}; diff --git a/test/failed-dispatch-test.js b/test/failed-dispatch-test.js index 5e1dfcd6..9461bce8 100644 --- a/test/failed-dispatch-test.js +++ b/test/failed-dispatch-test.js @@ -1,95 +1,94 @@ -import { assert } from 'chai' -import Alt from '../dist/alt-with-runtime' -import sinon from 'sinon' +import { assert } from 'chai'; +import sinon from 'sinon'; +import Alt from '../dist/alt-with-runtime'; export default { - 'catch failed dispatches': { - 'uncaught dispatches result in an error'() { - const alt = new Alt() - const actions = alt.generateActions('fire') - - class Uncaught { - constructor() { - this.bindListeners({ fire: actions.FIRE }) - } + 'catch failed dispatches': { + 'uncaught dispatches result in an error': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); - fire() { - throw new Error('oops') - } - } + class Uncaught { + constructor() { + this.bindListeners({ fire: actions.FIRE }); + } - const uncaught = alt.createStore(Uncaught) + fire() { + throw new Error('oops'); + } + } - assert.throws(() => actions.fire()) - }, + alt.createStore(Uncaught); + assert.throws(() => { return actions.fire(); }); + }, - 'errors can be caught though'() { - const alt = new Alt() - const actions = alt.generateActions('fire') + 'errors can be caught though': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); - class Caught { - constructor() { - this.x = 0 - this.bindListeners({ fire: actions.FIRE }) + class Caught { + constructor() { + this.x = 0; + this.bindListeners({ fire: actions.FIRE }); - this.on('error', () => { - this.x = 1 - }) - } + this.on('error', () => { + this.x = 1; + }); + } - fire() { - throw new Error('oops') - } - } + fire() { + throw new Error('oops'); + } + } - const caught = alt.createStore(Caught) + const caught = alt.createStore(Caught); - const storeListener = sinon.spy() + const storeListener = sinon.spy(); - caught.listen(storeListener) + caught.listen(storeListener); - assert(caught.getState().x === 0) - assert.doesNotThrow(() => actions.fire()) - assert(caught.getState().x === 1) + assert(caught.getState().x === 0); + assert.doesNotThrow(() => { return actions.fire(); }); + assert(caught.getState().x === 1); - assert.notOk(storeListener.calledOnce, 'the store did not emit a change') + assert.notOk(storeListener.calledOnce, 'the store did not emit a change'); - caught.unlisten(storeListener) - }, + caught.unlisten(storeListener); + }, - 'you have to emit changes yourself'() { - const alt = new Alt() - const actions = alt.generateActions('fire') + 'you have to emit changes yourself': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); - class CaughtReturn { - constructor() { - this.x = 0 - this.bindListeners({ fire: actions.FIRE }) + class CaughtReturn { + constructor() { + this.x = 0; + this.bindListeners({ fire: actions.FIRE }); - this.on('error', () => { - this.x = 1 - this.emitChange() - }) - } + this.on('error', () => { + this.x = 1; + this.emitChange(); + }); + } - fire() { - throw new Error('oops') - } - } + fire() { + throw new Error('oops'); + } + } - const caughtReturn = alt.createStore(CaughtReturn) + const caughtReturn = alt.createStore(CaughtReturn); - const storeListener = sinon.spy() + const storeListener = sinon.spy(); - const dispose = caughtReturn.listen(storeListener) + const dispose = caughtReturn.listen(storeListener); - assert(caughtReturn.getState().x === 0) - assert.doesNotThrow(() => actions.fire()) - assert(caughtReturn.getState().x === 1) + assert(caughtReturn.getState().x === 0); + assert.doesNotThrow(() => { return actions.fire(); }); + assert(caughtReturn.getState().x === 1); - assert.ok(storeListener.calledOnce) + assert.ok(storeListener.calledOnce); - dispose() - }, - } -} + dispose(); + } + } +}; diff --git a/test/functional-test.js b/test/functional-test.js index d766c999..ec577ac1 100644 --- a/test/functional-test.js +++ b/test/functional-test.js @@ -1,175 +1,175 @@ -import { assert } from 'chai' -import Alt from '../dist/alt-with-runtime' -import sinon from 'sinon' +import { assert } from 'chai'; +import sinon from 'sinon'; +import Alt from '../dist/alt-with-runtime'; export default { - 'functional goodies for alt': { - 'observing for changes in a POJO so we get context passed in'() { - const alt = new Alt() + 'functional goodies for alt': { + 'observing for changes in a POJO so we get context passed in': function () { + const alt = new Alt(); - const observe = sinon.stub().returns({}) - const displayName = 'store' + const observe = sinon.stub().returns({}); + const displayName = 'store'; - alt.createStore({ displayName, observe }) + alt.createStore({ displayName, observe }); - assert.ok(observe.calledOnce) - assert(observe.args[0][0] === alt, 'first arg is alt') - }, - - 'when observing changes, they are observed'() { - const alt = new Alt() - const actions = alt.generateActions('fire') - - const displayName = 'store' - - const store = alt.createStore({ - displayName, - observe() { - return { fire: actions.fire } + assert.ok(observe.calledOnce); + assert(observe.args[0][0] === alt, 'first arg is alt'); }, - fire() { } - }) - assert(store.boundListeners.length === 1, 'there is 1 action bound') - }, + 'when observing changes, they are observed': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); - 'otherwise works like a haskell guard'() { - const alt = new Alt() - const actions = alt.generateActions('fire', 'test') + const displayName = 'store'; - const spy = sinon.spy() + const store = alt.createStore({ + displayName, + observe() { + return { fire: actions.fire }; + }, + fire() { } + }); - const store = alt.createStore({ - displayName: 'store', - state: { x: 0 }, - bindListeners: { - fire: actions.fire + assert(store.boundListeners.length === 1, 'there is 1 action bound'); }, - fire() { - this.setState({ x: 1 }) - }, + 'otherwise works like a haskell guard': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire', 'test'); - otherwise() { - this.setState({ x: 2 }) - } - }) + const spy = sinon.spy(); - const kill = store.listen(spy) + const store = alt.createStore({ + displayName: 'store', + state: { x: 0 }, + bindListeners: { + fire: actions.fire + }, - actions.test() - assert(store.getState().x === 2, 'the otherwise clause was ran') + fire() { + this.setState({ x: 1 }); + }, - actions.fire() - assert(store.getState().x === 1, 'just fire was ran') + otherwise() { + this.setState({ x: 2 }); + } + }); - assert.ok(spy.calledTwice) + const kill = store.listen(spy); - kill() - }, + actions.test(); + assert(store.getState().x === 2, 'the otherwise clause was ran'); - 'preventDefault prevents a change event to be emitted'() { - const alt = new Alt() - const actions = alt.generateActions('fire') + actions.fire(); + assert(store.getState().x === 1, 'just fire was ran'); - const spy = sinon.spy() + assert.ok(spy.calledTwice); - const store = alt.createStore({ - displayName: 'store', - state: { x: 0 }, - bindListeners: { - fire: actions.fire + kill(); }, - fire() { - this.setState({ x: 1 }) - this.preventDefault() - } - }) + 'preventDefault prevents a change event to be emitted': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); - const kill = store.listen(spy) + const spy = sinon.spy(); - actions.fire() - assert(store.getState().x === 1, 'just fire was ran') + const store = alt.createStore({ + displayName: 'store', + state: { x: 0 }, + bindListeners: { + fire: actions.fire + }, - assert(spy.callCount === 0, 'store listener was never called') + fire() { + this.setState({ x: 1 }); + this.preventDefault(); + } + }); - kill() - }, + const kill = store.listen(spy); - 'reduce fires on every dispatch if defined'() { - const alt = new Alt() - const actions = alt.generateActions('fire') + actions.fire(); + assert(store.getState().x === 1, 'just fire was ran'); - const store = alt.createStore({ - displayName: 'store', + assert(spy.callCount === 0, 'store listener was never called'); - state: { x: 0 }, + kill(); + }, - reduce(state) { - if (state.x >= 3) return - return { x: state.x + 1 } - } - }) + 'reduce fires on every dispatch if defined': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); - actions.fire() - actions.fire() - actions.fire() - actions.fire() + const store = alt.createStore({ + displayName: 'store', - assert(store.getState().x === 3, 'counter was incremented') - }, + state: { x: 0 }, - 'reduce doesnt emit if preventDefault'() { - const alt = new Alt() - const actions = alt.generateActions('fire') + reduce(state) { + if (state.x >= 3) return undefined; + return { x: state.x + 1 }; + } + }); - const store = alt.createStore({ - displayName: 'store', + actions.fire(); + actions.fire(); + actions.fire(); + actions.fire(); - state: { x: 0 }, + assert(store.getState().x === 3, 'counter was incremented'); + }, - reduce(state) { - this.preventDefault() - return {} - } - }) + 'reduce doesnt emit if preventDefault': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); - const spy = sinon.spy() + const store = alt.createStore({ + displayName: 'store', - const unsub = store.listen(spy) + state: { x: 0 }, - actions.fire() + reduce(state) { + this.preventDefault(); + return {}; + } + }); - assert(spy.callCount === 0) + const spy = sinon.spy(); - unsub() - }, + const unsub = store.listen(spy); - 'stores have a reduce method'() { - const alt = new Alt() + actions.fire(); - const store = alt.createStore({ - displayName: 'store', + assert(spy.callCount === 0); - state: { x: 0 }, + unsub(); + }, - reduce(state) { - return state - } - }) + 'stores have a reduce method': function () { + const alt = new Alt(); - const store2 = alt.createStore({ - displayName: 'store2', + const store = alt.createStore({ + displayName: 'store', - state: { x: 1 }, - }) + state: { x: 0 }, - assert.isFunction(store.reduce) - assert.isFunction(store2.reduce) + reduce(state) { + return state; + } + }); - assert(store.reduce(store.state).x === 0) - assert(store2.reduce(store2.state).x === 1) - }, - } -} + const store2 = alt.createStore({ + displayName: 'store2', + + state: { x: 1 } + }); + + assert.isFunction(store.reduce); + assert.isFunction(store2.reduce); + + assert(store.reduce(store.state).x === 0); + assert(store2.reduce(store2.state).x === 1); + } + } +}; diff --git a/test/functions-test.js b/test/functions-test.js index e5aded87..6892ddc3 100644 --- a/test/functions-test.js +++ b/test/functions-test.js @@ -1,83 +1,83 @@ -import { assert } from 'chai' -import * as fn from '../lib/functions' -import Alt from '../dist/alt-with-runtime' +import { assert } from 'chai'; +import * as fn from '../lib/functions'; +import Alt from '../dist/alt-with-runtime'; -const alt = new Alt() +const alt = new Alt(); export default { - 'test the functions.js isMutableObject()': { - 'can import lib/functions'() { - assert.ok(fn) - assert.ok(fn.isMutableObject) - assert(typeof fn.isMutableObject === 'function', 'isMutableObject is imported') - }, - - 'isMutableObject works on regular objects'() { - const obj = {} - const obj2 = {foo: 'bar'} - - assert(fn.isMutableObject(obj) === true, 'regular object should pass') - assert(fn.isMutableObject(obj2) === true, 'regular object with fields should pass') - }, - - 'isMutableObject fails on non-objects'() { - assert(fn.isMutableObject(false) === false, 'boolean should fail') - assert(fn.isMutableObject(1) === false, 'integer should fail') - assert(fn.isMutableObject(new Date()) === false, 'date should fail') - }, - - 'isMutableObject works on frozen objects'() { - const obj = {} - Object.freeze(obj) - - assert(fn.isMutableObject(obj) === false, 'frozen objects should fail') - }, - }, - - 'can bootstrap a store with/without frozen state': { - 'normal store state can be bootstrapped'() { - class NonFrozenStore { - constructor() { - this.state = { - foo: 'bar', - } - - assert(this.state.foo === 'bar', 'State is initialized') + 'test the functions.js isMutableObject()': { + 'can import lib/functions': function () { + assert.ok(fn); + assert.ok(fn.isMutableObject); + assert(typeof fn.isMutableObject === 'function', 'isMutableObject is imported'); + }, + + 'isMutableObject works on regular objects': function () { + const obj = {}; + const obj2 = { foo: 'bar' }; + + assert(fn.isMutableObject(obj) === true, 'regular object should pass'); + assert(fn.isMutableObject(obj2) === true, 'regular object with fields should pass'); + }, + + 'isMutableObject fails on non-objects': function () { + assert(fn.isMutableObject(false) === false, 'boolean should fail'); + assert(fn.isMutableObject(1) === false, 'integer should fail'); + assert(fn.isMutableObject(new Date()) === false, 'date should fail'); + }, + + 'isMutableObject works on frozen objects': function () { + const obj = {}; + Object.freeze(obj); + + assert(fn.isMutableObject(obj) === false, 'frozen objects should fail'); } - } - - alt.createStore(NonFrozenStore, 'NonFrozenStore', alt) - alt.bootstrap('{"NonFrozenStore": {"foo":"bar2"}}') - - const myStore = alt.getStore('NonFrozenStore') - assert(myStore.getState().foo === 'bar2', 'State was bootstrapped with updated bar') }, - 'frozen store state can be bootstrapped'() { - class FrozenStateStore { - constructor() { - this.config = { - onDeserialize: (data) => { - Object.freeze(data) - return data - }, - } - - this.state = { - foo: 'bar', - } - - Object.freeze(this.state) - - assert(this.state.foo === 'bar', 'State is initialized') + 'can bootstrap a store with/without frozen state': { + 'normal store state can be bootstrapped': function () { + class NonFrozenStore { + constructor() { + this.state = { + foo: 'bar' + }; + + assert(this.state.foo === 'bar', 'State is initialized'); + } + } + + alt.createStore(NonFrozenStore, 'NonFrozenStore', alt); + alt.bootstrap('{"NonFrozenStore": {"foo":"bar2"}}'); + + const myStore = alt.getStore('NonFrozenStore'); + assert(myStore.getState().foo === 'bar2', 'State was bootstrapped with updated bar'); + }, + + 'frozen store state can be bootstrapped': function () { + class FrozenStateStore { + constructor() { + this.config = { + onDeserialize: (data) => { + Object.freeze(data); + return data; + } + }; + + this.state = { + foo: 'bar' + }; + + Object.freeze(this.state); + + assert(this.state.foo === 'bar', 'State is initialized'); + } + } + + alt.createStore(FrozenStateStore, 'FrozenStateStore', alt); + alt.bootstrap('{"FrozenStateStore": {"foo":"bar2"}}'); + + const myStore = alt.getStore('FrozenStateStore'); + assert(myStore.getState().foo === 'bar2', 'State was bootstrapped with updated bar'); } - } - - alt.createStore(FrozenStateStore, 'FrozenStateStore', alt) - alt.bootstrap('{"FrozenStateStore": {"foo":"bar2"}}') - - const myStore = alt.getStore('FrozenStateStore') - assert(myStore.getState().foo === 'bar2', 'State was bootstrapped with updated bar') - }, - }, -} + } +}; diff --git a/test/helpers/SaaM.js b/test/helpers/SaaM.js index 18568d19..49063cf7 100644 --- a/test/helpers/SaaM.js +++ b/test/helpers/SaaM.js @@ -1,7 +1,6 @@ -export const displayName = 'SaaM' +export const displayName = 'SaaM'; +export const state = 1; -export const state = 1 - -export function reduce(state, payload) { - return state + 1 +export function reduce(reduceState, payload) { //eslint-disable-line + return reduceState + 1; } diff --git a/test/helpers/SampleActions.js b/test/helpers/SampleActions.js index 43b5ea3e..7c187ed7 100644 --- a/test/helpers/SampleActions.js +++ b/test/helpers/SampleActions.js @@ -1,3 +1,3 @@ -import alt from './alt' +import alt from './alt'; -export default alt.generateActions('fire') +export default alt.generateActions('fire'); diff --git a/test/helpers/alt.js b/test/helpers/alt.js index 97a145db..4ea77f2f 100644 --- a/test/helpers/alt.js +++ b/test/helpers/alt.js @@ -1,2 +1,3 @@ -import Alt from '../../dist/alt-with-runtime' -export default new Alt() +import Alt from '../../dist/alt-with-runtime'; + +export default new Alt(); diff --git a/test/index.js b/test/index.js index 96ec8c7a..f9cf199f 100644 --- a/test/index.js +++ b/test/index.js @@ -31,7 +31,7 @@ class MyActions { justTestingInternalActions() { return { updateThree: this.updateThree, - updateName: this.updateName, + updateName: this.updateName }; } @@ -57,7 +57,7 @@ alt.createActions(MyActions, myActions); const objActions = alt.createActions({ hello() { }, - world() { }, + world() { } }); const myShorthandActions = alt.generateActions('actionOne', 'actionTwo'); @@ -79,7 +79,7 @@ class MyStore { this.async = false; this.exportPublicMethods({ - externalMethodNoStatic: this.externalMethodNoStatic, + externalMethodNoStatic: this.externalMethodNoStatic }); this._dispatcher = this.dispatcher; @@ -135,7 +135,7 @@ class SecondStore { this.exportPublicMethods({ externalMethodNoStatic: this.externalMethodNoStatic, - concatFooWithNoStatic: this.concatFooWithNoStatic, + concatFooWithNoStatic: this.concatFooWithNoStatic }); this.on('init', () => { @@ -209,7 +209,7 @@ class LifeCycleStore { }, onDeserialize: (data) => { data.deserialized = true; //eslint-disable-line - }, + } }; constructor() { @@ -223,7 +223,7 @@ class LifeCycleStore { this.bindListeners({ test: myActions.updateName, test2: [myActions.updateName, myActions.updateTwo], - test3: myActions.updateName, + test3: myActions.updateName }); this.on('init', () => { @@ -279,7 +279,7 @@ class Model { x: this.x, y: this.y, sum: this.sum, - product: this.product, + product: this.product }; } } @@ -289,16 +289,16 @@ class InterceptSnapshotStore { onSerialize: (state) => { return { modelData: state.modelData.data, - anotherVal: state.anotherVal, + anotherVal: state.anotherVal }; }, onDeserialize: (data) => { const obj = { modelData: new Model({ x: data.modelData.x, y: data.modelData.y }), - anotherVal: data.anotherVal, + anotherVal: data.anotherVal }; return obj; - }, + } }; constructor() { @@ -508,9 +508,9 @@ const tests = { x: 2, y: 3, sum: 5, - product: 6, + product: 6 }, - anotherVal: 11, + anotherVal: 11 }; // serializes snapshot data correctly assert.deepEqual(JSON.parse(snapshot).InterceptSnapshotStore, expectedSerializedData, 'interceptSnapshotStore was serialized correctly'); @@ -922,13 +922,14 @@ const tests = { 'emit change method works from the store': (done) => { assert(myStore.getState().async === false, 'store async is false'); + let dispose; const listener = () => { assert(myStore.getState().async === true, 'store async is true'); dispose(); done(); }; - const dispose = myStore.listen(listener); + dispose = myStore.listen(listener); myActions.asyncStoreAction(); }, @@ -960,13 +961,14 @@ const tests = { assert(store.getState().test === false, 'test is false'); + let dispose; const listener = () => { assert(store.getState().test === true, 'test is true'); dispose(); done(); }; - const dispose = store.listen(listener); + dispose = store.listen(listener); actions.test(); }, @@ -1007,7 +1009,7 @@ const tests = { constructor() { super(); this.exportPublicMethods({ - baseMethod: this.baseMethod, + baseMethod: this.baseMethod }); } } @@ -1021,7 +1023,7 @@ const tests = { class BadListenerStore { constructor() { this.bindListeners({ - methodThatDoesNotExist: myActions.updateName, + methodThatDoesNotExist: myActions.updateName }); } } @@ -1033,7 +1035,7 @@ const tests = { class BadListenerStore { constructor() { this.bindListeners({ - foo: myActions.trolololololol, + foo: myActions.trolololololol }); } @@ -1054,7 +1056,7 @@ const tests = { assert.isObject(snapshot.AltSecondStore, 'AltSecondStore exists'); alt.createUnsavedStore({ - displayName: 'NoBootstrapObject', + displayName: 'NoBootstrapObject' }); snapshot = JSON.parse(alt.takeSnapshot()); @@ -1086,9 +1088,9 @@ const tests = { displayName: 'just testing', state: { x: 0 }, bindListeners: { - hello: action, + hello: action }, - hello(x) { this.state.x = x; }, + hello(x) { this.state.x = x; } }); assert.isFunction(action, 'action was created'); @@ -1112,7 +1114,7 @@ const tests = { fire() { setTimeout(() => { this.setState({ - test: true, + test: true }); }); return false; @@ -1152,7 +1154,7 @@ const tests = { return (dispatch) => { dispatch(x); }; - }, + } }); const token = alt.dispatcher.register((payload) => { @@ -1181,8 +1183,8 @@ const tests = { this.bindListeners({ onRefreshBalanceClaims: ImportKeysActions.saved, onLoadMyAccounts: [ - ImportKeysActions.change, ImportKeysActions.saved, - ], + ImportKeysActions.change, ImportKeysActions.saved + ] }); } @@ -1205,7 +1207,7 @@ const tests = { id: 'hello', dispatch(data) { return data; - }, + } }; const newAlt = new Alt(); @@ -1243,7 +1245,7 @@ const tests = { id: 'hello', dispatch() { return (dispatch) => { return dispatch(done); }; - }, + } }; const newAlt = new Alt(); @@ -1293,7 +1295,7 @@ const tests = { }); alt.dispatch({ type: 'owl', payload: 'Tawny' }); - }, + } }; export default tests; diff --git a/test/setting-state.js b/test/setting-state.js index 1e721e9c..162a6a12 100644 --- a/test/setting-state.js +++ b/test/setting-state.js @@ -1,152 +1,151 @@ -import { assert } from 'chai' -import Alt from '../dist/alt-with-runtime' -import sinon from 'sinon' +import { assert } from 'chai'; +import sinon from 'sinon'; +import Alt from '../dist/alt-with-runtime'; -const alt = new Alt() +const alt = new Alt(); -const actions = alt.generateActions('fire', 'nothing') +const actions = alt.generateActions('fire', 'nothing'); class MyStore { - constructor() { - this.foo = 1 - this.bindListeners({ increment: actions.FIRE, nothing: actions.NOTHING }) - } - - increment() { - this.retVal = this.setState({ foo: this.foo + 1 }) - return this.retVal - } - - nothing() { - this.setState() - } + constructor() { + this.foo = 1; + this.bindListeners({ increment: actions.FIRE, nothing: actions.NOTHING }); + } + + increment() { + this.retVal = this.setState({ foo: this.foo + 1 }); + return this.retVal; + } + + nothing() { + this.setState(); + } } -const myStore = alt.createStore(MyStore) +const myStore = alt.createStore(MyStore); export default { - 'setState': { - beforeEach() { - alt.recycle() - }, + setState: { + beforeEach() { + alt.recycle(); + }, - 'using setState to set the state'() { - const spy = sinon.spy() - const dispose = myStore.listen(spy) + 'using setState to set the state': function () { + const spy = sinon.spy(); + const dispose = myStore.listen(spy); - actions.fire() + actions.fire(); - assert(myStore.getState().foo === 2, 'foo was incremented') - assert.isUndefined(myStore.getState().retVal, 'return value of setState is undefined') + assert(myStore.getState().foo === 2, 'foo was incremented'); + assert.isUndefined(myStore.getState().retVal, 'return value of setState is undefined'); - dispose() + dispose(); - // calling set state without anything doesn't make things crash and burn - actions.nothing() + // calling set state without anything doesn't make things crash and burn + actions.nothing(); - assert.ok(spy.calledOnce, 'spy was only called once') - }, + assert.ok(spy.calledOnce, 'spy was only called once'); + }, - 'by using setState a change event is not emitted twice'() { - const spy = sinon.spy() - const dispose = myStore.listen(spy) + 'by using setState a change event is not emitted twice': function () { + const spy = sinon.spy(); + const dispose = myStore.listen(spy); - actions.nothing() + actions.nothing(); - assert(myStore.getState().foo === 1, 'foo remains the same') + assert(myStore.getState().foo === 1, 'foo remains the same'); - assert.ok(spy.calledOnce, 'spy was only called once') + assert.ok(spy.calledOnce, 'spy was only called once'); - dispose() - }, + dispose(); + }, - 'transactional setState'() { - const alt = new Alt() + 'transactional setState': function () { + const newAlt = new Alt(); - const actions = alt.generateActions('fire') - class SetState { - constructor() { - this.bindActions(actions) - this.x = 0 - } + const newActions = newAlt.generateActions('fire'); + class SetState { + constructor() { + this.bindActions(actions); + this.x = 0; + } - fire() { - this.setState(() => { - return { - x: 1 + fire() { + this.setState(() => { + return { + x: 1 + }; + }); + } } - }) - } - } - const store = alt.createStore(SetState) + const store = newAlt.createStore(SetState); - assert(store.getState().x === 0, 'x is initially 0') - actions.fire() - assert(store.getState().x === 1, 'x is 1') - }, + assert(store.getState().x === 0, 'x is initially 0'); + newActions.fire(); + assert(store.getState().x === 1, 'x is 1'); + }, - 'transactional setState with failure'() { - const alt = new Alt() + 'transactional setState with failure': function () { + const newAlt = new Alt(); - const actions = alt.generateActions('fire') - class SetState { - constructor() { - this.bindActions(actions) - this.x = 0 - } + const newActions = newAlt.generateActions('fire'); + class SetState { + constructor() { + this.bindActions(actions); + this.x = 0; + } - fire() { - this.setState(() => { - throw new Error('error') - }) - } - } + fire() { + this.setState(() => { + throw new Error('error'); + }); + } + } - const store = alt.createStore(SetState) + const store = newAlt.createStore(SetState); - assert(store.getState().x === 0, 'x is initially 0') - assert.throws(() => actions.fire()) - assert(store.getState().x === 0, 'x remains 0') - }, + assert(store.getState().x === 0, 'x is initially 0'); + assert.throws(() => { return newActions.fire(); }); + assert(store.getState().x === 0, 'x remains 0'); + }, - 'setState no dispatch'() { - const alt = new Alt() + 'setState no dispatch': function () { + const newAlt = new Alt(); - const actions = alt.generateActions('fire') - class BrokenSetState { - constructor() { - this.x = 0 - this.setState({ x: 1 }) - } - } - - assert.throws(() => { - alt.createStore(BrokenSetState) - }) - }, - - 'state is set not replaced'() { - const alt = new Alt() - - const actions = alt.generateActions('fire') - class SetState { - constructor() { - this.bindActions(actions) - this.x = 0 - this.y = 0 - } + newAlt.generateActions('fire'); + class BrokenSetState { + constructor() { + this.x = 0; + this.setState({ x: 1 }); + } + } - fire() { - this.setState({ x: 1 }) + assert.throws(() => { + newAlt.createStore(BrokenSetState); + }); + }, + + 'state is set not replaced': function () { + const newAlt = new Alt(); + const newActions = newAlt.generateActions('fire'); + class SetState { + constructor() { + this.bindActions(newActions); + this.x = 0; + this.y = 0; + } + + fire() { + this.setState({ x: 1 }); + } + } + const store = newAlt.createStore(SetState); + + assert(store.getState().x === 0, 'x is initially 0'); + newActions.fire(); + assert(store.getState().x === 1, 'x is now 1'); + assert(store.getState().y === 0, 'y was untouched'); } - } - const store = alt.createStore(SetState) - - assert(store.getState().x === 0, 'x is initially 0') - actions.fire() - assert(store.getState().x === 1, 'x is now 1') - assert(store.getState().y === 0, 'y was untouched') - }, - } -} + } +}; diff --git a/test/store-as-a-module.js b/test/store-as-a-module.js index 56556c40..1d337bdf 100644 --- a/test/store-as-a-module.js +++ b/test/store-as-a-module.js @@ -1,24 +1,23 @@ -import assert from 'assert' -import Alt from '../' +import assert from 'assert'; +import Alt from '../'; +import * as StoreModel from './helpers/SaaM'; -import * as StoreModel from './helpers/SaaM' - -const alt = new Alt() -const actions = alt.generateActions('increment') -const store = alt.createStore(StoreModel) +const alt = new Alt(); +const actions = alt.generateActions('increment'); +const store = alt.createStore(StoreModel); export default { - 'Stores as a Module': { - 'store state is there'() { - assert.equal(store.getState(), 1, 'store data is initialized to 1') + 'Stores as a Module': { + 'store state is there': function () { + assert.equal(store.getState(), 1, 'store data is initialized to 1'); - actions.increment() + actions.increment(); - assert.equal(store.getState(), 2, 'store data was updated') + assert.equal(store.getState(), 2, 'store data was updated'); - actions.increment() + actions.increment(); - assert.equal(store.getState(), 3, 'incremented again') + assert.equal(store.getState(), 3, 'incremented again'); + } } - } -} +}; diff --git a/test/store-model-test.js b/test/store-model-test.js index b245e080..fb87fef4 100644 --- a/test/store-model-test.js +++ b/test/store-model-test.js @@ -1,64 +1,64 @@ -import Alt from '../dist/alt-with-runtime' -import { assert } from 'chai' +import { assert } from 'chai'; +import Alt from '../dist/alt-with-runtime'; -const alt = new Alt() -const Actions = alt.generateActions('hello') +const alt = new Alt(); +const Actions = alt.generateActions('hello'); function MyStoreModel() { - this.bindActions(Actions) + this.bindActions(Actions); - this.test = 2 + this.test = 2; } -MyStoreModel.prototype.onHello = function () { this.test = 1 } +MyStoreModel.prototype.onHello = function () { this.test = 1; }; const MyStoreModelObj = { - displayName: 'MyStoreAsObject', + displayName: 'MyStoreAsObject', - state: { test: 2 }, + state: { test: 2 }, - bindListeners: { - onHello: Actions.HELLO - }, + bindListeners: { + onHello: Actions.HELLO + }, - onHello: function () { - this.state.test = 1 - } -} + onHello() { + this.state.test = 1; + } +}; export default { - 'Exposing the StoreModel': { - beforeEach() { - alt.recycle() - }, + 'Exposing the StoreModel': { + beforeEach() { + alt.recycle(); + }, - 'as an object'() { - const MyStore = alt.createStore(MyStoreModelObj) + 'as an object': function () { + const MyStore = alt.createStore(MyStoreModelObj); - assert(MyStore.getState().test === 2, 'store state is initially set') + assert(MyStore.getState().test === 2, 'store state is initially set'); - assert.isDefined(MyStore.StoreModel, 'store model is available') - assert.isObject(MyStore.StoreModel, 'store model is an object') + assert.isDefined(MyStore.StoreModel, 'store model is available'); + assert.isObject(MyStore.StoreModel, 'store model is an object'); - assert(MyStore.StoreModel === MyStoreModelObj, 'the store model is the same as the original object') + assert(MyStore.StoreModel === MyStoreModelObj, 'the store model is the same as the original object'); - Actions.hello() + Actions.hello(); - assert(MyStore.getState().test === 1, 'i can change state through actions') - }, + assert(MyStore.getState().test === 1, 'i can change state through actions'); + }, - 'as a class'() { - const MyStore = alt.createStore(MyStoreModel, 'MyStore') + 'as a class': function () { + const MyStore = alt.createStore(MyStoreModel, 'MyStore'); - assert(MyStore.getState().test === 2, 'store state is initially set') + assert(MyStore.getState().test === 2, 'store state is initially set'); - assert.isDefined(MyStore.StoreModel, 'store model is available') - assert.isFunction(MyStore.StoreModel, 'store model is a function') + assert.isDefined(MyStore.StoreModel, 'store model is available'); + assert.isFunction(MyStore.StoreModel, 'store model is a function'); - assert(MyStore.StoreModel === MyStoreModel, 'the store model is the same as the original object') + assert(MyStore.StoreModel === MyStoreModel, 'the store model is the same as the original object'); - Actions.hello() + Actions.hello(); - assert(MyStore.getState().test === 1, 'i can change state through actions') - }, - } -} + assert(MyStore.getState().test === 1, 'i can change state through actions'); + } + } +}; diff --git a/test/store-transforms-test.js b/test/store-transforms-test.js index a9acecc2..a474ca1e 100644 --- a/test/store-transforms-test.js +++ b/test/store-transforms-test.js @@ -1,37 +1,31 @@ -import { assert } from 'chai' -import Alt from '../dist/alt-with-runtime' +import { assert } from 'chai'; +import Alt from '../dist/alt-with-runtime'; -const alt = new Alt() +const alt = new Alt(); -alt.storeTransforms.push(function (Store) { - Store.test = 'hello' - return Store -}) +alt.storeTransforms.push((Store) => { + Store.test = 'hello'; + return Store; +}); class Store { - constructor() { - this.x = 0 - } -} - -class Store2 { - constructor() { - this.y = 0 - } + constructor() { + this.x = 0; + } } export default { - 'store transforms': { - 'when creating stores alt goes through its series of transforms'() { - const store = alt.createStore(Store) - assert(alt.storeTransforms.length === 1) - assert.isDefined(store.test) - assert(store.test === 'hello', 'store that adds hello to instance transform') - }, + 'store transforms': { + 'when creating stores alt goes through its series of transforms': function () { + const store = alt.createStore(Store); + assert(alt.storeTransforms.length === 1); + assert.isDefined(store.test); + assert(store.test === 'hello', 'store that adds hello to instance transform'); + }, - 'unsaved stores get the same treatment'() { - const store2 = alt.createUnsavedStore(Store) - assert.isDefined(store2.test) - }, - }, -} + 'unsaved stores get the same treatment': function () { + const store2 = alt.createUnsavedStore(Store); + assert.isDefined(store2.test); + } + } +}; diff --git a/test/stores-get-alt.js b/test/stores-get-alt.js index 9e16683d..618435be 100644 --- a/test/stores-get-alt.js +++ b/test/stores-get-alt.js @@ -1,26 +1,26 @@ -import { assert } from 'chai' -import Alt from '../dist/alt-with-runtime' +import { assert } from 'chai'; +import Alt from '../dist/alt-with-runtime'; -const alt = new Alt() +const alt = new Alt(); export default { - 'the stores get the alt instance'() { - class MyStore { - constructor(alt) { - assert.instanceOf(alt, Alt, 'alt is an instance of Alt') - } - } + 'the stores get the alt instance': function () { + class MyStore { + constructor(altInstace) { + assert.instanceOf(altInstace, Alt, 'alt is an instance of Alt'); + } + } - alt.createStore(MyStore, 'MyStore', alt) - }, + alt.createStore(MyStore, 'MyStore', alt); + }, - 'the actions get the alt instance'() { - class MyActions { - constructor(alt) { - assert.instanceOf(alt, Alt, 'alt is an instance of Alt') - } - } + 'the actions get the alt instance': function () { + class MyActions { + constructor(altInstace) { + assert.instanceOf(altInstace, Alt, 'alt is an instance of Alt'); + } + } - alt.createActions(MyActions, undefined, alt) - } -} + alt.createActions(MyActions, undefined, alt); + } +}; diff --git a/test/stores-with-colliding-names.js b/test/stores-with-colliding-names.js index d4f99456..328834c5 100644 --- a/test/stores-with-colliding-names.js +++ b/test/stores-with-colliding-names.js @@ -1,44 +1,43 @@ -import { assert } from 'chai' -import sinon from 'sinon' -import Alt from '../dist/alt-with-runtime' +import { assert } from 'chai'; +import sinon from 'sinon'; +import Alt from '../dist/alt-with-runtime'; -const alt = new Alt() +const alt = new Alt(); -alt.createStore(function MyStore() { }) +alt.createStore(function MyStore() {}); //eslint-disable-line export default { - 'console warn for missing identifier': { - beforeEach() { - console.warn = sinon.stub() - console.warn.returnsArg(0) - }, - - 'stores with colliding names'() { - const MyStore = (function () { - return function MyStore() { } - }()) - alt.createStore(MyStore) - - assert.isObject(alt.stores.MyStore1, 'a store was still created') - - }, - - 'colliding names via identifier'() { - class auniquestore { } - alt.createStore(auniquestore, 'MyStore') - - assert.isObject(alt.stores.MyStore1, 'a store was still created') - }, - - 'not providing a store name via anonymous function'() { - alt.createStore(function () { }) - - assert.isObject(alt.stores[''], 'a store with no name was still created') - }, - - afterEach() { - assert.ok(console.warn.calledOnce, 'the warning was called') - assert.instanceOf(console.warn.returnValues[0], ReferenceError, 'value returned is an instanceof referenceerror') - }, - } -} + 'console warn for missing identifier': { + beforeEach() { + console.warn = sinon.stub(); + console.warn.returnsArg(0); + }, + + 'stores with colliding names': function () { + const myStore = (function () { + return function MyStore() { }; + }()); + alt.createStore(myStore); + + assert.isObject(alt.stores.MyStore1, 'a store was still created'); + }, + + 'colliding names via identifier': function () { + class auniquestore { } + alt.createStore(auniquestore, 'MyStore'); + + assert.isObject(alt.stores.MyStore1, 'a store was still created'); + }, + + 'not providing a store name via anonymous function': function () { + alt.createStore(() => { }); + + assert.isObject(alt.stores[''], 'a store with no name was still created'); + }, + + afterEach() { + assert.ok(console.warn.calledOnce, 'the warning was called'); + assert.instanceOf(console.warn.returnValues[0], ReferenceError, 'value returned is an instanceof referenceerror'); + } + } +}; diff --git a/test/value-stores-test.js b/test/value-stores-test.js index 179c8295..75b31823 100644 --- a/test/value-stores-test.js +++ b/test/value-stores-test.js @@ -1,85 +1,77 @@ -import { assert } from 'chai' -import Alt from '../' -import sinon from 'sinon' +import { assert } from 'chai'; +import Alt from '../'; -const alt = new Alt() +const alt = new Alt(); -const actions = alt.generateActions('fire') +const actions = alt.generateActions('fire'); const store = alt.createStore({ - state: 21, - - displayName: 'ValueStore', - - reduce(state, payload) { - return state + 1 - } -}) + state: 21, + displayName: 'ValueStore', + reduce(state, payload) { + return state + 1; + } +}); const store2 = alt.createStore({ - state: [1, 2, 3], - - displayName: 'Value2Store', - - reduce(state, payload) { - return state.concat(state[state.length - 1] + 1) - } -}) + state: [1, 2, 3], + displayName: 'Value2Store', + reduce(state, payload) { + return state.concat(state[state.length - 1] + 1); + } +}); const store3 = alt.createStore({ - state: 21, - - displayName: 'ValueStore3', - - bindListeners: { - fire: actions.fire - }, - - fire() { - this.setState(this.state + 1) - } -}) - -export default { - 'value stores': { - beforeEach() { - alt.recycle() - }, - - 'stores can contain state as any value'(done) { - assert(store.state === 21, 'store state is value') - assert(store.getState() === 21, 'getState returns value too') - - const unlisten = store.listen((state) => { - assert(state === 22, 'incremented store state') - unlisten() - done() - }) - - assert(JSON.parse(alt.takeSnapshot()).ValueStore === 21, 'snapshot ok') - - actions.fire() - }, - - 'stores can contain state as any value (non reduce)'(done) { - assert(store3.state === 21, 'store state is value') - assert(store3.getState() === 21, 'getState returns value too') - - const unlisten = store3.listen((state) => { - assert(state === 22, 'incremented store state') - unlisten() - done() - }) - - assert(JSON.parse(alt.takeSnapshot()).ValueStore3 === 21, 'snapshot ok') - - actions.fire() + state: 21, + displayName: 'ValueStore3', + bindListeners: { + fire: actions.fire }, + fire() { + this.setState(this.state + 1); + } +}); - 'store with array works too'() { - assert.deepEqual(store2.state, [1, 2, 3]) - actions.fire() - assert.deepEqual(store2.state, [1, 2, 3, 4]) +export default { + 'value stores': { + beforeEach() { + alt.recycle(); + }, + + 'stores can contain state as any value': function (done) { + assert(store.state === 21, 'store state is value'); + assert(store.getState() === 21, 'getState returns value too'); + + const unlisten = store.listen((state) => { + assert(state === 22, 'incremented store state'); + unlisten(); + done(); + }); + + assert(JSON.parse(alt.takeSnapshot()).ValueStore === 21, 'snapshot ok'); + + actions.fire(); + }, + + 'stores can contain state as any value (non reduce)': function (done) { + assert(store3.state === 21, 'store state is value'); + assert(store3.getState() === 21, 'getState returns value too'); + + const unlisten = store3.listen((state) => { + assert(state === 22, 'incremented store state'); + unlisten(); + done(); + }); + + assert(JSON.parse(alt.takeSnapshot()).ValueStore3 === 21, 'snapshot ok'); + + actions.fire(); + }, + + 'store with array works too': function () { + assert.deepEqual(store2.state, [1, 2, 3]); + actions.fire(); + assert.deepEqual(store2.state, [1, 2, 3, 4]); + } } - } -} +}; diff --git a/yarn.lock b/yarn.lock index 13a43191..d617987f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3617,7 +3617,7 @@ promise@^7.0.3, promise@^7.1.1: dependencies: asap "~2.0.3" -prop-types@^15.5.10: +prop-types@^15.5.10, prop-types@^15.6.0: version "15.6.0" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" dependencies: From 7119e2e7b61ace3bc9c3e2b1091107f952accbee Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 15:47:07 -0500 Subject: [PATCH 10/21] Update flux version to latest --- dist/alt.js | 30 +++++++++++++++++------------- dist/alt.min.js | 2 +- package.json | 2 +- yarn.lock | 27 +++++++-------------------- 4 files changed, 26 insertions(+), 35 deletions(-) diff --git a/dist/alt.js b/dist/alt.js index 24d51946..ed00090f 100644 --- a/dist/alt.js +++ b/dist/alt.js @@ -809,7 +809,7 @@ module.exports = exports['default']; /***/ (function(module, exports, __webpack_require__) { /** - * Copyright (c) 2014-2015, Facebook, Inc. + * Copyright (c) 2014-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the @@ -826,7 +826,7 @@ module.exports.Dispatcher = __webpack_require__(7); "use strict"; /* WEBPACK VAR INJECTION */(function(process) {/** - * Copyright (c) 2014-2015, Facebook, Inc. + * Copyright (c) 2014-present, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the @@ -1064,14 +1064,11 @@ module.exports = Dispatcher; "use strict"; /* WEBPACK VAR INJECTION */(function(process) {/** - * Copyright 2013-2015, Facebook, Inc. - * All rights reserved. + * Copyright (c) 2013-present, Facebook, Inc. * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. An additional grant - * of patent rights can be found in the PATENTS file in the same directory. + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. * - * @providesModule invariant */ @@ -1087,12 +1084,18 @@ module.exports = Dispatcher; * will remain to ensure logic does not differ in production. */ -var invariant = function (condition, format, a, b, c, d, e, f) { - if (process.env.NODE_ENV !== 'production') { +var validateFormat = function validateFormat(format) {}; + +if (process.env.NODE_ENV !== 'production') { + validateFormat = function validateFormat(format) { if (format === undefined) { throw new Error('invariant requires an error message argument'); } - } + }; +} + +function invariant(condition, format, a, b, c, d, e, f) { + validateFormat(format); if (!condition) { var error; @@ -1101,15 +1104,16 @@ var invariant = function (condition, format, a, b, c, d, e, f) { } else { var args = [a, b, c, d, e, f]; var argIndex = 0; - error = new Error('Invariant Violation: ' + format.replace(/%s/g, function () { + error = new Error(format.replace(/%s/g, function () { return args[argIndex++]; })); + error.name = 'Invariant Violation'; } error.framesToPop = 1; // we don't care about invariant's own frame throw error; } -}; +} module.exports = invariant; /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2))) diff --git a/dist/alt.min.js b/dist/alt.min.js index b1d04d30..793cc235 100644 --- a/dist/alt.min.js +++ b/dist/alt.min.js @@ -1 +1 @@ -!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.Alt=e():t.Alt=e()}(this,function(){return function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};return e.m=t,e.c=n,e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,"a",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p="",e(e.s=3)}([function(t,e,n){"use strict";function r(t){var e=t.constructor;return!!t&&"[object Object]"===Object.prototype.toString.call(t)&&s(e)&&!Object.isFrozen(t)&&(e instanceof e||"AltStore"===t.type)}function i(t,e){e.forEach(function(e){Object.keys(Object(e)).forEach(function(n){t(n,e[n])})})}function o(t){for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:{};return t===Function.prototype?e:i(Object.getPrototypeOf(t),d.assign(r(t,!0),e))}function o(t){"undefined"!=typeof console&&console.warn(new ReferenceError(t))}function s(t,e){for(var n=0,r=e;Object.hasOwnProperty.call(t,r);)n+=1,r=e+String(n);return r}function a(t){return t.replace(/[a-z]([A-Z])/g,function(t){return t[0]+"_"+t[1].toLowerCase()}).toUpperCase()}function c(t){if(void 0===t)return null;for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r0&&void 0!==arguments[0]?arguments[0]:{};s(this,t),this.config=e,this.serialize=e.serialize||JSON.stringify,this.deserialize=e.deserialize||JSON.parse,this.dispatcher=e.dispatcher||new a.Dispatcher,this.batchingFunction=e.batchingFunction||function(t){return t()},this.actions={global:{}},this.stores={},this.storeTransforms=e.storeTransforms||[],this.trapAsync=!1,this._actionsRegistry={},this._initSnapshot={},this._lastSnapshot={}}return t.prototype.dispatch=function(t,e,n){var r=this;this.batchingFunction(function(){var i=Math.random().toString(18).substr(2,16);if(t.hasOwnProperty("type")&&t.hasOwnProperty("payload")){var o={id:t.type,namespace:t.type,name:t.type};return r.dispatcher.dispatch(y.fsa(i,t.type,t.payload,o))}return t.id&&t.dispatch?y.dispatch(i,t,e,r):r.dispatcher.dispatch(y.fsa(i,t,e,n))})},t.prototype.createUnsavedStore=function(t){var e=t.displayName||"";h.createStoreConfig(this.config,t);for(var n=h.transformStore(this.storeTransforms,t),r=arguments.length,i=Array(r>1?r-1:0),o=1;o2?i-2:0),s=2;s1&&void 0!==arguments[1]?arguments[1]:{},r={},a=y.uid(this._actionsRegistry,t.displayName||t.name||"Unknown");if(l.isFunction(t)){l.assign(r,y.getPrototypeChain(t));for(var c=function(t){function e(){return s(this,e),i(this,t.apply(this,arguments))}return o(e,t),e.prototype.generateActions=function(){for(var t=arguments.length,e=Array(t),n=0;n2?u-2:0),p=2;p2?n-2:0),i=2;i2?n-2:0),i=2;i1&&void 0!==arguments[1]?arguments[1]:[];return(e.length?e:Object.keys(t.stores)).reduce(function(e,n){var r=n.displayName||n,i=t.stores[r],o=i.StoreModel.config;i.lifecycle("snapshot");var s=o.onSerialize&&o.onSerialize(i.state);return e[r]=s||i.getState(),e},{})}function o(t,e){var n=t.deserialize(t.serialize(t.stores[e].state));t._initSnapshot[e]=n,t._lastSnapshot[e]=n}function s(t,e,n){return n.reduce(function(t,n){var r=n.displayName||n;if(!e[r])throw new ReferenceError(r+" is not a valid store");return t[r]=e[r],t},{})}Object.defineProperty(e,"__esModule",{value:!0}),e.setAppState=r,e.snapshot=i,e.saveInitialSnapshot=o,e.filterSnapshots=s;var a=n(0),c=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(a)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e,n){if(n){var r=e.StoreModel.config,i=b.isFunction(n)?n(e.state):n;e.state=r.setState.call(t,e.state,i),t.alt.dispatcher.isDispatching()||t.emitChange()}}function u(t,e,n,r){return b.assign(t,m.default,{displayName:n,alt:e,dispatcher:e.dispatcher,preventDefault:function(){this.getInstance().preventDefault=!0},boundListeners:[],lifecycleEvents:{},actionListeners:{},publicMethods:{},handlesOwnErrors:!1},r)}function f(t,e){e.config=b.assign({getState:function(t){return Array.isArray(t)?t.slice():b.isMutableObject(t)?b.assign({},t):t},setState:function(t,e){return b.isMutableObject(e)?b.assign(t,e):e}},t,e.config)}function l(t,e){return t.reduce(function(t,e){return e(t)},e)}function p(t,e,n){var r=void 0,i=u({},t,n,b.assign({getInstance:function(){return r},setState:function(t){c(this,r,t)}},e));return i.bindListeners&&m.default.bindListeners.call(i,i.bindListeners),i.observe&&m.default.bindListeners.call(i,i.observe(t)),i.lifecycle&&b.eachObject(function(t,e){m.default.on.call(i,t,e)},[i.lifecycle]),r=b.assign(new _.default(t,i,void 0!==i.state?i.state:{},e),i.publicMethods,{displayName:n,config:e.config})}function h(t,e,n){var r=void 0,i=e.config,f=function(t){function e(){return o(this,e),s(this,t.apply(this,arguments))}return a(e,t),e}(e);u(f.prototype,t,n,{type:"AltStore",getInstance:function(){return r},setState:function(t){c(this,r,t)}});for(var l=arguments.length,p=Array(l>3?l-3:0),h=3;h0}})},exportPublicMethods:function(t){var e=this;s.eachObject(function(t,n){if(!s.isFunction(n))throw new TypeError("exportPublicMethods expects a function");e.publicMethods[t]=n},[t])},emitChange:function(){this.getInstance().emitChange()},on:function(t,e){"error"===t&&(this.handlesOwnErrors=!0);var n=this.lifecycleEvents[t]||(0,i.default)();return this.lifecycleEvents[t]=n,n.subscribe(e.bind(this))},bindAction:function(t,e){if(!t)throw new ReferenceError("Invalid action reference passed in");if(!s.isFunction(e))throw new TypeError("bindAction expects a function");var n=t.id?t.id:t;this.actionListeners[n]=this.actionListeners[n]||[],this.actionListeners[n].push(e.bind(this)),this.boundListeners.push(n)},bindActions:function(t){var e=this;s.eachObject(function(t,n){var r=/./,i=t.replace(r,function(t){return"on"+t[0].toUpperCase()});if(e[t]&&e[i])throw new ReferenceError("You have multiple action handlers bound to an action: "+t+" and "+i);var o=e[t]||e[i];o&&e.bindAction(n,o)},[t])},bindListeners:function(t){var e=this;s.eachObject(function(t,n){var r=e[t];if(!r)throw new ReferenceError(t+" defined but does not exist in "+e.displayName);Array.isArray(n)?n.forEach(function(t){e.bindAction(t,r)}):e.bindAction(n,r)},[t])}};e.default=a,t.exports=e.default},function(t,e,n){"use strict";function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function i(t,e,n,r,i){var o=f.uid(t._actionsRegistry,e+"."+n);t._actionsRegistry[o]=1;var a={id:o,namespace:e,name:n},u=function(e){return t.dispatch(o,e,a)},l=function(){for(var e=arguments.length,n=Array(e),o=0;o1?e-1:0),r=1;r1&&void 0!==arguments[1]?arguments[1]:{};return t===Function.prototype?e:i(Object.getPrototypeOf(t),d.assign(r(t,!0),e))}function o(t){"undefined"!=typeof console&&console.warn(new ReferenceError(t))}function s(t,e){for(var n=0,r=e;Object.hasOwnProperty.call(t,r);)n+=1,r=e+String(n);return r}function a(t){return t.replace(/[a-z]([A-Z])/g,function(t){return t[0]+"_"+t[1].toLowerCase()}).toUpperCase()}function c(t){if(void 0===t)return null;for(var e=arguments.length,n=Array(e>1?e-1:0),r=1;r0&&void 0!==arguments[0]?arguments[0]:{};s(this,t),this.config=e,this.serialize=e.serialize||JSON.stringify,this.deserialize=e.deserialize||JSON.parse,this.dispatcher=e.dispatcher||new a.Dispatcher,this.batchingFunction=e.batchingFunction||function(t){return t()},this.actions={global:{}},this.stores={},this.storeTransforms=e.storeTransforms||[],this.trapAsync=!1,this._actionsRegistry={},this._initSnapshot={},this._lastSnapshot={}}return t.prototype.dispatch=function(t,e,n){var r=this;this.batchingFunction(function(){var i=Math.random().toString(18).substr(2,16);if(t.hasOwnProperty("type")&&t.hasOwnProperty("payload")){var o={id:t.type,namespace:t.type,name:t.type};return r.dispatcher.dispatch(y.fsa(i,t.type,t.payload,o))}return t.id&&t.dispatch?y.dispatch(i,t,e,r):r.dispatcher.dispatch(y.fsa(i,t,e,n))})},t.prototype.createUnsavedStore=function(t){var e=t.displayName||"";h.createStoreConfig(this.config,t);for(var n=h.transformStore(this.storeTransforms,t),r=arguments.length,i=Array(r>1?r-1:0),o=1;o2?i-2:0),s=2;s1&&void 0!==arguments[1]?arguments[1]:{},r={},a=y.uid(this._actionsRegistry,t.displayName||t.name||"Unknown");if(l.isFunction(t)){l.assign(r,y.getPrototypeChain(t));for(var c=function(t){function e(){return s(this,e),i(this,t.apply(this,arguments))}return o(e,t),e.prototype.generateActions=function(){for(var t=arguments.length,e=Array(t),n=0;n2?u-2:0),p=2;p2?n-2:0),i=2;i2?n-2:0),i=2;i1&&void 0!==arguments[1]?arguments[1]:[];return(e.length?e:Object.keys(t.stores)).reduce(function(e,n){var r=n.displayName||n,i=t.stores[r],o=i.StoreModel.config;i.lifecycle("snapshot");var s=o.onSerialize&&o.onSerialize(i.state);return e[r]=s||i.getState(),e},{})}function o(t,e){var n=t.deserialize(t.serialize(t.stores[e].state));t._initSnapshot[e]=n,t._lastSnapshot[e]=n}function s(t,e,n){return n.reduce(function(t,n){var r=n.displayName||n;if(!e[r])throw new ReferenceError(r+" is not a valid store");return t[r]=e[r],t},{})}Object.defineProperty(e,"__esModule",{value:!0}),e.setAppState=r,e.snapshot=i,e.saveInitialSnapshot=o,e.filterSnapshots=s;var a=n(0),c=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}(a)},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{default:t}}function i(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function o(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function")}function s(t,e){if(!t)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!e||"object"!=typeof e&&"function"!=typeof e?t:e}function a(t,e){if("function"!=typeof e&&null!==e)throw new TypeError("Super expression must either be null or a function, not "+typeof e);t.prototype=Object.create(e&&e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}}),e&&(Object.setPrototypeOf?Object.setPrototypeOf(t,e):t.__proto__=e)}function c(t,e,n){if(n){var r=e.StoreModel.config,i=b.isFunction(n)?n(e.state):n;e.state=r.setState.call(t,e.state,i),t.alt.dispatcher.isDispatching()||t.emitChange()}}function u(t,e,n,r){return b.assign(t,m.default,{displayName:n,alt:e,dispatcher:e.dispatcher,preventDefault:function(){this.getInstance().preventDefault=!0},boundListeners:[],lifecycleEvents:{},actionListeners:{},publicMethods:{},handlesOwnErrors:!1},r)}function f(t,e){e.config=b.assign({getState:function(t){return Array.isArray(t)?t.slice():b.isMutableObject(t)?b.assign({},t):t},setState:function(t,e){return b.isMutableObject(e)?b.assign(t,e):e}},t,e.config)}function l(t,e){return t.reduce(function(t,e){return e(t)},e)}function p(t,e,n){var r=void 0,i=u({},t,n,b.assign({getInstance:function(){return r},setState:function(t){c(this,r,t)}},e));return i.bindListeners&&m.default.bindListeners.call(i,i.bindListeners),i.observe&&m.default.bindListeners.call(i,i.observe(t)),i.lifecycle&&b.eachObject(function(t,e){m.default.on.call(i,t,e)},[i.lifecycle]),r=b.assign(new _.default(t,i,void 0!==i.state?i.state:{},e),i.publicMethods,{displayName:n,config:e.config})}function h(t,e,n){var r=void 0,i=e.config,f=function(t){function e(){return o(this,e),s(this,t.apply(this,arguments))}return a(e,t),e}(e);u(f.prototype,t,n,{type:"AltStore",getInstance:function(){return r},setState:function(t){c(this,r,t)}});for(var l=arguments.length,p=Array(l>3?l-3:0),h=3;h0}})},exportPublicMethods:function(t){var e=this;s.eachObject(function(t,n){if(!s.isFunction(n))throw new TypeError("exportPublicMethods expects a function");e.publicMethods[t]=n},[t])},emitChange:function(){this.getInstance().emitChange()},on:function(t,e){"error"===t&&(this.handlesOwnErrors=!0);var n=this.lifecycleEvents[t]||(0,i.default)();return this.lifecycleEvents[t]=n,n.subscribe(e.bind(this))},bindAction:function(t,e){if(!t)throw new ReferenceError("Invalid action reference passed in");if(!s.isFunction(e))throw new TypeError("bindAction expects a function");var n=t.id?t.id:t;this.actionListeners[n]=this.actionListeners[n]||[],this.actionListeners[n].push(e.bind(this)),this.boundListeners.push(n)},bindActions:function(t){var e=this;s.eachObject(function(t,n){var r=/./,i=t.replace(r,function(t){return"on"+t[0].toUpperCase()});if(e[t]&&e[i])throw new ReferenceError("You have multiple action handlers bound to an action: "+t+" and "+i);var o=e[t]||e[i];o&&e.bindAction(n,o)},[t])},bindListeners:function(t){var e=this;s.eachObject(function(t,n){var r=e[t];if(!r)throw new ReferenceError(t+" defined but does not exist in "+e.displayName);Array.isArray(n)?n.forEach(function(t){e.bindAction(t,r)}):e.bindAction(n,r)},[t])}};e.default=a,t.exports=e.default},function(t,e,n){"use strict";function r(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n]);return e.default=t,e}function i(t,e,n,r,i){var o=f.uid(t._actionsRegistry,e+"."+n);t._actionsRegistry[o]=1;var a={id:o,namespace:e,name:n},u=function(e){return t.dispatch(o,e,a)},l=function(){for(var e=arguments.length,n=Array(e),o=0;o=0.10.0: version "2.0.3" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" -whatwg-fetch@^0.9.0: - version "0.9.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/whatwg-fetch/-/whatwg-fetch-0.9.0.tgz#0e3684c6cb9995b43efc9df03e4c365d95fd9cc0" - whatwg-url-compat@~0.6.5: version "0.6.5" resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz#00898111af689bb097541cd5a45ca6c8798445bf" From c2c611eb76abf6a7793eb2779287b9affb08c39a Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 15:51:27 -0500 Subject: [PATCH 11/21] Eslint fix for web app --- web/scripts/createIndex.js | 96 +++++++++++++++++++------------------- web/scripts/search.js | 15 +++--- web/webpack.config.js | 43 +++++++++-------- 3 files changed, 77 insertions(+), 77 deletions(-) diff --git a/web/scripts/createIndex.js b/web/scripts/createIndex.js index c3316a7b..616b69ce 100644 --- a/web/scripts/createIndex.js +++ b/web/scripts/createIndex.js @@ -1,69 +1,69 @@ -const fs = require('fs') -const path = require('path') -const lunr = require('lunr') +const fs = require('fs'); +const path = require('path'); +const lunr = require('lunr'); //eslint-disable-line const index = lunr(function () { - this.field('title', { boost: 10 }) - this.field('description', { boost: 5 }) - this.field('body') - this.field('layout') - this.field('permalink') -}) + this.field('title', { boost: 10 }); + this.field('description', { boost: 5 }); + this.field('body'); + this.field('layout'); + this.field('permalink'); +}); function addDocument(name, idx) { - const markdown = String(fs.readFileSync(name)).split('---') + const markdown = String(fs.readFileSync(name)).split('---'); - const topdoc = markdown[1] + const topdoc = markdown[1]; - const body = markdown.slice(2, markdown.length).join('') + const body = markdown.slice(2, markdown.length).join(''); - const doc = topdoc - .split('\n') - .filter(Boolean) - .reduce(function (obj, prop) { - const keyVal = prop.split(':') - obj[keyVal[0]] = keyVal[1].trim() - return obj - }, { id: idx, body: body }) + const doc = topdoc + .split('\n') + .filter(Boolean) + .reduce((obj, prop) => { + const keyVal = prop.split(':'); + obj[keyVal[0]] = keyVal[1].trim(); + return obj; + }, { id: idx, body }); - index.add(doc) + index.add(doc); - return { - id: doc.id, - title: doc.title, - description: doc.description, - body: doc.body, - permalink: doc.permalink - } + return { + id: doc.id, + title: doc.title, + description: doc.description, + body: doc.body, + permalink: doc.permalink + }; } function isDir(fullpath) { - try { - return fs.statSync(fullpath).isDirectory() - } catch (err) { - return null - } + try { + return fs.statSync(fullpath).isDirectory(); + } catch (err) { + return null; + } } function fromDirectory(dir) { - return fs.readdirSync(dir).reduce(function (dirs, file) { - const fullpath = path.join(dir, file) - if (isDir(fullpath)) { - dirs.push.apply(dirs, fromDirectory(path.join(fullpath))) - } else if (/.md$/.test(file)) { - dirs.push(fullpath) - } - return dirs - }, []) + return fs.readdirSync(dir).reduce((dirs, file) => { + const fullpath = path.join(dir, file); + if (isDir(fullpath)) { + dirs.push(...fromDirectory(path.join(fullpath))); + } else if (/.md$/.test(file)) { + dirs.push(fullpath); + } + return dirs; + }, []); } const documents = fromDirectory('../docs') - .concat(fromDirectory('../guides')) - .map(addDocument) + .concat(fromDirectory('../guides')) + .map(addDocument); const searchData = { - docs: documents, - index: index.toJSON() -} + docs: documents, + index: index.toJSON() +}; -fs.writeFileSync('./assets/search.json', JSON.stringify(searchData)) +fs.writeFileSync('./assets/search.json', JSON.stringify(searchData)); diff --git a/web/scripts/search.js b/web/scripts/search.js index 9a7cf6d5..c292dcb5 100644 --- a/web/scripts/search.js +++ b/web/scripts/search.js @@ -1,13 +1,14 @@ -import SearchApp from 'alt-search-docs' -import React from 'react' +import SearchApp from 'alt-search-docs'; //eslint-disable-line +import React from 'react'; //eslint-disable-line +import ReactDOM from 'react-dom'; //eslint-disable-line -const github = /goatslacker.github.io\/alt/ +const github = /goatslacker.github.io\/alt/; if (github.test(location.href)) { - location.href = location.href.replace(github, 'alt.js.org') + location.href = location.href.replace(github, 'alt.js.org'); } -React.render( +ReactDOM.render( , - document.getElementById('alt-search-app') -) + document.getElementById('alt-search-app') +); diff --git a/web/webpack.config.js b/web/webpack.config.js index bea820d4..74f9c8cc 100644 --- a/web/webpack.config.js +++ b/web/webpack.config.js @@ -1,24 +1,23 @@ -var path = require('path') -var webpack = require('webpack') +const path = require('path'); module.exports = { - entry: path.join(__dirname, 'scripts', 'search.js'), - output: { - filename: path.join(__dirname, 'assets', 'search.js') - }, - module: { - loaders: [ - { test: /\.js$/, - include: [ - path.join(__dirname, 'scripts'), - path.join(__dirname, '..', 'node_modules', 'alt-search-docs', 'src'), - path.join(__dirname, '..', 'node_modules', 'alt-search-docs', 'node_modules/react-text-highlight/src'), - ], - loader: 'babel-loader?stage=0' - }, - { test: /\.css$/, - loader: 'style-loader!css-loader' - } - ] - } -} + entry: path.join(__dirname, 'scripts', 'search.js'), + output: { + filename: path.join(__dirname, 'assets', 'search.js') + }, + module: { + loaders: [ + { test: /\.js$/, + include: [ + path.join(__dirname, 'scripts'), + path.join(__dirname, '..', 'node_modules', 'alt-search-docs', 'src'), + path.join(__dirname, '..', 'node_modules', 'alt-search-docs', 'node_modules/react-text-highlight/src') + ], + loader: 'babel-loader?stage=0' + }, + { test: /\.css$/, + loader: 'style-loader!css-loader' + } + ] + } +}; From 408c5aff9915d571b7331aefaafe7dd4a5913b8d Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 15:56:05 -0500 Subject: [PATCH 12/21] Fix for eslint errors --- scripts/this-dispatch-to-return.js | 185 +++++++++++++++-------------- 1 file changed, 97 insertions(+), 88 deletions(-) diff --git a/scripts/this-dispatch-to-return.js b/scripts/this-dispatch-to-return.js index 7fc02bc6..c0a73512 100644 --- a/scripts/this-dispatch-to-return.js +++ b/scripts/this-dispatch-to-return.js @@ -1,101 +1,110 @@ -const isDispatch = path => ( - path.value.type === 'CallExpression' && - path.value.callee.type === 'MemberExpression' && -// path.value.callee.object.type === 'ThisExpression' && // commented out so we support var self = this; self.dispatch(); - path.value.callee.property.type === 'Identifier' && - path.value.callee.property.name === 'dispatch' -) - -const isThisActions = path => ( - path.value.type === 'MemberExpression' && +const isDispatch = (path) => { + return ( + path.value.type === 'CallExpression' && + path.value.callee.type === 'MemberExpression' && + // path.value.callee.object.type === 'ThisExpression' && + // commented out so we support var self = this; self.dispatch(); + path.value.callee.property.type === 'Identifier' && + path.value.callee.property.name === 'dispatch' + ); +}; + +const isThisActions = (path) => { + return ( + path.value.type === 'MemberExpression' && path.value.object.type === 'MemberExpression' && path.value.object.property.type === 'Identifier' && path.value.object.property.name === 'actions' -) - -const updateDispatchToReturn = j => (p) => { - j(p).replaceWith(j.returnStatement(p.value.arguments[0] || null)) -} - -const updateDispatchToCall = j => (p) => { - j(p).replaceWith(j.callExpression(j.identifier('dispatch'), p.value.arguments)) -} - -const updateToJustThis = j => (p) => { - j(p).replaceWith(j.memberExpression(p.value.object.object, p.value.property)) -} + ); +}; + +const updateDispatchToReturn = (j) => { + return (p) => { + j(p).replaceWith(j.returnStatement(p.value.arguments[0] || null)); + }; +}; + +const updateDispatchToCall = (j) => { + return (p) => { + j(p).replaceWith(j.callExpression(j.identifier('dispatch'), p.value.arguments)); + }; +}; + +const updateToJustThis = (j) => { + return (p) => { + j(p).replaceWith(j.memberExpression(p.value.object.object, p.value.property)); + }; +}; const findDispatches = (j, p) => { - return j(p).find(j.CallExpression).filter(isDispatch) -} + return j(p).find(j.CallExpression).filter(isDispatch); +}; const findThisActionReferences = (j, p) => { - return j(p).find(j.MemberExpression).filter(isThisActions) -} + return j(p).find(j.MemberExpression).filter(isThisActions); +}; const replaceFunction = (j, p) => { - j(p).replaceWith(j.functionExpression( - null, - p.value.params, - j.blockStatement([ - j.returnStatement( - j.functionExpression( - null, - [j.identifier('dispatch')], - j.blockStatement(p.value.body.body) - ) - ) - ]) - )) -} + j(p).replaceWith(j.functionExpression( + null, + p.value.params, + j.blockStatement([ + j.returnStatement( + j.functionExpression( + null, + [j.identifier('dispatch')], + j.blockStatement(p.value.body.body) + ) + ) + ]) + )); +}; module.exports = (file, api) => { - const j = api.jscodeshift - const root = j(file.source) + const j = api.jscodeshift; + const root = j(file.source); - root.find(j.FunctionExpression).forEach((p) => { + root.find(j.FunctionExpression).forEach((p) => { // ignore constructors - if (p.parent.value.type === 'MethodDefinition' && p.parent.value.kind === 'constructor') { - return - } - - // find all dispatches that are inside the function - const dispatches = findDispatches(j, p).size() - const withinParent = findDispatches(j, p).filter(x => x.parent.parent.parent.value === p.value).size() - - if (withinParent === 0 && dispatches > 0) { - replaceFunction(j, p) - findDispatches(j, p).forEach(updateDispatchToCall(j)) - - } else if (dispatches === 0) { - const hasReturn = j(p).find(j.ReturnStatement).size() > 0 - if (hasReturn) { - console.warn('Could not transform function because it returned', 'at line', p.parent.value.loc.start.line) - } else { - console.warn('This function does not dispatch?', 'at line', p.parent.value.loc.start.line) - } - - // if there are multiple dispatches happening then we'll need to return a - // dispatch function and update this.dispatch to a dispatch call - } else if (dispatches > 1) { - replaceFunction(j, p) - findDispatches(j, p).forEach(updateDispatchToCall(j)) - - // if there's a single dispatch then it's ok to return to dispatch - } else { - // if its the only statement within the function - if (p.value.body.body.length === 1) { - findDispatches(j, p).forEach(updateDispatchToReturn(j)) - // otherwise lets run the function - } else { - replaceFunction(j, p) - findDispatches(j, p).forEach(updateDispatchToCall(j)) - } - } - - // Also find any mentions to `this.actions` - findThisActionReferences(j, p).forEach(updateToJustThis(j)) - }) - - return root.toSource({ quote: 'single' }) -} + if (p.parent.value.type === 'MethodDefinition' && p.parent.value.kind === 'constructor') { + return; + } + + // find all dispatches that are inside the function + const dispatches = findDispatches(j, p).size(); + const withinParent = findDispatches(j, p).filter((x) => { + return x.parent.parent.parent.value === p.value; + }).size(); + + if (withinParent === 0 && dispatches > 0) { + replaceFunction(j, p); + findDispatches(j, p).forEach(updateDispatchToCall(j)); + } else if (dispatches === 0) { + const hasReturn = j(p).find(j.ReturnStatement).size() > 0; + if (hasReturn) { + console.warn('Could not transform function because it returned', 'at line', p.parent.value.loc.start.line); + } else { + console.warn('This function does not dispatch?', 'at line', p.parent.value.loc.start.line); + } + + // if there are multiple dispatches happening then we'll need to return a + // dispatch function and update this.dispatch to a dispatch call + } else if (dispatches > 1) { + replaceFunction(j, p); + findDispatches(j, p).forEach(updateDispatchToCall(j)); + // if there's a single dispatch then it's ok to return to dispatch + } else if (p.value.body.body.length === 1) { + // if its the only statement within the function + findDispatches(j, p).forEach(updateDispatchToReturn(j)); + } else { + // otherwise lets run the function + replaceFunction(j, p); + findDispatches(j, p).forEach(updateDispatchToCall(j)); + } + + // Also find any mentions to `this.actions` + findThisActionReferences(j, p).forEach(updateToJustThis(j)); + }); + + return root.toSource({ quote: 'single' }); +}; From ad3f1c202dbce362a70fcb9c4d5546d32b2ce9f5 Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 15:57:54 -0500 Subject: [PATCH 13/21] Update to make prop types a dev dep --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e701ff3c..6fb5951e 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,6 @@ "dependencies": { "flux": "^3.1.3", "is-promise": "^2.1.0", - "prop-types": "^15.6.0", "transmitter": "^3.0.1" }, "devDependencies": { @@ -43,6 +42,7 @@ "object-assign": "^2.0.0", "react": "~15.6.2", "react-dom": "~15.6.2", + "prop-types": "^15.6.0", "rimraf": "^2.3.2", "sinon": "^1.14.0", "style-loader": "^0.18.2", From 35c439a93411a3ab1b766b50307904907b99dd37 Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 16:18:45 -0500 Subject: [PATCH 14/21] Update eslint to use two spaces --- .eslintrc | 3 - package.json | 2 +- scripts/this-dispatch-to-return.js | 138 +- src/actions/index.js | 80 +- src/functions.js | 22 +- src/index.js | 414 +++--- src/store/AltStore.js | 206 +-- src/store/StoreMixin.js | 284 ++-- src/store/index.js | 258 ++-- src/utils/AltUtils.js | 98 +- src/utils/StateFunctions.js | 70 +- test/actions-dump-test.js | 34 +- test/alt-config-object.js | 108 +- test/async-action-test.js | 44 +- test/async-test.js | 462 +++--- test/batching-test.js | 152 +- test/before-and-after-test.js | 120 +- test/bound-listeners-test.js | 128 +- test/config-set-get-state-test.js | 84 +- test/debug-alt-test.js | 42 +- test/es3-module-pattern.js | 214 +-- test/failed-dispatch-test.js | 130 +- test/functional-test.js | 240 ++-- test/functions-test.js | 122 +- test/helpers/SaaM.js | 2 +- test/index.js | 2064 +++++++++++++-------------- test/setting-state.js | 268 ++-- test/store-as-a-module.js | 16 +- test/store-model-test.js | 64 +- test/store-transforms-test.js | 32 +- test/stores-get-alt.js | 32 +- test/stores-with-colliding-names.js | 64 +- test/value-stores-test.js | 98 +- 33 files changed, 3046 insertions(+), 3049 deletions(-) diff --git a/.eslintrc b/.eslintrc index 0b30e896..454d023a 100644 --- a/.eslintrc +++ b/.eslintrc @@ -6,9 +6,6 @@ "es6": true }, "rules": { - "indent": [1, 4, { - "SwitchCase": 1 - }], "comma-dangle": [2, "never"], "arrow-body-style": [2, "always"], "class-methods-use-this": 0, diff --git a/package.json b/package.json index 6fb5951e..c0cf9a8f 100644 --- a/package.json +++ b/package.json @@ -64,7 +64,7 @@ "clean": "rimraf lib", "coverage": "npm run transpile-cover && babel-node node_modules/.bin/istanbul cover node_modules/.bin/_mocha -- -u exports -R tap --require test/babel test", "lint": "eslint src components", - "lint-fix": "eslint --fix src components", + "lint-fix": "eslint --fix src test scripts", "postversion": "git push && git push --tags", "prepublish": "npm run lint && npm run build", "pretest": "npm run clean && npm run transpile", diff --git a/scripts/this-dispatch-to-return.js b/scripts/this-dispatch-to-return.js index c0a73512..94123b47 100644 --- a/scripts/this-dispatch-to-return.js +++ b/scripts/this-dispatch-to-return.js @@ -1,110 +1,110 @@ const isDispatch = (path) => { - return ( - path.value.type === 'CallExpression' && + return ( + path.value.type === 'CallExpression' && path.value.callee.type === 'MemberExpression' && // path.value.callee.object.type === 'ThisExpression' && // commented out so we support var self = this; self.dispatch(); path.value.callee.property.type === 'Identifier' && path.value.callee.property.name === 'dispatch' - ); + ); }; const isThisActions = (path) => { - return ( - path.value.type === 'MemberExpression' && + return ( + path.value.type === 'MemberExpression' && path.value.object.type === 'MemberExpression' && path.value.object.property.type === 'Identifier' && path.value.object.property.name === 'actions' - ); + ); }; const updateDispatchToReturn = (j) => { - return (p) => { - j(p).replaceWith(j.returnStatement(p.value.arguments[0] || null)); - }; + return (p) => { + j(p).replaceWith(j.returnStatement(p.value.arguments[0] || null)); + }; }; const updateDispatchToCall = (j) => { - return (p) => { - j(p).replaceWith(j.callExpression(j.identifier('dispatch'), p.value.arguments)); - }; + return (p) => { + j(p).replaceWith(j.callExpression(j.identifier('dispatch'), p.value.arguments)); + }; }; const updateToJustThis = (j) => { - return (p) => { - j(p).replaceWith(j.memberExpression(p.value.object.object, p.value.property)); - }; + return (p) => { + j(p).replaceWith(j.memberExpression(p.value.object.object, p.value.property)); + }; }; const findDispatches = (j, p) => { - return j(p).find(j.CallExpression).filter(isDispatch); + return j(p).find(j.CallExpression).filter(isDispatch); }; const findThisActionReferences = (j, p) => { - return j(p).find(j.MemberExpression).filter(isThisActions); + return j(p).find(j.MemberExpression).filter(isThisActions); }; const replaceFunction = (j, p) => { - j(p).replaceWith(j.functionExpression( - null, - p.value.params, - j.blockStatement([ - j.returnStatement( - j.functionExpression( - null, - [j.identifier('dispatch')], - j.blockStatement(p.value.body.body) - ) - ) - ]) - )); + j(p).replaceWith(j.functionExpression( + null, + p.value.params, + j.blockStatement([ + j.returnStatement( + j.functionExpression( + null, + [j.identifier('dispatch')], + j.blockStatement(p.value.body.body) + ) + ) + ]) + )); }; module.exports = (file, api) => { - const j = api.jscodeshift; - const root = j(file.source); + const j = api.jscodeshift; + const root = j(file.source); - root.find(j.FunctionExpression).forEach((p) => { + root.find(j.FunctionExpression).forEach((p) => { // ignore constructors - if (p.parent.value.type === 'MethodDefinition' && p.parent.value.kind === 'constructor') { - return; - } + if (p.parent.value.type === 'MethodDefinition' && p.parent.value.kind === 'constructor') { + return; + } - // find all dispatches that are inside the function - const dispatches = findDispatches(j, p).size(); - const withinParent = findDispatches(j, p).filter((x) => { - return x.parent.parent.parent.value === p.value; - }).size(); + // find all dispatches that are inside the function + const dispatches = findDispatches(j, p).size(); + const withinParent = findDispatches(j, p).filter((x) => { + return x.parent.parent.parent.value === p.value; + }).size(); - if (withinParent === 0 && dispatches > 0) { - replaceFunction(j, p); - findDispatches(j, p).forEach(updateDispatchToCall(j)); - } else if (dispatches === 0) { - const hasReturn = j(p).find(j.ReturnStatement).size() > 0; - if (hasReturn) { - console.warn('Could not transform function because it returned', 'at line', p.parent.value.loc.start.line); - } else { - console.warn('This function does not dispatch?', 'at line', p.parent.value.loc.start.line); - } + if (withinParent === 0 && dispatches > 0) { + replaceFunction(j, p); + findDispatches(j, p).forEach(updateDispatchToCall(j)); + } else if (dispatches === 0) { + const hasReturn = j(p).find(j.ReturnStatement).size() > 0; + if (hasReturn) { + console.warn('Could not transform function because it returned', 'at line', p.parent.value.loc.start.line); + } else { + console.warn('This function does not dispatch?', 'at line', p.parent.value.loc.start.line); + } - // if there are multiple dispatches happening then we'll need to return a - // dispatch function and update this.dispatch to a dispatch call - } else if (dispatches > 1) { - replaceFunction(j, p); - findDispatches(j, p).forEach(updateDispatchToCall(j)); - // if there's a single dispatch then it's ok to return to dispatch - } else if (p.value.body.body.length === 1) { - // if its the only statement within the function - findDispatches(j, p).forEach(updateDispatchToReturn(j)); - } else { - // otherwise lets run the function - replaceFunction(j, p); - findDispatches(j, p).forEach(updateDispatchToCall(j)); - } + // if there are multiple dispatches happening then we'll need to return a + // dispatch function and update this.dispatch to a dispatch call + } else if (dispatches > 1) { + replaceFunction(j, p); + findDispatches(j, p).forEach(updateDispatchToCall(j)); + // if there's a single dispatch then it's ok to return to dispatch + } else if (p.value.body.body.length === 1) { + // if its the only statement within the function + findDispatches(j, p).forEach(updateDispatchToReturn(j)); + } else { + // otherwise lets run the function + replaceFunction(j, p); + findDispatches(j, p).forEach(updateDispatchToCall(j)); + } - // Also find any mentions to `this.actions` - findThisActionReferences(j, p).forEach(updateToJustThis(j)); - }); + // Also find any mentions to `this.actions` + findThisActionReferences(j, p).forEach(updateToJustThis(j)); + }); - return root.toSource({ quote: 'single' }); + return root.toSource({ quote: 'single' }); }; diff --git a/src/actions/index.js b/src/actions/index.js index d8939153..b68c331b 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -3,46 +3,46 @@ import * as fn from '../functions'; import * as utils from '../utils/AltUtils'; export default function makeAction(alt, namespace, name, implementation, obj) { - const id = utils.uid(alt._actionsRegistry, `${namespace}.${name}`); + const id = utils.uid(alt._actionsRegistry, `${namespace}.${name}`); alt._actionsRegistry[id] = 1; //eslint-disable-line - const data = { id, namespace, name }; - - const dispatch = (payload) => { return alt.dispatch(id, payload, data); }; - - // the action itself - const action = (...args) => { - const invocationResult = implementation.apply(obj, args); - let actionResult = invocationResult; - - // async functions that return promises should not be dispatched - if (invocationResult !== undefined && !isPromise(invocationResult)) { - if (fn.isFunction(invocationResult)) { - // inner function result should be returned as an action result - actionResult = invocationResult(dispatch, alt); - } else { - dispatch(invocationResult); - } - } - - if (invocationResult === undefined) { - utils.warn('An action was called but nothing was dispatched'); - } - - return actionResult; - }; - action.defer = (...args) => { return setTimeout(() => { return action(...args); }); }; - action.id = id; - action.data = data; - - // ensure each reference is unique in the namespace - const container = alt.actions[namespace]; - const namespaceId = utils.uid(container, name); - container[namespaceId] = action; - - // generate a constant - const constant = utils.formatAsConstant(namespaceId); - container[constant] = id; - - return action; + const data = { id, namespace, name }; + + const dispatch = (payload) => { return alt.dispatch(id, payload, data); }; + + // the action itself + const action = (...args) => { + const invocationResult = implementation.apply(obj, args); + let actionResult = invocationResult; + + // async functions that return promises should not be dispatched + if (invocationResult !== undefined && !isPromise(invocationResult)) { + if (fn.isFunction(invocationResult)) { + // inner function result should be returned as an action result + actionResult = invocationResult(dispatch, alt); + } else { + dispatch(invocationResult); + } + } + + if (invocationResult === undefined) { + utils.warn('An action was called but nothing was dispatched'); + } + + return actionResult; + }; + action.defer = (...args) => { return setTimeout(() => { return action(...args); }); }; + action.id = id; + action.data = data; + + // ensure each reference is unique in the namespace + const container = alt.actions[namespace]; + const namespaceId = utils.uid(container, name); + container[namespaceId] = action; + + // generate a constant + const constant = utils.formatAsConstant(namespaceId); + container[constant] = id; + + return action; } diff --git a/src/functions.js b/src/functions.js index f0fb4f71..b33ee137 100644 --- a/src/functions.js +++ b/src/functions.js @@ -1,10 +1,10 @@ export const isFunction = (x) => { return typeof x === 'function'; }; export function isMutableObject(target) { - const Ctor = target.constructor; + const Ctor = target.constructor; - return ( - !!target + return ( + !!target && Object.prototype.toString.call(target) === '[object Object]' && @@ -13,20 +13,20 @@ export function isMutableObject(target) { !Object.isFrozen(target) && (Ctor instanceof Ctor || target.type === 'AltStore') - ); + ); } export function eachObject(f, o) { - o.forEach((from) => { - Object.keys(Object(from)).forEach((key) => { - f(key, from[key]); - }); + o.forEach((from) => { + Object.keys(Object(from)).forEach((key) => { + f(key, from[key]); }); + }); } export function assign(target, ...source) { - eachObject((key, value) => { + eachObject((key, value) => { target[key] = value; //eslint-disable-line - }, source); - return target; + }, source); + return target; } diff --git a/src/index.js b/src/index.js index ba8774cb..293b9fbd 100644 --- a/src/index.js +++ b/src/index.js @@ -8,234 +8,234 @@ import * as utils from './utils/AltUtils'; import makeAction from './actions'; class Alt { - constructor(config = {}) { - this.config = config; - this.serialize = config.serialize || JSON.stringify; - this.deserialize = config.deserialize || JSON.parse; - this.dispatcher = config.dispatcher || new Dispatcher(); - this.batchingFunction = config.batchingFunction || ((callback) => { return callback(); }); - this.actions = { global: {} }; - this.stores = {}; - this.storeTransforms = config.storeTransforms || []; - this.trapAsync = false; - this._actionsRegistry = {}; - this._initSnapshot = {}; - this._lastSnapshot = {}; - } - - dispatch(action, data, details) { - this.batchingFunction(() => { - const id = Math.random().toString(18).substr(2, 16); - - // support straight dispatching of FSA-style actions - if (action.hasOwnProperty('type') && action.hasOwnProperty('payload')) { - const fsaDetails = { - id: action.type, - namespace: action.type, - name: action.type - }; - return this.dispatcher.dispatch( - utils.fsa(id, action.type, action.payload, fsaDetails), - ); - } - - if (action.id && action.dispatch) { - return utils.dispatch(id, action, data, this); - } - - return this.dispatcher.dispatch(utils.fsa(id, action, data, details)); - }); - } - - createUnsavedStore(StoreModel, ...args) { - const key = StoreModel.displayName || ''; - store.createStoreConfig(this.config, StoreModel); - const Store = store.transformStore(this.storeTransforms, StoreModel); - - return fn.isFunction(Store) - ? store.createStoreFromClass(this, Store, key, ...args) - : store.createStoreFromObject(this, Store, key); - } - - createStore(StoreModel, iden, ...args) { - let key = iden || StoreModel.displayName || StoreModel.name || ''; - store.createStoreConfig(this.config, StoreModel); - const Store = store.transformStore(this.storeTransforms, StoreModel); - - /* istanbul ignore next */ - if (module.hot) delete this.stores[key]; - - if (this.stores[key] || !key) { - if (this.stores[key]) { - utils.warn( - `A store named ${key} already exists, double check your store ` + + constructor(config = {}) { + this.config = config; + this.serialize = config.serialize || JSON.stringify; + this.deserialize = config.deserialize || JSON.parse; + this.dispatcher = config.dispatcher || new Dispatcher(); + this.batchingFunction = config.batchingFunction || ((callback) => { return callback(); }); + this.actions = { global: {} }; + this.stores = {}; + this.storeTransforms = config.storeTransforms || []; + this.trapAsync = false; + this._actionsRegistry = {}; + this._initSnapshot = {}; + this._lastSnapshot = {}; + } + + dispatch(action, data, details) { + this.batchingFunction(() => { + const id = Math.random().toString(18).substr(2, 16); + + // support straight dispatching of FSA-style actions + if (action.hasOwnProperty('type') && action.hasOwnProperty('payload')) { + const fsaDetails = { + id: action.type, + namespace: action.type, + name: action.type + }; + return this.dispatcher.dispatch( + utils.fsa(id, action.type, action.payload, fsaDetails), + ); + } + + if (action.id && action.dispatch) { + return utils.dispatch(id, action, data, this); + } + + return this.dispatcher.dispatch(utils.fsa(id, action, data, details)); + }); + } + + createUnsavedStore(StoreModel, ...args) { + const key = StoreModel.displayName || ''; + store.createStoreConfig(this.config, StoreModel); + const Store = store.transformStore(this.storeTransforms, StoreModel); + + return fn.isFunction(Store) + ? store.createStoreFromClass(this, Store, key, ...args) + : store.createStoreFromObject(this, Store, key); + } + + createStore(StoreModel, iden, ...args) { + let key = iden || StoreModel.displayName || StoreModel.name || ''; + store.createStoreConfig(this.config, StoreModel); + const Store = store.transformStore(this.storeTransforms, StoreModel); + + /* istanbul ignore next */ + if (module.hot) delete this.stores[key]; + + if (this.stores[key] || !key) { + if (this.stores[key]) { + utils.warn( + `A store named ${key} already exists, double check your store ` + 'names or pass in your own custom identifier for each store', - ); - } else { - utils.warn('Store name was not specified'); - } - - key = utils.uid(this.stores, key); - } - - const storeInstance = fn.isFunction(Store) - ? store.createStoreFromClass(this, Store, key, ...args) - : store.createStoreFromObject(this, Store, key); - - this.stores[key] = storeInstance; - StateFunctions.saveInitialSnapshot(this, key); + ); + } else { + utils.warn('Store name was not specified'); + } - return storeInstance; + key = utils.uid(this.stores, key); } - generateActions(...actionNames) { - const actions = { name: 'global' }; - return this.createActions(actionNames.reduce((obj, action) => { - obj[action] = utils.dispatchIdentity; //eslint-disable-line - return obj; - }, actions)); - } + const storeInstance = fn.isFunction(Store) + ? store.createStoreFromClass(this, Store, key, ...args) + : store.createStoreFromObject(this, Store, key); - createAction(name, implementation, obj) { - return makeAction(this, 'global', name, implementation, obj); - } + this.stores[key] = storeInstance; + StateFunctions.saveInitialSnapshot(this, key); - createActions(ActionsClass, exportObj = {}, ...argsForConstructor) { - const actions = {}; - const key = utils.uid( - this._actionsRegistry, - ActionsClass.displayName || ActionsClass.name || 'Unknown', - ); + return storeInstance; + } - if (fn.isFunction(ActionsClass)) { - fn.assign(actions, utils.getPrototypeChain(ActionsClass)); - class ActionsGenerator extends ActionsClass { + generateActions(...actionNames) { + const actions = { name: 'global' }; + return this.createActions(actionNames.reduce((obj, action) => { + obj[action] = utils.dispatchIdentity; //eslint-disable-line + return obj; + }, actions)); + } + + createAction(name, implementation, obj) { + return makeAction(this, 'global', name, implementation, obj); + } + + createActions(ActionsClass, exportObj = {}, ...argsForConstructor) { + const actions = {}; + const key = utils.uid( + this._actionsRegistry, + ActionsClass.displayName || ActionsClass.name || 'Unknown', + ); + + if (fn.isFunction(ActionsClass)) { + fn.assign(actions, utils.getPrototypeChain(ActionsClass)); + class ActionsGenerator extends ActionsClass { generateActions(...actionNames) { //eslint-disable-line - actionNames.forEach((actionName) => { - actions[actionName] = utils.dispatchIdentity; - }); - } - } - fn.assign(actions, new ActionsGenerator(...argsForConstructor)); - } else { - fn.assign(actions, ActionsClass); + actionNames.forEach((actionName) => { + actions[actionName] = utils.dispatchIdentity; + }); } + } + fn.assign(actions, new ActionsGenerator(...argsForConstructor)); + } else { + fn.assign(actions, ActionsClass); + } - this.actions[key] = this.actions[key] || {}; + this.actions[key] = this.actions[key] || {}; - fn.eachObject((actionName, action) => { - if (!fn.isFunction(action)) { + fn.eachObject((actionName, action) => { + if (!fn.isFunction(action)) { exportObj[actionName] = action; //eslint-disable-line - return; - } + return; + } - // create the action + // create the action exportObj[actionName] = makeAction( //eslint-disable-line - this, - key, - actionName, - action, - exportObj, - ); - - // generate a constant - const constant = utils.formatAsConstant(actionName); + this, + key, + actionName, + action, + exportObj, + ); + + // generate a constant + const constant = utils.formatAsConstant(actionName); exportObj[constant] = exportObj[actionName].id; //eslint-disable-line - }, [actions]); - - return exportObj; - } - - takeSnapshot(...storeNames) { - const state = StateFunctions.snapshot(this, storeNames); - fn.assign(this._lastSnapshot, state); - return this.serialize(state); - } - - rollback() { - StateFunctions.setAppState( - this, - this.serialize(this._lastSnapshot), - (storeInst) => { - storeInst.lifecycle('rollback'); - storeInst.emitChange(); - }, - ); - } - - recycle(...storeNames) { - const initialSnapshot = storeNames.length - ? StateFunctions.filterSnapshots( - this, - this._initSnapshot, - storeNames, - ) - : this._initSnapshot; - - StateFunctions.setAppState( - this, - this.serialize(initialSnapshot), - (storeInst) => { - storeInst.lifecycle('init'); - storeInst.emitChange(); - }, - ); - } - - flush() { - const state = this.serialize(StateFunctions.snapshot(this)); - this.recycle(); - return state; - } - - bootstrap(data) { - StateFunctions.setAppState(this, data, (storeInst, state) => { - storeInst.lifecycle('bootstrap', state); - storeInst.emitChange(); - }); - } - - prepare(storeInst, payload) { - const data = {}; - if (!storeInst.displayName) { - throw new ReferenceError('Store provided does not have a name'); - } - data[storeInst.displayName] = payload; - return this.serialize(data); - } - - // Instance type methods for injecting alt into your application as context - - addActions(name, ActionsClass, ...args) { - this.actions[name] = Array.isArray(ActionsClass) + }, [actions]); + + return exportObj; + } + + takeSnapshot(...storeNames) { + const state = StateFunctions.snapshot(this, storeNames); + fn.assign(this._lastSnapshot, state); + return this.serialize(state); + } + + rollback() { + StateFunctions.setAppState( + this, + this.serialize(this._lastSnapshot), + (storeInst) => { + storeInst.lifecycle('rollback'); + storeInst.emitChange(); + }, + ); + } + + recycle(...storeNames) { + const initialSnapshot = storeNames.length + ? StateFunctions.filterSnapshots( + this, + this._initSnapshot, + storeNames, + ) + : this._initSnapshot; + + StateFunctions.setAppState( + this, + this.serialize(initialSnapshot), + (storeInst) => { + storeInst.lifecycle('init'); + storeInst.emitChange(); + }, + ); + } + + flush() { + const state = this.serialize(StateFunctions.snapshot(this)); + this.recycle(); + return state; + } + + bootstrap(data) { + StateFunctions.setAppState(this, data, (storeInst, state) => { + storeInst.lifecycle('bootstrap', state); + storeInst.emitChange(); + }); + } + + prepare(storeInst, payload) { + const data = {}; + if (!storeInst.displayName) { + throw new ReferenceError('Store provided does not have a name'); + } + data[storeInst.displayName] = payload; + return this.serialize(data); + } + + // Instance type methods for injecting alt into your application as context + + addActions(name, ActionsClass, ...args) { + this.actions[name] = Array.isArray(ActionsClass) ? this.generateActions.apply(this, ActionsClass) //eslint-disable-line - : this.createActions(ActionsClass, ...args); - } + : this.createActions(ActionsClass, ...args); + } - addStore(name, StoreModel, ...args) { - this.createStore(StoreModel, name, ...args); - } + addStore(name, StoreModel, ...args) { + this.createStore(StoreModel, name, ...args); + } - getActions(name) { - return this.actions[name]; - } + getActions(name) { + return this.actions[name]; + } - getStore(name) { - return this.stores[name]; - } + getStore(name) { + return this.stores[name]; + } - static debug(name, alt, win) { - const key = 'alt.js.org'; - let context = win; - if (!context && typeof window !== 'undefined') { - context = window; - } - if (typeof context !== 'undefined') { - context[key] = context[key] || []; - context[key].push({ name, alt }); - } - return alt; + static debug(name, alt, win) { + const key = 'alt.js.org'; + let context = win; + if (!context && typeof window !== 'undefined') { + context = window; + } + if (typeof context !== 'undefined') { + context[key] = context[key] || []; + context[key].push({ name, alt }); } + return alt; + } } export default Alt; diff --git a/src/store/AltStore.js b/src/store/AltStore.js index 16fd8a28..0d5e6afa 100644 --- a/src/store/AltStore.js +++ b/src/store/AltStore.js @@ -2,110 +2,110 @@ import transmitter from 'transmitter'; import * as fn from '../functions'; class AltStore { - constructor(alt, model, state, StoreModel) { - const lifecycleEvents = model.lifecycleEvents; - this.transmitter = transmitter(); - this.lifecycle = (event, x) => { - if (lifecycleEvents[event]) lifecycleEvents[event].publish(x); - }; - this.state = state; - - this.alt = alt; - this.preventDefault = false; - this.displayName = model.displayName; - this.boundListeners = model.boundListeners; - this.StoreModel = StoreModel; - this.reduce = model.reduce || ((x) => { return x; }); - this.subscriptions = []; - - const output = model.output || ((x) => { return x; }); - - this.emitChange = () => { return this.transmitter.publish(output(this.state)); }; - - const handleDispatch = (f, payload) => { - try { - return f(); - } catch (e) { - if (model.handlesOwnErrors) { - this.lifecycle('error', { - error: e, - payload, - state: this.state - }); - return false; - } - - throw e; - } - }; - - fn.assign(this, model.publicMethods); - - // Register dispatcher - this.dispatchToken = alt.dispatcher.register((payload) => { - this.preventDefault = false; - - this.lifecycle('beforeEach', { - payload, - state: this.state + constructor(alt, model, state, StoreModel) { + const lifecycleEvents = model.lifecycleEvents; + this.transmitter = transmitter(); + this.lifecycle = (event, x) => { + if (lifecycleEvents[event]) lifecycleEvents[event].publish(x); + }; + this.state = state; + + this.alt = alt; + this.preventDefault = false; + this.displayName = model.displayName; + this.boundListeners = model.boundListeners; + this.StoreModel = StoreModel; + this.reduce = model.reduce || ((x) => { return x; }); + this.subscriptions = []; + + const output = model.output || ((x) => { return x; }); + + this.emitChange = () => { return this.transmitter.publish(output(this.state)); }; + + const handleDispatch = (f, payload) => { + try { + return f(); + } catch (e) { + if (model.handlesOwnErrors) { + this.lifecycle('error', { + error: e, + payload, + state: this.state + }); + return false; + } + + throw e; + } + }; + + fn.assign(this, model.publicMethods); + + // Register dispatcher + this.dispatchToken = alt.dispatcher.register((payload) => { + this.preventDefault = false; + + this.lifecycle('beforeEach', { + payload, + state: this.state + }); + + const actionHandlers = model.actionListeners[payload.action]; + + if (actionHandlers || model.otherwise) { + let result; + + if (actionHandlers) { + result = handleDispatch(() => { + return actionHandlers.filter(Boolean).every((handler) => { + return handler.call(model, payload.data, payload.action) !== false; }); - - const actionHandlers = model.actionListeners[payload.action]; - - if (actionHandlers || model.otherwise) { - let result; - - if (actionHandlers) { - result = handleDispatch(() => { - return actionHandlers.filter(Boolean).every((handler) => { - return handler.call(model, payload.data, payload.action) !== false; - }); - }, payload); - } else { - result = handleDispatch(() => { - model.otherwise(payload.data, payload.action); - }, payload); - } - if (result !== false && !this.preventDefault) this.emitChange(); - } - - if (model.reduce) { - handleDispatch(() => { - const value = model.reduce(this.state, payload); - if (value !== undefined) this.state = value; - }, payload); - if (!this.preventDefault) this.emitChange(); - } - - this.lifecycle('afterEach', { - payload, - state: this.state - }); - }); - - this.lifecycle('init'); - } - - listen(cb) { - if (!fn.isFunction(cb)) throw new TypeError('listen expects a function'); - const { dispose } = this.transmitter.subscribe(cb); - this.subscriptions.push({ cb, dispose }); - return () => { - this.lifecycle('unlisten'); - dispose(); - }; - } - - unlisten(cb) { - this.lifecycle('unlisten'); - this.subscriptions - .filter((subscription) => { return subscription.cb === cb; }) - .forEach((subscription) => { return subscription.dispose(); }); - } - - getState() { - return this.StoreModel.config.getState.call(this, this.state); - } + }, payload); + } else { + result = handleDispatch(() => { + model.otherwise(payload.data, payload.action); + }, payload); + } + if (result !== false && !this.preventDefault) this.emitChange(); + } + + if (model.reduce) { + handleDispatch(() => { + const value = model.reduce(this.state, payload); + if (value !== undefined) this.state = value; + }, payload); + if (!this.preventDefault) this.emitChange(); + } + + this.lifecycle('afterEach', { + payload, + state: this.state + }); + }); + + this.lifecycle('init'); + } + + listen(cb) { + if (!fn.isFunction(cb)) throw new TypeError('listen expects a function'); + const { dispose } = this.transmitter.subscribe(cb); + this.subscriptions.push({ cb, dispose }); + return () => { + this.lifecycle('unlisten'); + dispose(); + }; + } + + unlisten(cb) { + this.lifecycle('unlisten'); + this.subscriptions + .filter((subscription) => { return subscription.cb === cb; }) + .forEach((subscription) => { return subscription.dispose(); }); + } + + getState() { + return this.StoreModel.config.getState.call(this, this.state); + } } export default AltStore; diff --git a/src/store/StoreMixin.js b/src/store/StoreMixin.js index 955f04b1..5a8ce7f9 100644 --- a/src/store/StoreMixin.js +++ b/src/store/StoreMixin.js @@ -2,164 +2,164 @@ import transmitter from 'transmitter'; import * as fn from '../functions'; const StoreMixin = { - waitFor(...sources) { - if (!sources.length) { - throw new ReferenceError('Dispatch tokens not provided'); - } + waitFor(...sources) { + if (!sources.length) { + throw new ReferenceError('Dispatch tokens not provided'); + } - let sourcesArray = sources; - if (sources.length === 1) { - sourcesArray = Array.isArray(sources[0]) ? sources[0] : sources; - } + let sourcesArray = sources; + if (sources.length === 1) { + sourcesArray = Array.isArray(sources[0]) ? sources[0] : sources; + } - const tokens = sourcesArray.map((source) => { return source.dispatchToken || source; }); + const tokens = sourcesArray.map((source) => { return source.dispatchToken || source; }); - this.dispatcher.waitFor(tokens); - }, + this.dispatcher.waitFor(tokens); + }, - exportAsync(asyncMethods) { - this.registerAsync(asyncMethods); - }, + exportAsync(asyncMethods) { + this.registerAsync(asyncMethods); + }, - registerAsync(asyncDef) { - let loadCounter = 0; + registerAsync(asyncDef) { + let loadCounter = 0; - const asyncMethods = fn.isFunction(asyncDef) - ? asyncDef(this.alt) - : asyncDef; + const asyncMethods = fn.isFunction(asyncDef) + ? asyncDef(this.alt) + : asyncDef; - const toExport = Object.keys(asyncMethods).reduce((publicMethods, methodName) => { - const desc = asyncMethods[methodName]; - const spec = fn.isFunction(desc) ? desc(this) : desc; + const toExport = Object.keys(asyncMethods).reduce((publicMethods, methodName) => { + const desc = asyncMethods[methodName]; + const spec = fn.isFunction(desc) ? desc(this) : desc; - const validHandlers = ['success', 'error', 'loading']; - validHandlers.forEach((handler) => { - if (spec[handler] && !spec[handler].id) { - throw new Error(`${handler} handler must be an action function`); - } - }); + const validHandlers = ['success', 'error', 'loading']; + validHandlers.forEach((handler) => { + if (spec[handler] && !spec[handler].id) { + throw new Error(`${handler} handler must be an action function`); + } + }); publicMethods[methodName] = (...args) => { //eslint-disable-line - const state = this.getInstance().getState(); - const value = spec.local && spec.local(state, ...args); - const shouldFetch = spec.shouldFetch - ? spec.shouldFetch(state, ...args) - /*eslint-disable*/ + const state = this.getInstance().getState(); + const value = spec.local && spec.local(state, ...args); + const shouldFetch = spec.shouldFetch + ? spec.shouldFetch(state, ...args) + /*eslint-disable*/ : value == null /* eslint-enable */ - const intercept = spec.interceptResponse || ((x) => { return x; }); - const makeActionHandler = (action, isError) => { - return (x) => { - const fire = () => { - loadCounter -= 1; - action(intercept(x, action, args)); - if (isError) throw x; - return x; - }; - return this.alt.trapAsync ? () => { return fire(); } : fire(); - }; - }; - - // if we don't have it in cache then fetch it - if (shouldFetch) { - loadCounter += 1; - /* istanbul ignore else */ - if (spec.loading) spec.loading(intercept(null, spec.loading, args)); - return spec.remote(state, ...args).then( - makeActionHandler(spec.success), - makeActionHandler(spec.error, 1), - ); - } - - // otherwise emit the change now - this.emitChange(); - return value; + const intercept = spec.interceptResponse || ((x) => { return x; }); + const makeActionHandler = (action, isError) => { + return (x) => { + const fire = () => { + loadCounter -= 1; + action(intercept(x, action, args)); + if (isError) throw x; + return x; }; - - return publicMethods; - }, {}); - - this.exportPublicMethods(toExport); - this.exportPublicMethods({ - isLoading: () => { return loadCounter > 0; } - }); - }, - - exportPublicMethods(methods) { - fn.eachObject((methodName, value) => { - if (!fn.isFunction(value)) { - throw new TypeError('exportPublicMethods expects a function'); - } - - this.publicMethods[methodName] = value; - }, [methods]); - }, - - emitChange() { - this.getInstance().emitChange(); - }, - - on(lifecycleEvent, handler) { - if (lifecycleEvent === 'error') this.handlesOwnErrors = true; - const bus = this.lifecycleEvents[lifecycleEvent] || transmitter(); - this.lifecycleEvents[lifecycleEvent] = bus; - return bus.subscribe(handler.bind(this)); - }, - - bindAction(symbol, handler) { - if (!symbol) { - throw new ReferenceError('Invalid action reference passed in'); - } - if (!fn.isFunction(handler)) { - throw new TypeError('bindAction expects a function'); + return this.alt.trapAsync ? () => { return fire(); } : fire(); + }; + }; + + // if we don't have it in cache then fetch it + if (shouldFetch) { + loadCounter += 1; + /* istanbul ignore else */ + if (spec.loading) spec.loading(intercept(null, spec.loading, args)); + return spec.remote(state, ...args).then( + makeActionHandler(spec.success), + makeActionHandler(spec.error, 1), + ); } - // You can pass in the constant or the function itself - const key = symbol.id ? symbol.id : symbol; - this.actionListeners[key] = this.actionListeners[key] || []; - this.actionListeners[key].push(handler.bind(this)); - this.boundListeners.push(key); - }, - - bindActions(actions) { - fn.eachObject((action, symbol) => { - const matchFirstCharacter = /./; - const assumedEventHandler = action.replace(matchFirstCharacter, (x) => { return `on${x[0].toUpperCase()}`; }); - - if (this[action] && this[assumedEventHandler]) { - // If you have both action and onAction - throw new ReferenceError( - 'You have multiple action handlers bound to an action: ' + - `${action} and ${assumedEventHandler}`, - ); - } - - const handler = this[action] || this[assumedEventHandler]; - if (handler) { - this.bindAction(symbol, handler); - } - }, [actions]); - }, - - bindListeners(obj) { - fn.eachObject((methodName, symbol) => { - const listener = this[methodName]; - - if (!listener) { - throw new ReferenceError( - `${methodName} defined but does not exist in ${this.displayName}`, - ); - } - - if (Array.isArray(symbol)) { - symbol.forEach((action) => { - this.bindAction(action, listener); - }); - } else { - this.bindAction(symbol, listener); - } - }, [obj]); + // otherwise emit the change now + this.emitChange(); + return value; + }; + + return publicMethods; + }, {}); + + this.exportPublicMethods(toExport); + this.exportPublicMethods({ + isLoading: () => { return loadCounter > 0; } + }); + }, + + exportPublicMethods(methods) { + fn.eachObject((methodName, value) => { + if (!fn.isFunction(value)) { + throw new TypeError('exportPublicMethods expects a function'); + } + + this.publicMethods[methodName] = value; + }, [methods]); + }, + + emitChange() { + this.getInstance().emitChange(); + }, + + on(lifecycleEvent, handler) { + if (lifecycleEvent === 'error') this.handlesOwnErrors = true; + const bus = this.lifecycleEvents[lifecycleEvent] || transmitter(); + this.lifecycleEvents[lifecycleEvent] = bus; + return bus.subscribe(handler.bind(this)); + }, + + bindAction(symbol, handler) { + if (!symbol) { + throw new ReferenceError('Invalid action reference passed in'); + } + if (!fn.isFunction(handler)) { + throw new TypeError('bindAction expects a function'); } + + // You can pass in the constant or the function itself + const key = symbol.id ? symbol.id : symbol; + this.actionListeners[key] = this.actionListeners[key] || []; + this.actionListeners[key].push(handler.bind(this)); + this.boundListeners.push(key); + }, + + bindActions(actions) { + fn.eachObject((action, symbol) => { + const matchFirstCharacter = /./; + const assumedEventHandler = action.replace(matchFirstCharacter, (x) => { return `on${x[0].toUpperCase()}`; }); + + if (this[action] && this[assumedEventHandler]) { + // If you have both action and onAction + throw new ReferenceError( + 'You have multiple action handlers bound to an action: ' + + `${action} and ${assumedEventHandler}`, + ); + } + + const handler = this[action] || this[assumedEventHandler]; + if (handler) { + this.bindAction(symbol, handler); + } + }, [actions]); + }, + + bindListeners(obj) { + fn.eachObject((methodName, symbol) => { + const listener = this[methodName]; + + if (!listener) { + throw new ReferenceError( + `${methodName} defined but does not exist in ${this.displayName}`, + ); + } + + if (Array.isArray(symbol)) { + symbol.forEach((action) => { + this.bindAction(action, listener); + }); + } else { + this.bindAction(symbol, listener); + } + }, [obj]); + } }; export default StoreMixin; diff --git a/src/store/index.js b/src/store/index.js index 1ad0904c..27af8bab 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -4,157 +4,157 @@ import AltStore from './AltStore'; import StoreMixin from './StoreMixin'; function doSetState(store, storeInstance, state) { - if (!state) { - return; - } + if (!state) { + return; + } - const { config } = storeInstance.StoreModel; + const { config } = storeInstance.StoreModel; - const nextState = fn.isFunction(state) - ? state(storeInstance.state) - : state; + const nextState = fn.isFunction(state) + ? state(storeInstance.state) + : state; storeInstance.state = config.setState.call( //eslint-disable-line - store, - storeInstance.state, - nextState, - ); - - if (!store.alt.dispatcher.isDispatching()) { - store.emitChange(); - } + store, + storeInstance.state, + nextState, + ); + + if (!store.alt.dispatcher.isDispatching()) { + store.emitChange(); + } } function createPrototype(proto, alt, key, extras) { - return fn.assign(proto, StoreMixin, { - displayName: key, - alt, - dispatcher: alt.dispatcher, - preventDefault() { - this.getInstance().preventDefault = true; - }, - boundListeners: [], - lifecycleEvents: {}, - actionListeners: {}, - publicMethods: {}, - handlesOwnErrors: false - }, extras); + return fn.assign(proto, StoreMixin, { + displayName: key, + alt, + dispatcher: alt.dispatcher, + preventDefault() { + this.getInstance().preventDefault = true; + }, + boundListeners: [], + lifecycleEvents: {}, + actionListeners: {}, + publicMethods: {}, + handlesOwnErrors: false + }, extras); } export function createStoreConfig(globalConfig, StoreModel) { StoreModel.config = fn.assign({ //eslint-disable-line - getState(state) { - if (Array.isArray(state)) { - return state.slice(); - } else if (fn.isMutableObject(state)) { - return fn.assign({}, state); - } - return state; - }, - setState(currentState, nextState) { - if (fn.isMutableObject(nextState)) { - return fn.assign(currentState, nextState); - } - return nextState; - } - }, globalConfig, StoreModel.config); + getState(state) { + if (Array.isArray(state)) { + return state.slice(); + } else if (fn.isMutableObject(state)) { + return fn.assign({}, state); + } + return state; + }, + setState(currentState, nextState) { + if (fn.isMutableObject(nextState)) { + return fn.assign(currentState, nextState); + } + return nextState; + } + }, globalConfig, StoreModel.config); } export function transformStore(transforms, StoreModel) { - return transforms.reduce((Store, transform) => { return transform(Store); }, StoreModel); + return transforms.reduce((Store, transform) => { return transform(Store); }, StoreModel); } export function createStoreFromObject(alt, StoreModel, key) { - let storeInstance; - - const StoreProto = createPrototype({}, alt, key, fn.assign({ - getInstance() { - return storeInstance; - }, - setState(nextState) { - doSetState(this, storeInstance, nextState); - } - }, StoreModel)); - - // bind the store listeners - /* istanbul ignore else */ - if (StoreProto.bindListeners) { - StoreMixin.bindListeners.call( - StoreProto, - StoreProto.bindListeners, - ); - } - /* istanbul ignore else */ - if (StoreProto.observe) { - StoreMixin.bindListeners.call( - StoreProto, - StoreProto.observe(alt), - ); + let storeInstance; + + const StoreProto = createPrototype({}, alt, key, fn.assign({ + getInstance() { + return storeInstance; + }, + setState(nextState) { + doSetState(this, storeInstance, nextState); } + }, StoreModel)); - // bind the lifecycle events + // bind the store listeners /* istanbul ignore else */ - if (StoreProto.lifecycle) { - fn.eachObject((eventName, event) => { - StoreMixin.on.call(StoreProto, eventName, event); - }, [StoreProto.lifecycle]); - } - - // create the instance and fn.assign the public methods to the instance - storeInstance = fn.assign( - new AltStore( - alt, - StoreProto, - StoreProto.state !== undefined ? StoreProto.state : {}, - StoreModel, - ), - StoreProto.publicMethods, - { - displayName: key, - config: StoreModel.config - }, + if (StoreProto.bindListeners) { + StoreMixin.bindListeners.call( + StoreProto, + StoreProto.bindListeners, ); - - return storeInstance; + } + /* istanbul ignore else */ + if (StoreProto.observe) { + StoreMixin.bindListeners.call( + StoreProto, + StoreProto.observe(alt), + ); + } + + // bind the lifecycle events + /* istanbul ignore else */ + if (StoreProto.lifecycle) { + fn.eachObject((eventName, event) => { + StoreMixin.on.call(StoreProto, eventName, event); + }, [StoreProto.lifecycle]); + } + + // create the instance and fn.assign the public methods to the instance + storeInstance = fn.assign( + new AltStore( + alt, + StoreProto, + StoreProto.state !== undefined ? StoreProto.state : {}, + StoreModel, + ), + StoreProto.publicMethods, + { + displayName: key, + config: StoreModel.config + }, + ); + + return storeInstance; } export function createStoreFromClass(alt, StoreModel, key, ...argsForClass) { - let storeInstance; - const { config } = StoreModel; - - // Creating a class here so we don't overload the provided store's - // prototype with the mixin behaviour and I'm extending from StoreModel - // so we can inherit any extensions from the provided store. - class Store extends StoreModel {} - - createPrototype(Store.prototype, alt, key, { - type: 'AltStore', - getInstance() { - return storeInstance; - }, - setState(nextState) { - doSetState(this, storeInstance, nextState); - } - }); - - const store = new Store(...argsForClass); - - /* istanbul ignore next */ - if (config.bindListeners) store.bindListeners(config.bindListeners); - /* istanbul ignore next */ - if (config.datasource) store.registerAsync(config.datasource); - - storeInstance = fn.assign( - new AltStore( - alt, - store, - store.state !== undefined ? store.state : store, - StoreModel, - ), - utils.getInternalMethods(StoreModel), - config.publicMethods, - { displayName: key }, - ); - - return storeInstance; + let storeInstance; + const { config } = StoreModel; + + // Creating a class here so we don't overload the provided store's + // prototype with the mixin behaviour and I'm extending from StoreModel + // so we can inherit any extensions from the provided store. + class Store extends StoreModel {} + + createPrototype(Store.prototype, alt, key, { + type: 'AltStore', + getInstance() { + return storeInstance; + }, + setState(nextState) { + doSetState(this, storeInstance, nextState); + } + }); + + const store = new Store(...argsForClass); + + /* istanbul ignore next */ + if (config.bindListeners) store.bindListeners(config.bindListeners); + /* istanbul ignore next */ + if (config.datasource) store.registerAsync(config.datasource); + + storeInstance = fn.assign( + new AltStore( + alt, + store, + store.state !== undefined ? store.state : store, + StoreModel, + ), + utils.getInternalMethods(StoreModel), + config.publicMethods, + { displayName: key }, + ); + + return storeInstance; } diff --git a/src/utils/AltUtils.js b/src/utils/AltUtils.js index c9dec088..2b570a10 100644 --- a/src/utils/AltUtils.js +++ b/src/utils/AltUtils.js @@ -6,30 +6,30 @@ const builtInProto = Object.getOwnPropertyNames(NoopClass.prototype) /* eslint-enable */ export function getInternalMethods(Obj, isProto) { - const excluded = isProto ? builtInProto : builtIns; - const obj = isProto ? Obj.prototype : Obj; - return Object.getOwnPropertyNames(obj).reduce((value, m) => { - if (excluded.indexOf(m) !== -1) { - return value; - } + const excluded = isProto ? builtInProto : builtIns; + const obj = isProto ? Obj.prototype : Obj; + return Object.getOwnPropertyNames(obj).reduce((value, m) => { + if (excluded.indexOf(m) !== -1) { + return value; + } value[m] = obj[m]; //eslint-disable-line - return value; - }, {}); + return value; + }, {}); } export function getPrototypeChain(Obj, methods = {}) { - return Obj === Function.prototype - ? methods - : getPrototypeChain( - Object.getPrototypeOf(Obj), - fn.assign(getInternalMethods(Obj, true), methods), - ); + return Obj === Function.prototype + ? methods + : getPrototypeChain( + Object.getPrototypeOf(Obj), + fn.assign(getInternalMethods(Obj, true), methods), + ); } export function warn(msg) { - /* istanbul ignore else */ - /*eslint-disable*/ + /* istanbul ignore else */ + /*eslint-disable*/ if (typeof console !== 'undefined') { console.warn(new ReferenceError(msg)) } @@ -37,55 +37,55 @@ export function warn(msg) { } export function uid(container, name) { - let count = 0; - let key = name; - while (Object.hasOwnProperty.call(container, key)) { - count += 1; - key = name + String(count); - } - return key; + let count = 0; + let key = name; + while (Object.hasOwnProperty.call(container, key)) { + count += 1; + key = name + String(count); + } + return key; } export function formatAsConstant(name) { - return name.replace(/[a-z]([A-Z])/g, (i) => { return `${i[0]}_${i[1].toLowerCase()}`; }).toUpperCase(); + return name.replace(/[a-z]([A-Z])/g, (i) => { return `${i[0]}_${i[1].toLowerCase()}`; }).toUpperCase(); } export function dispatchIdentity(x, ...a) { - if (x === undefined) return null; - return a.length ? [x].concat(a) : x; + if (x === undefined) return null; + return a.length ? [x].concat(a) : x; } export function fsa(id, type, payload, details) { - return { - type, - payload, - meta: { - dispatchId: id, - ...details - }, - - id, - action: type, - data: payload, - details - }; + return { + type, + payload, + meta: { + dispatchId: id, + ...details + }, + + id, + action: type, + data: payload, + details + }; } export function dispatch(id, actionObj, payload, alt) { - const data = actionObj.dispatch(payload); - if (data === undefined) return null; + const data = actionObj.dispatch(payload); + if (data === undefined) return null; - const type = actionObj.id; - const namespace = type; - const name = type; - const details = { id: type, namespace, name }; + const type = actionObj.id; + const namespace = type; + const name = type; + const details = { id: type, namespace, name }; - const dispatchLater = (x) => { return alt.dispatch(type, x, details); }; + const dispatchLater = (x) => { return alt.dispatch(type, x, details); }; - if (fn.isFunction(data)) return data(dispatchLater, alt); + if (fn.isFunction(data)) return data(dispatchLater, alt); - // XXX standardize this - return alt.dispatcher.dispatch(fsa(id, type, data, details)); + // XXX standardize this + return alt.dispatcher.dispatch(fsa(id, type, data, details)); } /* istanbul ignore next */ diff --git a/src/utils/StateFunctions.js b/src/utils/StateFunctions.js index d1619b15..5064c347 100644 --- a/src/utils/StateFunctions.js +++ b/src/utils/StateFunctions.js @@ -1,53 +1,53 @@ import * as fn from '../functions'; export function setAppState(instance, data, onStore) { - const obj = instance.deserialize(data); - fn.eachObject((key, value) => { - const store = instance.stores[key]; - if (store) { - const { config } = store.StoreModel; - const state = store.state; - if (config.onDeserialize) obj[key] = config.onDeserialize(value) || value; - if (fn.isMutableObject(state)) { - fn.eachObject((k) => { return delete state[k]; }, [state]); - fn.assign(state, obj[key]); - } else { - store.state = obj[key]; - } - onStore(store, store.state); - } - }, [obj]); + const obj = instance.deserialize(data); + fn.eachObject((key, value) => { + const store = instance.stores[key]; + if (store) { + const { config } = store.StoreModel; + const state = store.state; + if (config.onDeserialize) obj[key] = config.onDeserialize(value) || value; + if (fn.isMutableObject(state)) { + fn.eachObject((k) => { return delete state[k]; }, [state]); + fn.assign(state, obj[key]); + } else { + store.state = obj[key]; + } + onStore(store, store.state); + } + }, [obj]); } export function snapshot(instance, storeNames = []) { - const stores = storeNames.length ? storeNames : Object.keys(instance.stores); - return stores.reduce((obj, storeHandle) => { - const storeName = storeHandle.displayName || storeHandle; - const store = instance.stores[storeName]; - const { config } = store.StoreModel; - store.lifecycle('snapshot'); - const customSnapshot = config.onSerialize && + const stores = storeNames.length ? storeNames : Object.keys(instance.stores); + return stores.reduce((obj, storeHandle) => { + const storeName = storeHandle.displayName || storeHandle; + const store = instance.stores[storeName]; + const { config } = store.StoreModel; + store.lifecycle('snapshot'); + const customSnapshot = config.onSerialize && config.onSerialize(store.state); obj[storeName] = customSnapshot || store.getState(); //eslint-disable-line - return obj; - }, {}); + return obj; + }, {}); } export function saveInitialSnapshot(instance, key) { - const state = instance.deserialize( - instance.serialize(instance.stores[key].state), - ); + const state = instance.deserialize( + instance.serialize(instance.stores[key].state), + ); instance._initSnapshot[key] = state; //eslint-disable-line instance._lastSnapshot[key] = state; //eslint-disable-line } export function filterSnapshots(instance, state, stores) { - return stores.reduce((obj, store) => { - const storeName = store.displayName || store; - if (!state[storeName]) { - throw new ReferenceError(`${storeName} is not a valid store`); - } + return stores.reduce((obj, store) => { + const storeName = store.displayName || store; + if (!state[storeName]) { + throw new ReferenceError(`${storeName} is not a valid store`); + } obj[storeName] = state[storeName]; //eslint-disable-line - return obj; - }, {}); + return obj; + }, {}); } diff --git a/test/actions-dump-test.js b/test/actions-dump-test.js index e6c6f8d4..dac5d391 100644 --- a/test/actions-dump-test.js +++ b/test/actions-dump-test.js @@ -14,32 +14,32 @@ alt.createActions(class FooActions { }); alt.createActions({ - displayName: 'Pojo', - one() { }, - two() { } + displayName: 'Pojo', + one() { }, + two() { } }); alt.createActions({ - one() { }, - two() { } + one() { }, + two() { } }); alt.createAction('test', () => { }); export default { - 'actions obj': function () { - assert.isObject(alt.actions, 'actions exist'); - assert.isFunction(alt.actions.global.test, 'test exists'); - assert(Object.keys(alt.actions.global).length === 10, 'global actions contain stuff from createAction and generateActions'); - assert(Object.keys(alt.actions.FooActions).length === 4, '2 actions namespaced on FooActions'); - assert.isObject(alt.actions.Pojo, 'pojo named action exists'); - assert(Object.keys(alt.actions.Pojo).length === 4, 'pojo has 2 actions associated with it'); + 'actions obj': function () { + assert.isObject(alt.actions, 'actions exist'); + assert.isFunction(alt.actions.global.test, 'test exists'); + assert(Object.keys(alt.actions.global).length === 10, 'global actions contain stuff from createAction and generateActions'); + assert(Object.keys(alt.actions.FooActions).length === 4, '2 actions namespaced on FooActions'); + assert.isObject(alt.actions.Pojo, 'pojo named action exists'); + assert(Object.keys(alt.actions.Pojo).length === 4, 'pojo has 2 actions associated with it'); - assert.isDefined(alt.actions.global.three, 'three action is defined in global'); + assert.isDefined(alt.actions.global.three, 'three action is defined in global'); - assert.isDefined(alt.actions.Unknown.one, 'one exists in Unknown'); - assert.isDefined(alt.actions.global.one1, 'one1 was created because of a name clash'); + assert.isDefined(alt.actions.Unknown.one, 'one exists in Unknown'); + assert.isDefined(alt.actions.global.one1, 'one1 was created because of a name clash'); - assert.isDefined(alt.actions.global.THREE, 'the constant exists too'); - } + assert.isDefined(alt.actions.global.THREE, 'the constant exists too'); + } }; diff --git a/test/alt-config-object.js b/test/alt-config-object.js index 94310f70..d2d38c6f 100644 --- a/test/alt-config-object.js +++ b/test/alt-config-object.js @@ -2,71 +2,71 @@ import { assert } from 'chai'; import Alt from '../dist/alt-with-runtime'; class MyActions { - constructor() { - this.generateActions('changeNumber'); - } + constructor() { + this.generateActions('changeNumber'); + } } class MyStore { - constructor() { - this.number = 2; - this.letter = 'a'; - } + constructor() { + this.number = 2; + this.letter = 'a'; + } - onChangeNumber() { - this.number *= 2; - } + onChangeNumber() { + this.number *= 2; + } } export default { - 'custom dispatcher can be specified in alt config': function () { - class CustomDispatcher { - waitFor() {} - register() {} - dispatch() {} - extraMethod() {} - } + 'custom dispatcher can be specified in alt config': function () { + class CustomDispatcher { + waitFor() {} + register() {} + dispatch() {} + extraMethod() {} + } - const alt = new Alt({ - dispatcher: new CustomDispatcher() - }); - const dispatcher = alt.dispatcher; + const alt = new Alt({ + dispatcher: new CustomDispatcher() + }); + const dispatcher = alt.dispatcher; - // uses custom dispatcher - assert.equal(typeof dispatcher.extraMethod, 'function'); - assert.equal(typeof dispatcher.dispatch, 'function'); - }, + // uses custom dispatcher + assert.equal(typeof dispatcher.extraMethod, 'function'); + assert.equal(typeof dispatcher.dispatch, 'function'); + }, - 'custom serialize/deserialize': function () { - const CustomSerialize = (data) => { - return Object.keys(data).reduce((obj, key) => { - obj[key] = { wrapper: data[key] }; - return obj; - }, {}); - }; - const CustomDeserialize = (data) => { - return Object.keys(data).reduce((obj, key) => { - obj[key] = data[key].wrapper; - return obj; - }, {}); - }; + 'custom serialize/deserialize': function () { + const CustomSerialize = (data) => { + return Object.keys(data).reduce((obj, key) => { + obj[key] = { wrapper: data[key] }; + return obj; + }, {}); + }; + const CustomDeserialize = (data) => { + return Object.keys(data).reduce((obj, key) => { + obj[key] = data[key].wrapper; + return obj; + }, {}); + }; - const alt = new Alt({ - serialize: CustomSerialize, - deserialize: CustomDeserialize - }); - alt.addStore('MyStore', MyStore); - alt.addActions('MyActions', MyActions); - const snapshot = alt.takeSnapshot(); - alt.getActions('MyActions').changeNumber(); - alt.rollback(); + const alt = new Alt({ + serialize: CustomSerialize, + deserialize: CustomDeserialize + }); + alt.addStore('MyStore', MyStore); + alt.addActions('MyActions', MyActions); + const snapshot = alt.takeSnapshot(); + alt.getActions('MyActions').changeNumber(); + alt.rollback(); - assert.deepEqual(snapshot, { MyStore: { wrapper: { number: 2, letter: 'a' } } }); - assert.deepEqual(alt.getStore('MyStore').getState(), { number: 2, letter: 'a' }); - }, + assert.deepEqual(snapshot, { MyStore: { wrapper: { number: 2, letter: 'a' } } }); + assert.deepEqual(alt.getStore('MyStore').getState(), { number: 2, letter: 'a' }); + }, - 'custom transforms': function () { - const alt = new Alt({ storeTransforms: [] }); - assert.isArray(alt.storeTransforms); - } + 'custom transforms': function () { + const alt = new Alt({ storeTransforms: [] }); + assert.isArray(alt.storeTransforms); + } }; diff --git a/test/async-action-test.js b/test/async-action-test.js index 26d1343a..cb1ea303 100644 --- a/test/async-action-test.js +++ b/test/async-action-test.js @@ -7,46 +7,46 @@ const alt = new Alt(); const actions = alt.createActions(class AsyncActions { static displayName = 'AsyncActions'; fetch() { - return Promise.resolve('foo'); + return Promise.resolve('foo'); } fetchAndDispatch() { - return (dispatch) => { - dispatch(); - return Promise.resolve('foo'); - }; + return (dispatch) => { + dispatch(); + return Promise.resolve('foo'); + }; } }); const store = alt.createStore(class FooStore { static displayName = 'FooStore'; constructor() { - this.dispatched = false; - this.bindActions(actions); + this.dispatched = false; + this.bindActions(actions); } onFetch() { - this.dispatched = true; + this.dispatched = true; } onFetchAndDispatch() { - this.dispatched = true; + this.dispatched = true; } }); export default { - 'async actions': { - afterEach() { - alt.recycle(store); - }, + 'async actions': { + afterEach() { + alt.recycle(store); + }, - 'are not dispatched automatically': function () { - actions.fetch(); - assert(store.state.dispatched === false, 'async action is not automatically dispatched'); - }, + 'are not dispatched automatically': function () { + actions.fetch(); + assert(store.state.dispatched === false, 'async action is not automatically dispatched'); + }, - 'return the result of inner function invocation': function () { - const promise = actions.fetchAndDispatch(); - assert(isPromise(promise), 'async action does not return the result of inner function invocation'); - assert(store.state.dispatched === true, 'async action is dispatched when the dispatch is invoked manually'); - } + 'return the result of inner function invocation': function () { + const promise = actions.fetchAndDispatch(); + assert(isPromise(promise), 'async action does not return the result of inner function invocation'); + assert(store.state.dispatched === true, 'async action is dispatched when the dispatch is invoked manually'); } + } }; diff --git a/test/async-test.js b/test/async-test.js index 91f79072..f9224e2e 100644 --- a/test/async-test.js +++ b/test/async-test.js @@ -6,302 +6,302 @@ import Alt from '../'; const alt = new Alt(); const StargazerActions = alt.generateActions( - 'fetchingUsers', - 'usersReceived', - 'failed', + 'fetchingUsers', + 'usersReceived', + 'failed', ); const fauxjax = sinon.stub().returns(Promise.resolve([1, 2, 3, 4])); const failjax = sinon.stub().returns(Promise.reject(new Error('things broke'))); const api = { - remote(state) { }, - local(state) { } + remote(state) { }, + local(state) { } }; const remote = sinon.stub(api, 'remote', (state, repo = state.repo) => { - const url = `https://api.github.com/repos/${state.user}/${repo}/stargazers`; - return repo === 'alts' ? failjax(url) : fauxjax(url); + const url = `https://api.github.com/repos/${state.user}/${repo}/stargazers`; + return repo === 'alts' ? failjax(url) : fauxjax(url); }); const local = sinon.stub(api, 'local', (state) => { - return state.users.length ? state.users : null; + return state.users.length ? state.users : null; }); const StargazerSource = { - fetchUsers() { - return { - remote, - local, - loading: StargazerActions.fetchingUsers, - success: StargazerActions.usersReceived, - error: StargazerActions.failed - }; + fetchUsers() { + return { + remote, + local, + loading: StargazerActions.fetchingUsers, + success: StargazerActions.usersReceived, + error: StargazerActions.failed + }; + }, + + alwaysFetchUsers: { + remote, + local: () => { return true; }, + loading: StargazerActions.fetchingUsers, + success: StargazerActions.usersReceived, + error: StargazerActions.failed, + shouldFetch: () => { return true; } + }, + + neverFetchUsers: { + remote, + local: () => { return false; }, + loading: StargazerActions.fetchingUsers, + success: StargazerActions.usersReceived, + error: StargazerActions.failed, + shouldFetch: () => { return false; } + }, + + fetchRepos: { + remote() { + return Promise.resolve('batman'); }, - - alwaysFetchUsers: { - remote, - local: () => { return true; }, - loading: StargazerActions.fetchingUsers, - success: StargazerActions.usersReceived, - error: StargazerActions.failed, - shouldFetch: () => { return true; } - }, - - neverFetchUsers: { - remote, - local: () => { return false; }, - loading: StargazerActions.fetchingUsers, - success: StargazerActions.usersReceived, - error: StargazerActions.failed, - shouldFetch: () => { return false; } + interceptResponse(x, action, args) { + assert(x === 'batman'); + assert(action === StargazerActions.usersReceived); + assert(Array.isArray(args)); + return 'TESTTEST'; }, - - fetchRepos: { - remote() { - return Promise.resolve('batman'); - }, - interceptResponse(x, action, args) { - assert(x === 'batman'); - assert(action === StargazerActions.usersReceived); - assert(Array.isArray(args)); - return 'TESTTEST'; - }, - success: StargazerActions.usersReceived, - error: StargazerActions.failed - } + success: StargazerActions.usersReceived, + error: StargazerActions.failed + } }; const StargazerStore = alt.createStore(class { static config = { - stateKey: 'state' + stateKey: 'state' }; constructor() { - this.state = { - user: 'goatslacker', - repo: 'alt', - users: [], - errorMessage: null, - isLoading: false - }; - - this.registerAsync(StargazerSource); - - this.bindListeners({ - loading: StargazerActions.fetchingUsers, - receivedUsers: StargazerActions.usersReceived, - failed: StargazerActions.failed - }); + this.state = { + user: 'goatslacker', + repo: 'alt', + users: [], + errorMessage: null, + isLoading: false + }; + + this.registerAsync(StargazerSource); + + this.bindListeners({ + loading: StargazerActions.fetchingUsers, + receivedUsers: StargazerActions.usersReceived, + failed: StargazerActions.failed + }); } loading() { - this.setState({ isLoading: true }); + this.setState({ isLoading: true }); } failed(e) { - this.setState({ errorMessage: e.statusText || String(e) }); + this.setState({ errorMessage: e.statusText || String(e) }); } receivedUsers(users) { - this.setState({ users, errorMessage: null }); + this.setState({ users, errorMessage: null }); } }); export default { - async: { - beforeEach() { - global.window = {}; - - alt.recycle(); - local.reset(); - remote.reset(); - }, - - afterEach() { - delete global.window; - }, - - 'methods are available': function () { - assert.isFunction(StargazerStore.fetchUsers); - assert.isFunction(StargazerStore.isLoading); - }, - - 'data source with no action': function () { - assert.throws(() => { - alt.createStore(class { - constructor() { - this.registerAsync({ - derp() { return { success: () => { return null; } }; } - }); - } - }); - }, Error, /handler must be an action function/); - }, - - 'loading state': function (done) { - const spy = sinon.spy(); - const begin = StargazerStore.listen(spy); - - const test = StargazerStore.listen((state) => { - assert.isArray(state.users, 'we have an array'); - - if (spy.callCount === 1) { - assert(state.isLoading === true, 'the loading action was called'); - assert.ok(StargazerStore.isLoading(), 'and the loading function returns true'); - assert(state.users.length === 0, 'empty array'); - } else if (spy.callCount === 2) { - assert.notOk(StargazerStore.isLoading(), 'and the loading function returns false'); - assert(state.users.length === 4, 'there are 4 elements present'); - } - }); + async: { + beforeEach() { + global.window = {}; - const end = StargazerStore.listen((state) => { - if (spy.callCount === 2) { - begin(); - test(); - end(); + alt.recycle(); + local.reset(); + remote.reset(); + }, - assert.ok(local.calledOnce); - assert.ok(remote.calledOnce); - done(); - } - }); + afterEach() { + delete global.window; + }, - StargazerStore.fetchUsers(); - assert.ok(StargazerStore.isLoading()); - }, - - 'data available already': function (done) { - StargazerActions.usersReceived([1, 2, 3]); - - const spy = sinon.spy(); - const count = StargazerStore.listen(spy); - - const test = StargazerStore.listen((state) => { - if (spy.callCount === 1) { - assert(state.users.length === 3); - count(); - test(); - assert.ok(local.calledOnce); - assert.notOk(StargazerStore.isLoading()); - assert(remote.callCount === 0); - done(); - } - }); + 'methods are available': function () { + assert.isFunction(StargazerStore.fetchUsers); + assert.isFunction(StargazerStore.isLoading); + }, - StargazerStore.fetchUsers(); - assert.notOk(StargazerStore.isLoading()); - }, - - errors(done) { - const spy = sinon.spy(); - const count = StargazerStore.listen(spy); - - const test = StargazerStore.listen((state) => { - if (spy.callCount === 1) { - assert(state.users.length === 0); - } else if (spy.callCount === 2) { - assert.match(state.errorMessage, /things broke/); - count(); - test(); - assert.notOk(StargazerStore.isLoading()); - assert.ok(local.calledOnce); - assert.ok(remote.calledOnce); - done(); - } + 'data source with no action': function () { + assert.throws(() => { + alt.createStore(class { + constructor() { + this.registerAsync({ + derp() { return { success: () => { return null; } }; } }); + } + }); + }, Error, /handler must be an action function/); + }, - StargazerStore.fetchUsers('alts'); - assert.ok(StargazerStore.isLoading()); - }, - - 'shouldFetch is true': function () { - StargazerStore.alwaysFetchUsers(); - assert.ok(StargazerStore.isLoading(), 'i am loading'); - assert.ok(remote.calledOnce, 'remote was called once'); - }, - - 'shouldFetch is false': function () { - StargazerStore.neverFetchUsers(); - assert.notOk(StargazerStore.isLoading(), 'loading now'); - assert(remote.callCount === 0, 'remote was not called'); - }, - - 'multiple loads': function (done) { - const unsub = StargazerStore.listen((state) => { - if (state.users === 'TESTTEST') { - assert.notOk(StargazerStore.isLoading()); - unsub(); - done(); - } else { - assert.ok(StargazerStore.isLoading()); - } - }); + 'loading state': function (done) { + const spy = sinon.spy(); + const begin = StargazerStore.listen(spy); - StargazerStore.fetchUsers(); - StargazerStore.fetchRepos(); - assert.ok(StargazerStore.isLoading()); - }, + const test = StargazerStore.listen((state) => { + assert.isArray(state.users, 'we have an array'); + + if (spy.callCount === 1) { + assert(state.isLoading === true, 'the loading action was called'); + assert.ok(StargazerStore.isLoading(), 'and the loading function returns true'); + assert(state.users.length === 0, 'empty array'); + } else if (spy.callCount === 2) { + assert.notOk(StargazerStore.isLoading(), 'and the loading function returns false'); + assert(state.users.length === 4, 'there are 4 elements present'); + } + }); - 'as a function': function () { - const FauxSource = sinon.stub().returns({}); + const end = StargazerStore.listen((state) => { + if (spy.callCount === 2) { + begin(); + test(); + end(); - class FauxStore { + assert.ok(local.calledOnce); + assert.ok(remote.calledOnce); + done(); + } + }); + + StargazerStore.fetchUsers(); + assert.ok(StargazerStore.isLoading()); + }, + + 'data available already': function (done) { + StargazerActions.usersReceived([1, 2, 3]); + + const spy = sinon.spy(); + const count = StargazerStore.listen(spy); + + const test = StargazerStore.listen((state) => { + if (spy.callCount === 1) { + assert(state.users.length === 3); + count(); + test(); + assert.ok(local.calledOnce); + assert.notOk(StargazerStore.isLoading()); + assert(remote.callCount === 0); + done(); + } + }); + + StargazerStore.fetchUsers(); + assert.notOk(StargazerStore.isLoading()); + }, + + errors(done) { + const spy = sinon.spy(); + const count = StargazerStore.listen(spy); + + const test = StargazerStore.listen((state) => { + if (spy.callCount === 1) { + assert(state.users.length === 0); + } else if (spy.callCount === 2) { + assert.match(state.errorMessage, /things broke/); + count(); + test(); + assert.notOk(StargazerStore.isLoading()); + assert.ok(local.calledOnce); + assert.ok(remote.calledOnce); + done(); + } + }); + + StargazerStore.fetchUsers('alts'); + assert.ok(StargazerStore.isLoading()); + }, + + 'shouldFetch is true': function () { + StargazerStore.alwaysFetchUsers(); + assert.ok(StargazerStore.isLoading(), 'i am loading'); + assert.ok(remote.calledOnce, 'remote was called once'); + }, + + 'shouldFetch is false': function () { + StargazerStore.neverFetchUsers(); + assert.notOk(StargazerStore.isLoading(), 'loading now'); + assert(remote.callCount === 0, 'remote was not called'); + }, + + 'multiple loads': function (done) { + const unsub = StargazerStore.listen((state) => { + if (state.users === 'TESTTEST') { + assert.notOk(StargazerStore.isLoading()); + unsub(); + done(); + } else { + assert.ok(StargazerStore.isLoading()); + } + }); + + StargazerStore.fetchUsers(); + StargazerStore.fetchRepos(); + assert.ok(StargazerStore.isLoading()); + }, + + 'as a function': function () { + const FauxSource = sinon.stub().returns({}); + + class FauxStore { static displayName = 'FauxStore'; constructor() { - this.exportAsync(FauxSource); + this.exportAsync(FauxSource); } - } + } - const store = alt.createStore(FauxStore); + const store = alt.createStore(FauxStore); - assert(FauxSource.firstCall.args[0] === alt); - assert.isFunction(store.isLoading); - }, + assert(FauxSource.firstCall.args[0] === alt); + assert.isFunction(store.isLoading); + }, - 'server rendering does not happen unless you lock alt': function (done) { - delete global.window; + 'server rendering does not happen unless you lock alt': function (done) { + delete global.window; - const actions = alt.generateActions('test'); - alt.trapAsync = true; + const actions = alt.generateActions('test'); + alt.trapAsync = true; - const PojoSource = { - justTesting: { - remote() { - return Promise.resolve(true); - }, - success: actions.test, - error: actions.test - } - }; + const PojoSource = { + justTesting: { + remote() { + return Promise.resolve(true); + }, + success: actions.test, + error: actions.test + } + }; - class MyStore { + class MyStore { static displayName = 'ServerRenderingStore'; constructor() { - this.registerAsync(PojoSource); + this.registerAsync(PojoSource); } - } + } - const spy = sinon.spy(); + const spy = sinon.spy(); - const dispatchToken = alt.dispatcher.register(spy); + const dispatchToken = alt.dispatcher.register(spy); - const store = alt.createStore(MyStore); + const store = alt.createStore(MyStore); - store.justTesting().then((value) => { - assert.isFunction(value); - assert(spy.callCount === 0, 'the dispatcher was never called'); + store.justTesting().then((value) => { + assert.isFunction(value); + assert(spy.callCount === 0, 'the dispatcher was never called'); - value(); + value(); - assert.ok(spy.calledOnce, 'the dispatcher was flushed'); + assert.ok(spy.calledOnce, 'the dispatcher was flushed'); - alt.dispatcher.unregister(dispatchToken); - alt.trapAsync = false; - done(); - }); - } + alt.dispatcher.unregister(dispatchToken); + alt.trapAsync = false; + done(); + }); } + } }; diff --git a/test/batching-test.js b/test/batching-test.js index 5cf94047..24690631 100644 --- a/test/batching-test.js +++ b/test/batching-test.js @@ -7,113 +7,113 @@ import ReactDom from 'react-dom'; import Alt from '../'; const Actions = { - buttonClick() { - setTimeout(() => { - this.switchComponent(); - }, 10); - return null; - }, - - switchComponent() { - return null; - }, - - uhoh() { - return null; - } + buttonClick() { + setTimeout(() => { + this.switchComponent(); + }, 10); + return null; + }, + + switchComponent() { + return null; + }, + + uhoh() { + return null; + } }; function Store(actions) { - this.active = false; + this.active = false; - this.bindAction(actions.switchComponent, () => { - this.active = true; - }); + this.bindAction(actions.switchComponent, () => { + this.active = true; + }); } class ComponentA extends React.Component { static propTypes = { - alt: PropTypes.object.isRequired, - callback: PropTypes.func.isRequired + alt: PropTypes.object.isRequired, + callback: PropTypes.func.isRequired }; constructor(props) { - super(props); - this.state = props.alt.stores.store.getState(); + super(props); + this.state = props.alt.stores.store.getState(); } componentWillMount() { - this.props.alt.stores.store.listen((state) => { return this.setState(state); }); + this.props.alt.stores.store.listen((state) => { return this.setState(state); }); } render() { - if (this.state.active) { - return ; - } - return
; + if (this.state.active) { + return ; + } + return
; } } class ComponentB extends React.Component { //eslint-disable-line static propTypes = { - alt: PropTypes.object.isRequired, - callback: PropTypes.func.isRequired + alt: PropTypes.object.isRequired, + callback: PropTypes.func.isRequired }; componentWillMount() { - let error = null; - try { - this.props.alt.actions.actions.uhoh(); - } catch (err) { - error = err; - } finally { - this.props.callback(error); - } + let error = null; + try { + this.props.alt.actions.actions.uhoh(); + } catch (err) { + error = err; + } finally { + this.props.callback(error); + } } render() { - return
; + return
; } } export default { - 'Batching dispatcher': { - beforeEach() { - global.document = jsdom(''); - global.window = global.document.defaultView; - }, - - afterEach() { - delete global.document; - delete global.window; - }, - - 'does not batch': function (done) { - const alt = new Alt(); - alt.addActions('actions', Actions); - alt.addStore('store', Store, alt.actions.actions); - - function test(err) { - assert.match(err, /dispatch in the middle of a dispatch/); - done(); - } - - TestUtils.renderIntoDocument(); - alt.actions.actions.buttonClick(); - }, - - 'allows batching': function (done) { - const alt = new Alt({ batchingFunction: ReactDom.unstable_batchedUpdates }); - alt.addActions('actions', Actions); - alt.addStore('store', Store, alt.actions.actions); - - function test(err) { - assert.isNull(err); - done(); - } - - TestUtils.renderIntoDocument(); - alt.actions.actions.buttonClick(); - } + 'Batching dispatcher': { + beforeEach() { + global.document = jsdom(''); + global.window = global.document.defaultView; + }, + + afterEach() { + delete global.document; + delete global.window; + }, + + 'does not batch': function (done) { + const alt = new Alt(); + alt.addActions('actions', Actions); + alt.addStore('store', Store, alt.actions.actions); + + function test(err) { + assert.match(err, /dispatch in the middle of a dispatch/); + done(); + } + + TestUtils.renderIntoDocument(); + alt.actions.actions.buttonClick(); + }, + + 'allows batching': function (done) { + const alt = new Alt({ batchingFunction: ReactDom.unstable_batchedUpdates }); + alt.addActions('actions', Actions); + alt.addStore('store', Store, alt.actions.actions); + + function test(err) { + assert.isNull(err); + done(); + } + + TestUtils.renderIntoDocument(); + alt.actions.actions.buttonClick(); } + } }; diff --git a/test/before-and-after-test.js b/test/before-and-after-test.js index f7a197bd..5d33041f 100644 --- a/test/before-and-after-test.js +++ b/test/before-and-after-test.js @@ -9,81 +9,81 @@ const beforeEach = sinon.spy(); const afterEach = sinon.spy(); alt.createStore({ - displayName: 'Store', + displayName: 'Store', - state: { a: 1 }, + state: { a: 1 }, - bindListeners: { - change: action.fire - }, + bindListeners: { + change: action.fire + }, - lifecycle: { - beforeEach, - afterEach - }, + lifecycle: { + beforeEach, + afterEach + }, - change(x) { - this.setState({ a: x }); - } + change(x) { + this.setState({ a: x }); + } }); export default { - 'Before and After hooks': { - beforeEach() { - alt.recycle(); - }, + 'Before and After hooks': { + beforeEach() { + alt.recycle(); + }, - 'before and after hook fire once': function () { - action.fire(2); + 'before and after hook fire once': function () { + action.fire(2); - assert.ok(beforeEach.calledOnce); - assert.ok(afterEach.calledOnce); - }, + assert.ok(beforeEach.calledOnce); + assert.ok(afterEach.calledOnce); + }, - 'before is called before after': function () { - action.fire(2); + 'before is called before after': function () { + action.fire(2); - assert.ok(beforeEach.calledBefore(afterEach)); - assert.ok(afterEach.calledAfter(beforeEach)); - }, + assert.ok(beforeEach.calledBefore(afterEach)); + assert.ok(afterEach.calledAfter(beforeEach)); + }, - 'args passed in': function () { - action.fire(2); + 'args passed in': function () { + action.fire(2); - assert.ok(beforeEach.args[0].length === 1, '1 arg is passed'); - assert.ok(afterEach.args[0].length === 1, '1 arg is passed'); + assert.ok(beforeEach.args[0].length === 1, '1 arg is passed'); + assert.ok(afterEach.args[0].length === 1, '1 arg is passed'); - assert.ok(beforeEach.args[0][0].payload.data === 2, 'before has payload'); - assert.ok(afterEach.args[0][0].payload.data === 2, 'after has payload'); - }, + assert.ok(beforeEach.args[0][0].payload.data === 2, 'before has payload'); + assert.ok(afterEach.args[0][0].payload.data === 2, 'after has payload'); + }, + + 'before and after get state': function () { + let beforeValue = null; + let afterValue = null; - 'before and after get state': function () { - let beforeValue = null; - let afterValue = null; - - alt.createStore({ - displayName: 'SpecialStore', - state: { a: 1 }, - bindListeners: { - change: action.fire - }, - lifecycle: { - beforeEach({ state }) { - beforeValue = state.a; - }, - afterEach({ state }) { - afterValue = state.a; - } - }, - change(x) { - this.setState({ a: x }); - } - }); - - action.fire(2); - - assert.ok(beforeValue === 1, 'before has current state'); - assert.ok(afterValue === 2, 'after has next state'); + alt.createStore({ + displayName: 'SpecialStore', + state: { a: 1 }, + bindListeners: { + change: action.fire + }, + lifecycle: { + beforeEach({ state }) { + beforeValue = state.a; + }, + afterEach({ state }) { + afterValue = state.a; + } + }, + change(x) { + this.setState({ a: x }); } + }); + + action.fire(2); + + assert.ok(beforeValue === 1, 'before has current state'); + assert.ok(afterValue === 2, 'after has next state'); } + } }; diff --git a/test/bound-listeners-test.js b/test/bound-listeners-test.js index 5247de97..c507a23d 100644 --- a/test/bound-listeners-test.js +++ b/test/bound-listeners-test.js @@ -6,87 +6,87 @@ const alt = new Alt(); const Actions = alt.generateActions('one', 'two', 'three'); class NoActions { - constructor() { - this.bindActions(Actions); - } + constructor() { + this.bindActions(Actions); + } - foo() { } - bar() { } + foo() { } + bar() { } } class OneAction { - constructor() { - this.bindAction(Actions.ONE, this.one); - } + constructor() { + this.bindAction(Actions.ONE, this.one); + } - one() { } + one() { } } class TwoAction { - constructor() { - this.bindListeners({ - two: Actions.TWO - }); - } + constructor() { + this.bindListeners({ + two: Actions.TWO + }); + } - two() { } + two() { } } class BindActions { - constructor() { - this.bindActions(Actions); - } + constructor() { + this.bindActions(Actions); + } - one() { } - two() { } + one() { } + two() { } } export default { - 'Exporting listener names': { - 'when no actions are listened on': function () { - const myStore = alt.createStore(NoActions); - assert(myStore.boundListeners.length === 0, 'none are returned'); - }, - - 'when using bindAction': function () { - const myStore = alt.createStore(OneAction); - assert(myStore.boundListeners.length === 1); - assert(myStore.boundListeners[0] === Actions.ONE); - }, - - 'when using bindListeners': function () { - const myStore = alt.createStore(TwoAction); - assert(myStore.boundListeners.length === 1); - assert(myStore.boundListeners[0] === Actions.TWO); - }, - - 'when using bindActions': function () { - const myStore = alt.createStore(BindActions); - assert(myStore.boundListeners.length === 2); - assert( - myStore.boundListeners.indexOf(Actions.ONE) > -1 && + 'Exporting listener names': { + 'when no actions are listened on': function () { + const myStore = alt.createStore(NoActions); + assert(myStore.boundListeners.length === 0, 'none are returned'); + }, + + 'when using bindAction': function () { + const myStore = alt.createStore(OneAction); + assert(myStore.boundListeners.length === 1); + assert(myStore.boundListeners[0] === Actions.ONE); + }, + + 'when using bindListeners': function () { + const myStore = alt.createStore(TwoAction); + assert(myStore.boundListeners.length === 1); + assert(myStore.boundListeners[0] === Actions.TWO); + }, + + 'when using bindActions': function () { + const myStore = alt.createStore(BindActions); + assert(myStore.boundListeners.length === 2); + assert( + myStore.boundListeners.indexOf(Actions.ONE) > -1 && myStore.boundListeners.indexOf(Actions.TWO) > -1 - ); - }, - - 'dispatching actions': function () { - const newAlt = new Alt(); - - const one = newAlt.generateActions('one'); - const two = newAlt.generateActions('one'); - - newAlt.createStore(function Store() { - this.bindAction(one.one, (x) => { - assert(x === 1); - }); - this.bindAction(two.one, (x) => { - assert(x === 2); - }); - }); - - newAlt.dispatch('global.one', 1); - newAlt.dispatch('global.one1', 2); - } + ); + }, + + 'dispatching actions': function () { + const newAlt = new Alt(); + + const one = newAlt.generateActions('one'); + const two = newAlt.generateActions('one'); + + newAlt.createStore(function Store() { + this.bindAction(one.one, (x) => { + assert(x === 1); + }); + this.bindAction(two.one, (x) => { + assert(x === 2); + }); + }); + + newAlt.dispatch('global.one', 1); + newAlt.dispatch('global.one1', 2); } + } }; diff --git a/test/config-set-get-state-test.js b/test/config-set-get-state-test.js index 61df44f3..485ba7cb 100644 --- a/test/config-set-get-state-test.js +++ b/test/config-set-get-state-test.js @@ -3,53 +3,53 @@ import sinon from 'sinon'; import Alt from '../'; export default { - 'Config state getter and setter': { - 'setting state': function () { - const setState = sinon.stub().returns({ - foo: 'bar' - }); - - const alt = new Alt({ setState }); - - const action = alt.generateActions('fire'); - - const store = alt.createStore({ - displayName: 'store', - bindListeners: { - fire: action.fire - }, - state: { x: 1 }, - fire() { - this.setState({ x: 2 }); - } - }); - - assert(store.getState().x === 1); - - action.fire(); - - assert.ok(setState.calledOnce); - assert(setState.args[0].length === 2); - assert(store.getState().foo === 'bar'); + 'Config state getter and setter': { + 'setting state': function () { + const setState = sinon.stub().returns({ + foo: 'bar' + }); + + const alt = new Alt({ setState }); + + const action = alt.generateActions('fire'); + + const store = alt.createStore({ + displayName: 'store', + bindListeners: { + fire: action.fire }, + state: { x: 1 }, + fire() { + this.setState({ x: 2 }); + } + }); - 'getting state': function () { - const getState = sinon.stub().returns({ - foo: 'bar' - }); + assert(store.getState().x === 1); - const alt = new Alt({ getState }); + action.fire(); - const store = alt.createStore({ - displayName: 'store', - state: { x: 1 } - }); + assert.ok(setState.calledOnce); + assert(setState.args[0].length === 2); + assert(store.getState().foo === 'bar'); + }, - assert.isUndefined(store.getState().x); + 'getting state': function () { + const getState = sinon.stub().returns({ + foo: 'bar' + }); - assert.ok(getState.calledOnce); - assert(getState.args[0].length === 1); - assert(store.getState().foo === 'bar'); - } + const alt = new Alt({ getState }); + + const store = alt.createStore({ + displayName: 'store', + state: { x: 1 } + }); + + assert.isUndefined(store.getState().x); + + assert.ok(getState.calledOnce); + assert(getState.args[0].length === 1); + assert(store.getState().foo === 'bar'); } + } }; diff --git a/test/debug-alt-test.js b/test/debug-alt-test.js index 175406f5..7d7d3d5d 100644 --- a/test/debug-alt-test.js +++ b/test/debug-alt-test.js @@ -2,30 +2,30 @@ import { assert } from 'chai'; import Alt from '../'; export default { - 'debug mode': { - beforeEach() { - global.window = {}; - }, - - 'enable debug mode': function () { - const alt = new Alt(); - Alt.debug('an identifier', alt); + 'debug mode': { + beforeEach() { + global.window = {}; + }, - assert.isArray(global.window['alt.js.org']); - assert(global.window['alt.js.org'].length === 1); - assert.isString(global.window['alt.js.org'][0].name); - assert(global.window['alt.js.org'][0].alt === alt); - }, + 'enable debug mode': function () { + const alt = new Alt(); + Alt.debug('an identifier', alt); - afterEach() { - delete global.window; - } + assert.isArray(global.window['alt.js.org']); + assert(global.window['alt.js.org'].length === 1); + assert.isString(global.window['alt.js.org'][0].name); + assert(global.window['alt.js.org'][0].alt === alt); }, - 'isomorphic debug mode': { - 'enable debug mode does not make things explode': function () { - const alt = new Alt(); - Alt.debug(alt); - } + afterEach() { + delete global.window; + } + }, + + 'isomorphic debug mode': { + 'enable debug mode does not make things explode': function () { + const alt = new Alt(); + Alt.debug(alt); } + } }; diff --git a/test/es3-module-pattern.js b/test/es3-module-pattern.js index 2424b7ed..cc5edc70 100644 --- a/test/es3-module-pattern.js +++ b/test/es3-module-pattern.js @@ -9,138 +9,138 @@ const actions = alt.generateActions('fire'); function MyStore() { const privateVariable = true; //eslint-disable-line - return { - displayName: 'MyStore', + return { + displayName: 'MyStore', - state: { - data: 1 - }, + state: { + data: 1 + }, - publicMethods: { - getData() { - return this.getState().data; - } - }, + publicMethods: { + getData() { + return this.getState().data; + } + }, - testProperty: 4, + testProperty: 4, - bindListeners: { - handleFire: actions.FIRE - }, + bindListeners: { + handleFire: actions.FIRE + }, - handleFire(data) { - this.setState({ data }); - } - }; + handleFire(data) { + this.setState({ data }); + } + }; } const myStore = alt.createStore(MyStore()); export default { - 'Creating store using ES3 module pattern': { - beforeEach() { - alt.recycle(); - console.warn = function () { }; - }, - - 'store method exists': function () { - const storePrototype = Object.getPrototypeOf(myStore); - const assertMethods = ['constructor', 'listen', 'unlisten', 'getState']; - assert.deepEqual(Object.getOwnPropertyNames(storePrototype), assertMethods, 'methods exist for store'); - assert.isUndefined(myStore.addListener, 'event emitter methods not present'); - assert.isUndefined(myStore.removeListener, 'event emitter methods not present'); - assert.isUndefined(myStore.emit, 'event emitter methods not present'); - }, - - 'public methods available': function () { - assert.isFunction(myStore.getData, 'public methods are available'); - assert(myStore.getData() === 1, 'initial store data is set'); - }, - - 'private and instance variables are not available': function () { - assert.isUndefined(myStore.privateVariable, 'encapsulated variables are not available'); - assert.isUndefined(myStore.testProperty, 'instance variables are not available'); - }, - - 'firing an action': function () { - actions.fire(2); - - assert(myStore.getState().data === 2, 'action was fired and handled correctly'); - }, - - 'adding lifecycle events': function () { - const spy = sinon.spy(); + 'Creating store using ES3 module pattern': { + beforeEach() { + alt.recycle(); + console.warn = function () { }; + }, + + 'store method exists': function () { + const storePrototype = Object.getPrototypeOf(myStore); + const assertMethods = ['constructor', 'listen', 'unlisten', 'getState']; + assert.deepEqual(Object.getOwnPropertyNames(storePrototype), assertMethods, 'methods exist for store'); + assert.isUndefined(myStore.addListener, 'event emitter methods not present'); + assert.isUndefined(myStore.removeListener, 'event emitter methods not present'); + assert.isUndefined(myStore.emit, 'event emitter methods not present'); + }, + + 'public methods available': function () { + assert.isFunction(myStore.getData, 'public methods are available'); + assert(myStore.getData() === 1, 'initial store data is set'); + }, + + 'private and instance variables are not available': function () { + assert.isUndefined(myStore.privateVariable, 'encapsulated variables are not available'); + assert.isUndefined(myStore.testProperty, 'instance variables are not available'); + }, + + 'firing an action': function () { + actions.fire(2); + + assert(myStore.getState().data === 2, 'action was fired and handled correctly'); + }, + + 'adding lifecycle events': function () { + const spy = sinon.spy(); + + class TestStore { + constructor() { + this.lifecycle = { init: spy }; + + this.state = { + foo: 'bar' + }; + } + } - class TestStore { - constructor() { - this.lifecycle = { init: spy }; + const store = alt.createStore(new TestStore()); - this.state = { - foo: 'bar' - }; - } - } + assert.ok(spy.calledOnce, 'lifecycle event was called'); + assert(store.getState().foo === 'bar', 'state is set'); + }, - const store = alt.createStore(new TestStore()); + 'set state': function () { + const TestStore = { + state: { hello: null }, - assert.ok(spy.calledOnce, 'lifecycle event was called'); - assert(store.getState().foo === 'bar', 'state is set'); + bindListeners: { + handleFire: actions.FIRE }, - 'set state': function () { - const TestStore = { - state: { hello: null }, - - bindListeners: { - handleFire: actions.FIRE - }, + handleFire(data) { + this.setState({ + hello: data + }); - handleFire(data) { - this.setState({ - hello: data - }); + this.setState(); + } + }; - this.setState(); - } - }; + const store = alt.createStore(TestStore); + assert.isNull(store.getState().hello, 'store state property has not been set yet'); - const store = alt.createStore(TestStore); - assert.isNull(store.getState().hello, 'store state property has not been set yet'); + actions.fire('world'); - actions.fire('world'); + assert(store.getState().hello === 'world', 'store state was set using setState'); + }, - assert(store.getState().hello === 'world', 'store state was set using setState'); - }, + 'set state in lifecycle': function () { + const TestStore = { + state: { test: null }, - 'set state in lifecycle': function () { - const TestStore = { - state: { test: null }, + lifecycle: { + init() { + this.state.test = 'i am here'; + } + } + }; - lifecycle: { - init() { - this.state.test = 'i am here'; - } - } - }; + const store = alt.createStore(TestStore); + assert(store.getState().test === 'i am here', 'setting state on lifecycle'); + }, - const store = alt.createStore(TestStore); - assert(store.getState().test === 'i am here', 'setting state on lifecycle'); + 'get instance works': function () { + const TestStore = { + state: { test: null }, + bindListeners: { + handleFire: actions.FIRE }, - - 'get instance works': function () { - const TestStore = { - state: { test: null }, - bindListeners: { - handleFire: actions.FIRE - }, - handleFire() { - this.setState({ test: this.getInstance() }); - } - }; - - const store = alt.createStore(TestStore); - actions.fire(); - assert(store.getState().test === store); + handleFire() { + this.setState({ test: this.getInstance() }); } + }; + + const store = alt.createStore(TestStore); + actions.fire(); + assert(store.getState().test === store); } + } }; diff --git a/test/failed-dispatch-test.js b/test/failed-dispatch-test.js index 9461bce8..5bde4c71 100644 --- a/test/failed-dispatch-test.js +++ b/test/failed-dispatch-test.js @@ -3,92 +3,92 @@ import sinon from 'sinon'; import Alt from '../dist/alt-with-runtime'; export default { - 'catch failed dispatches': { - 'uncaught dispatches result in an error': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); - - class Uncaught { - constructor() { - this.bindListeners({ fire: actions.FIRE }); - } + 'catch failed dispatches': { + 'uncaught dispatches result in an error': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); + + class Uncaught { + constructor() { + this.bindListeners({ fire: actions.FIRE }); + } - fire() { - throw new Error('oops'); - } - } + fire() { + throw new Error('oops'); + } + } - alt.createStore(Uncaught); - assert.throws(() => { return actions.fire(); }); - }, + alt.createStore(Uncaught); + assert.throws(() => { return actions.fire(); }); + }, - 'errors can be caught though': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); + 'errors can be caught though': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); - class Caught { - constructor() { - this.x = 0; - this.bindListeners({ fire: actions.FIRE }); + class Caught { + constructor() { + this.x = 0; + this.bindListeners({ fire: actions.FIRE }); - this.on('error', () => { - this.x = 1; - }); - } + this.on('error', () => { + this.x = 1; + }); + } - fire() { - throw new Error('oops'); - } - } + fire() { + throw new Error('oops'); + } + } - const caught = alt.createStore(Caught); + const caught = alt.createStore(Caught); - const storeListener = sinon.spy(); + const storeListener = sinon.spy(); - caught.listen(storeListener); + caught.listen(storeListener); - assert(caught.getState().x === 0); - assert.doesNotThrow(() => { return actions.fire(); }); - assert(caught.getState().x === 1); + assert(caught.getState().x === 0); + assert.doesNotThrow(() => { return actions.fire(); }); + assert(caught.getState().x === 1); - assert.notOk(storeListener.calledOnce, 'the store did not emit a change'); + assert.notOk(storeListener.calledOnce, 'the store did not emit a change'); - caught.unlisten(storeListener); - }, + caught.unlisten(storeListener); + }, - 'you have to emit changes yourself': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); + 'you have to emit changes yourself': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); - class CaughtReturn { - constructor() { - this.x = 0; - this.bindListeners({ fire: actions.FIRE }); + class CaughtReturn { + constructor() { + this.x = 0; + this.bindListeners({ fire: actions.FIRE }); - this.on('error', () => { - this.x = 1; - this.emitChange(); - }); - } + this.on('error', () => { + this.x = 1; + this.emitChange(); + }); + } - fire() { - throw new Error('oops'); - } - } + fire() { + throw new Error('oops'); + } + } - const caughtReturn = alt.createStore(CaughtReturn); + const caughtReturn = alt.createStore(CaughtReturn); - const storeListener = sinon.spy(); + const storeListener = sinon.spy(); - const dispose = caughtReturn.listen(storeListener); + const dispose = caughtReturn.listen(storeListener); - assert(caughtReturn.getState().x === 0); - assert.doesNotThrow(() => { return actions.fire(); }); - assert(caughtReturn.getState().x === 1); + assert(caughtReturn.getState().x === 0); + assert.doesNotThrow(() => { return actions.fire(); }); + assert(caughtReturn.getState().x === 1); - assert.ok(storeListener.calledOnce); + assert.ok(storeListener.calledOnce); - dispose(); - } + dispose(); } + } }; diff --git a/test/functional-test.js b/test/functional-test.js index ec577ac1..46ece626 100644 --- a/test/functional-test.js +++ b/test/functional-test.js @@ -3,173 +3,173 @@ import sinon from 'sinon'; import Alt from '../dist/alt-with-runtime'; export default { - 'functional goodies for alt': { - 'observing for changes in a POJO so we get context passed in': function () { - const alt = new Alt(); + 'functional goodies for alt': { + 'observing for changes in a POJO so we get context passed in': function () { + const alt = new Alt(); - const observe = sinon.stub().returns({}); - const displayName = 'store'; + const observe = sinon.stub().returns({}); + const displayName = 'store'; - alt.createStore({ displayName, observe }); + alt.createStore({ displayName, observe }); - assert.ok(observe.calledOnce); - assert(observe.args[0][0] === alt, 'first arg is alt'); - }, - - 'when observing changes, they are observed': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); + assert.ok(observe.calledOnce); + assert(observe.args[0][0] === alt, 'first arg is alt'); + }, - const displayName = 'store'; + 'when observing changes, they are observed': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); - const store = alt.createStore({ - displayName, - observe() { - return { fire: actions.fire }; - }, - fire() { } - }); + const displayName = 'store'; - assert(store.boundListeners.length === 1, 'there is 1 action bound'); + const store = alt.createStore({ + displayName, + observe() { + return { fire: actions.fire }; }, + fire() { } + }); - 'otherwise works like a haskell guard': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire', 'test'); + assert(store.boundListeners.length === 1, 'there is 1 action bound'); + }, - const spy = sinon.spy(); + 'otherwise works like a haskell guard': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire', 'test'); - const store = alt.createStore({ - displayName: 'store', - state: { x: 0 }, - bindListeners: { - fire: actions.fire - }, + const spy = sinon.spy(); + + const store = alt.createStore({ + displayName: 'store', + state: { x: 0 }, + bindListeners: { + fire: actions.fire + }, - fire() { - this.setState({ x: 1 }); - }, + fire() { + this.setState({ x: 1 }); + }, - otherwise() { - this.setState({ x: 2 }); - } - }); + otherwise() { + this.setState({ x: 2 }); + } + }); - const kill = store.listen(spy); + const kill = store.listen(spy); - actions.test(); - assert(store.getState().x === 2, 'the otherwise clause was ran'); + actions.test(); + assert(store.getState().x === 2, 'the otherwise clause was ran'); - actions.fire(); - assert(store.getState().x === 1, 'just fire was ran'); + actions.fire(); + assert(store.getState().x === 1, 'just fire was ran'); - assert.ok(spy.calledTwice); + assert.ok(spy.calledTwice); - kill(); - }, + kill(); + }, - 'preventDefault prevents a change event to be emitted': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); + 'preventDefault prevents a change event to be emitted': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); - const spy = sinon.spy(); + const spy = sinon.spy(); - const store = alt.createStore({ - displayName: 'store', - state: { x: 0 }, - bindListeners: { - fire: actions.fire - }, + const store = alt.createStore({ + displayName: 'store', + state: { x: 0 }, + bindListeners: { + fire: actions.fire + }, - fire() { - this.setState({ x: 1 }); - this.preventDefault(); - } - }); + fire() { + this.setState({ x: 1 }); + this.preventDefault(); + } + }); - const kill = store.listen(spy); + const kill = store.listen(spy); - actions.fire(); - assert(store.getState().x === 1, 'just fire was ran'); + actions.fire(); + assert(store.getState().x === 1, 'just fire was ran'); - assert(spy.callCount === 0, 'store listener was never called'); + assert(spy.callCount === 0, 'store listener was never called'); - kill(); - }, + kill(); + }, - 'reduce fires on every dispatch if defined': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); + 'reduce fires on every dispatch if defined': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); - const store = alt.createStore({ - displayName: 'store', + const store = alt.createStore({ + displayName: 'store', - state: { x: 0 }, + state: { x: 0 }, - reduce(state) { - if (state.x >= 3) return undefined; - return { x: state.x + 1 }; - } - }); + reduce(state) { + if (state.x >= 3) return undefined; + return { x: state.x + 1 }; + } + }); - actions.fire(); - actions.fire(); - actions.fire(); - actions.fire(); + actions.fire(); + actions.fire(); + actions.fire(); + actions.fire(); - assert(store.getState().x === 3, 'counter was incremented'); - }, + assert(store.getState().x === 3, 'counter was incremented'); + }, - 'reduce doesnt emit if preventDefault': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); + 'reduce doesnt emit if preventDefault': function () { + const alt = new Alt(); + const actions = alt.generateActions('fire'); - const store = alt.createStore({ - displayName: 'store', + const store = alt.createStore({ + displayName: 'store', - state: { x: 0 }, + state: { x: 0 }, - reduce(state) { - this.preventDefault(); - return {}; - } - }); + reduce(state) { + this.preventDefault(); + return {}; + } + }); - const spy = sinon.spy(); + const spy = sinon.spy(); - const unsub = store.listen(spy); + const unsub = store.listen(spy); - actions.fire(); + actions.fire(); - assert(spy.callCount === 0); + assert(spy.callCount === 0); - unsub(); - }, + unsub(); + }, - 'stores have a reduce method': function () { - const alt = new Alt(); + 'stores have a reduce method': function () { + const alt = new Alt(); - const store = alt.createStore({ - displayName: 'store', + const store = alt.createStore({ + displayName: 'store', - state: { x: 0 }, + state: { x: 0 }, - reduce(state) { - return state; - } - }); + reduce(state) { + return state; + } + }); - const store2 = alt.createStore({ - displayName: 'store2', + const store2 = alt.createStore({ + displayName: 'store2', - state: { x: 1 } - }); + state: { x: 1 } + }); - assert.isFunction(store.reduce); - assert.isFunction(store2.reduce); + assert.isFunction(store.reduce); + assert.isFunction(store2.reduce); - assert(store.reduce(store.state).x === 0); - assert(store2.reduce(store2.state).x === 1); - } + assert(store.reduce(store.state).x === 0); + assert(store2.reduce(store2.state).x === 1); } + } }; diff --git a/test/functions-test.js b/test/functions-test.js index 6892ddc3..70fb5b13 100644 --- a/test/functions-test.js +++ b/test/functions-test.js @@ -5,79 +5,79 @@ import Alt from '../dist/alt-with-runtime'; const alt = new Alt(); export default { - 'test the functions.js isMutableObject()': { - 'can import lib/functions': function () { - assert.ok(fn); - assert.ok(fn.isMutableObject); - assert(typeof fn.isMutableObject === 'function', 'isMutableObject is imported'); - }, - - 'isMutableObject works on regular objects': function () { - const obj = {}; - const obj2 = { foo: 'bar' }; - - assert(fn.isMutableObject(obj) === true, 'regular object should pass'); - assert(fn.isMutableObject(obj2) === true, 'regular object with fields should pass'); - }, - - 'isMutableObject fails on non-objects': function () { - assert(fn.isMutableObject(false) === false, 'boolean should fail'); - assert(fn.isMutableObject(1) === false, 'integer should fail'); - assert(fn.isMutableObject(new Date()) === false, 'date should fail'); - }, - - 'isMutableObject works on frozen objects': function () { - const obj = {}; - Object.freeze(obj); - - assert(fn.isMutableObject(obj) === false, 'frozen objects should fail'); - } + 'test the functions.js isMutableObject()': { + 'can import lib/functions': function () { + assert.ok(fn); + assert.ok(fn.isMutableObject); + assert(typeof fn.isMutableObject === 'function', 'isMutableObject is imported'); }, - 'can bootstrap a store with/without frozen state': { - 'normal store state can be bootstrapped': function () { - class NonFrozenStore { - constructor() { - this.state = { - foo: 'bar' - }; + 'isMutableObject works on regular objects': function () { + const obj = {}; + const obj2 = { foo: 'bar' }; - assert(this.state.foo === 'bar', 'State is initialized'); - } - } + assert(fn.isMutableObject(obj) === true, 'regular object should pass'); + assert(fn.isMutableObject(obj2) === true, 'regular object with fields should pass'); + }, + + 'isMutableObject fails on non-objects': function () { + assert(fn.isMutableObject(false) === false, 'boolean should fail'); + assert(fn.isMutableObject(1) === false, 'integer should fail'); + assert(fn.isMutableObject(new Date()) === false, 'date should fail'); + }, + + 'isMutableObject works on frozen objects': function () { + const obj = {}; + Object.freeze(obj); - alt.createStore(NonFrozenStore, 'NonFrozenStore', alt); - alt.bootstrap('{"NonFrozenStore": {"foo":"bar2"}}'); + assert(fn.isMutableObject(obj) === false, 'frozen objects should fail'); + } + }, - const myStore = alt.getStore('NonFrozenStore'); - assert(myStore.getState().foo === 'bar2', 'State was bootstrapped with updated bar'); - }, + 'can bootstrap a store with/without frozen state': { + 'normal store state can be bootstrapped': function () { + class NonFrozenStore { + constructor() { + this.state = { + foo: 'bar' + }; - 'frozen store state can be bootstrapped': function () { - class FrozenStateStore { - constructor() { - this.config = { - onDeserialize: (data) => { - Object.freeze(data); - return data; - } - }; + assert(this.state.foo === 'bar', 'State is initialized'); + } + } - this.state = { - foo: 'bar' - }; + alt.createStore(NonFrozenStore, 'NonFrozenStore', alt); + alt.bootstrap('{"NonFrozenStore": {"foo":"bar2"}}'); - Object.freeze(this.state); + const myStore = alt.getStore('NonFrozenStore'); + assert(myStore.getState().foo === 'bar2', 'State was bootstrapped with updated bar'); + }, - assert(this.state.foo === 'bar', 'State is initialized'); - } + 'frozen store state can be bootstrapped': function () { + class FrozenStateStore { + constructor() { + this.config = { + onDeserialize: (data) => { + Object.freeze(data); + return data; } + }; - alt.createStore(FrozenStateStore, 'FrozenStateStore', alt); - alt.bootstrap('{"FrozenStateStore": {"foo":"bar2"}}'); + this.state = { + foo: 'bar' + }; - const myStore = alt.getStore('FrozenStateStore'); - assert(myStore.getState().foo === 'bar2', 'State was bootstrapped with updated bar'); + Object.freeze(this.state); + + assert(this.state.foo === 'bar', 'State is initialized'); } + } + + alt.createStore(FrozenStateStore, 'FrozenStateStore', alt); + alt.bootstrap('{"FrozenStateStore": {"foo":"bar2"}}'); + + const myStore = alt.getStore('FrozenStateStore'); + assert(myStore.getState().foo === 'bar2', 'State was bootstrapped with updated bar'); } + } }; diff --git a/test/helpers/SaaM.js b/test/helpers/SaaM.js index 49063cf7..935ef26f 100644 --- a/test/helpers/SaaM.js +++ b/test/helpers/SaaM.js @@ -2,5 +2,5 @@ export const displayName = 'SaaM'; export const state = 1; export function reduce(reduceState, payload) { //eslint-disable-line - return reduceState + 1; + return reduceState + 1; } diff --git a/test/index.js b/test/index.js index f9cf199f..8451b7f5 100644 --- a/test/index.js +++ b/test/index.js @@ -5,239 +5,239 @@ import Alt from '../'; const alt = new Alt(); class MyActions { - constructor() { - this.generateActions( - 'callInternalMethod', - 'shortHandBinary', - 'getInstanceInside', - 'dontEmit', - 'moreActions2', - 'moreActions3', - 'resetRecycled', - 'asyncStoreAction', - 'updateAnotherVal', - ); - this.generateActions('anotherAction'); - - this.actionOnThis = (x) => { - return x; - }; - } + constructor() { + this.generateActions( + 'callInternalMethod', + 'shortHandBinary', + 'getInstanceInside', + 'dontEmit', + 'moreActions2', + 'moreActions3', + 'resetRecycled', + 'asyncStoreAction', + 'updateAnotherVal', + ); + this.generateActions('anotherAction'); + + this.actionOnThis = (x) => { + return x; + }; + } updateName(name) { //eslint-disable-line - return name; - } + return name; + } - justTestingInternalActions() { - return { - updateThree: this.updateThree, - updateName: this.updateName - }; - } + justTestingInternalActions() { + return { + updateThree: this.updateThree, + updateName: this.updateName + }; + } - moreActions() { - return (dispatch) => { - dispatch(1); - this.moreActions2.defer(2); - this.moreActions3.defer(3); - }; - } + moreActions() { + return (dispatch) => { + dispatch(1); + this.moreActions2.defer(2); + this.moreActions3.defer(3); + }; + } - updateTwo(a, b) { - return { a, b }; - } + updateTwo(a, b) { + return { a, b }; + } - updateThree(a, b, c) { - return { a, b, c }; - } + updateThree(a, b, c) { + return { a, b, c }; + } } const myActions = {}; alt.createActions(MyActions, myActions); const objActions = alt.createActions({ - hello() { }, - world() { } + hello() { }, + world() { } }); const myShorthandActions = alt.generateActions('actionOne', 'actionTwo'); class MyStore { - constructor() { - const myActionsInst = this.alt.getActions('myActions'); - if (myActionsInst) { - this.bindAction(myActionsInst.updateName, this.onUpdateName); - } - - this.bindAction(myActions.updateName, this.onUpdateName); - this.bindAction(myActions.CALL_INTERNAL_METHOD, this.doCallInternal); - this.bindAction(myActions.dontEmit, this.dontEmitEvent); - this.bindAction(myActions.asyncStoreAction, this.doStoreAsync); - this.name = 'first'; - this.calledInternal = false; - this.dontEmitEventCalled = false; - this.async = false; + constructor() { + const myActionsInst = this.alt.getActions('myActions'); + if (myActionsInst) { + this.bindAction(myActionsInst.updateName, this.onUpdateName); + } - this.exportPublicMethods({ - externalMethodNoStatic: this.externalMethodNoStatic - }); + this.bindAction(myActions.updateName, this.onUpdateName); + this.bindAction(myActions.CALL_INTERNAL_METHOD, this.doCallInternal); + this.bindAction(myActions.dontEmit, this.dontEmitEvent); + this.bindAction(myActions.asyncStoreAction, this.doStoreAsync); + this.name = 'first'; + this.calledInternal = false; + this.dontEmitEventCalled = false; + this.async = false; - this._dispatcher = this.dispatcher; - } + this.exportPublicMethods({ + externalMethodNoStatic: this.externalMethodNoStatic + }); - doStoreAsync() { - setTimeout(() => { - this.async = true; - this.getInstance().emitChange(); - }); - return false; - } + this._dispatcher = this.dispatcher; + } - onUpdateName(name) { - this.name = name; - } + doStoreAsync() { + setTimeout(() => { + this.async = true; + this.getInstance().emitChange(); + }); + return false; + } - doCallInternal() { - this.internalOnly(); - } + onUpdateName(name) { + this.name = name; + } - internalOnly() { - this.calledInternal = true; - } + doCallInternal() { + this.internalOnly(); + } - dontEmitEvent() { - this.dontEmitEventCalled = true; - return false; - } + internalOnly() { + this.calledInternal = true; + } - static externalMethod() { - return true; - } + dontEmitEvent() { + this.dontEmitEventCalled = true; + return false; + } - externalMethodNoStatic() { - return true; - } + static externalMethod() { + return true; + } + + externalMethodNoStatic() { + return true; + } } const myStore = alt.createStore(MyStore); class SecondStore { - constructor() { - this.foo = 'bar'; - this.name = myStore.getState().name; - this.instance = null; + constructor() { + this.foo = 'bar'; + this.name = myStore.getState().name; + this.instance = null; - this.deferrals = 0; + this.deferrals = 0; - this.recycled = false; + this.recycled = false; - this.bindActions(myActions); + this.bindActions(myActions); - this.exportPublicMethods({ - externalMethodNoStatic: this.externalMethodNoStatic, - concatFooWithNoStatic: this.concatFooWithNoStatic - }); + this.exportPublicMethods({ + externalMethodNoStatic: this.externalMethodNoStatic, + concatFooWithNoStatic: this.concatFooWithNoStatic + }); - this.on('init', () => { - this.recycled = true; - }); - } + this.on('init', () => { + this.recycled = true; + }); + } - onResetRecycled() { - this.recycled = false; - } + onResetRecycled() { + this.recycled = false; + } - onUpdateTwo(x) { - this.foo = x.a + x.b; - } + onUpdateTwo(x) { + this.foo = x.a + x.b; + } - updateThree(x) { - this.waitFor([myStore.dispatchToken]); - this.name = myStore.getState().name; - this.foo = x.a + x.b + x.c; - } + updateThree(x) { + this.waitFor([myStore.dispatchToken]); + this.name = myStore.getState().name; + this.foo = x.a + x.b + x.c; + } - shortHandBinary(arr) { - this.foo = arr; - } + shortHandBinary(arr) { + this.foo = arr; + } - onUpdateName() { - this.waitFor(myStore.dispatchToken); - this.name = myStore.getState().name; - } + onUpdateName() { + this.waitFor(myStore.dispatchToken); + this.name = myStore.getState().name; + } - onGetInstanceInside() { - this.instance = this.getInstance(); - } + onGetInstanceInside() { + this.instance = this.getInstance(); + } - onMoreActions(x) { - this.deferrals = x; - } + onMoreActions(x) { + this.deferrals = x; + } - onMoreActions2(x) { - this.deferrals = x; - } + onMoreActions2(x) { + this.deferrals = x; + } - onMoreActions3(x) { - this.deferrals = x; - } + onMoreActions3(x) { + this.deferrals = x; + } - static externalMethod() { - return this.getState().foo; - } + static externalMethod() { + return this.getState().foo; + } - externalMethodNoStatic() { - return this.getState().foo; - } + externalMethodNoStatic() { + return this.getState().foo; + } - static concatFooWith(x) { - return this.getState().foo + x; - } + static concatFooWith(x) { + return this.getState().foo + x; + } - concatFooWithNoStatic(x) { - return this.getState().foo + x; - } + concatFooWithNoStatic(x) { + return this.getState().foo + x; + } } const secondStore = alt.createStore(SecondStore, 'AltSecondStore'); class LifeCycleStore { static config = { - onSerialize: (state) => { + onSerialize: (state) => { state.serialized = true; //eslint-disable-line - return state; - }, - onDeserialize: (data) => { + return state; + }, + onDeserialize: (data) => { data.deserialized = true; //eslint-disable-line - } + } }; constructor() { - this.bootstrapped = false; - this.init = false; - this.rollback = false; - this.snapshotted = false; - this.serialized = false; - this.deserialized = false; - - this.bindListeners({ - test: myActions.updateName, - test2: [myActions.updateName, myActions.updateTwo], - test3: myActions.updateName - }); - - this.on('init', () => { - this.init = true; - }); - this.on('bootstrap', () => { - this.bootstrapped = true; - }); - this.on('snapshot', () => { - this.snapshotted = true; - }); - this.on('rollback', () => { - this.rollback = true; - }); + this.bootstrapped = false; + this.init = false; + this.rollback = false; + this.snapshotted = false; + this.serialized = false; + this.deserialized = false; + + this.bindListeners({ + test: myActions.updateName, + test2: [myActions.updateName, myActions.updateTwo], + test3: myActions.updateName + }); + + this.on('init', () => { + this.init = true; + }); + this.on('bootstrap', () => { + this.bootstrapped = true; + }); + this.on('snapshot', () => { + this.snapshotted = true; + }); + this.on('rollback', () => { + this.rollback = true; + }); } test() { } @@ -248,73 +248,73 @@ class LifeCycleStore { const lifecycleStore = alt.createStore(LifeCycleStore); class ThirdStore { - constructor() { - this.bindAction(myActions.updateName, this.onUpdateName); - } + constructor() { + this.bindAction(myActions.updateName, this.onUpdateName); + } - onUpdateName() { - this.waitFor(myStore, secondStore); // Not referencing dispatchToken! - this.name = `${secondStore.getState().name}3`; - } + onUpdateName() { + this.waitFor(myStore, secondStore); // Not referencing dispatchToken! + this.name = `${secondStore.getState().name}3`; + } } const thirdStore = alt.createStore(ThirdStore); class Model { - constructor({ x, y }) { - this.x = x; - this.y = y; - } + constructor({ x, y }) { + this.x = x; + this.y = y; + } - get sum() { - return this.x + this.y; - } + get sum() { + return this.x + this.y; + } - get product() { - return this.x * this.y; - } + get product() { + return this.x * this.y; + } - get data() { - return { - x: this.x, - y: this.y, - sum: this.sum, - product: this.product - }; - } + get data() { + return { + x: this.x, + y: this.y, + sum: this.sum, + product: this.product + }; + } } class InterceptSnapshotStore { static config = { - onSerialize: (state) => { - return { - modelData: state.modelData.data, - anotherVal: state.anotherVal - }; - }, - onDeserialize: (data) => { - const obj = { - modelData: new Model({ x: data.modelData.x, y: data.modelData.y }), - anotherVal: data.anotherVal - }; - return obj; - } + onSerialize: (state) => { + return { + modelData: state.modelData.data, + anotherVal: state.anotherVal + }; + }, + onDeserialize: (data) => { + const obj = { + modelData: new Model({ x: data.modelData.x, y: data.modelData.y }), + anotherVal: data.anotherVal + }; + return obj; + } }; constructor() { - this.bindAction(myActions.updateAnotherVal, this.onUpdateAnotherVal); + this.bindAction(myActions.updateAnotherVal, this.onUpdateAnotherVal); - this.modelData = new Model({ x: 2, y: 3 }); - this.anotherVal = 5; - this.privateVal = 10; + this.modelData = new Model({ x: 2, y: 3 }); + this.anotherVal = 5; + this.privateVal = 10; } onUpdateAnotherVal(newVal) { - this.anotherVal = newVal; + this.anotherVal = newVal; } static getModelData() { - return this.getState().modelData.data; + return this.getState().modelData.data; } } @@ -323,12 +323,12 @@ const interceptSnapshotStore = alt.createStore(InterceptSnapshotStore); // Alt instances... class AltInstance extends Alt { - constructor() { - super(); - this.addActions('myActions', MyActions, this); - this.addActions('fauxActions', ['one', 'two']); - this.addStore('myStore', MyStore, this); - } + constructor() { + super(); + this.addActions('myActions', MyActions, this); + this.addActions('fauxActions', ['one', 'two']); + this.addStore('myStore', MyStore, this); + } } const altInstance = new AltInstance(); @@ -340,20 +340,20 @@ const alt2 = new Alt(); function NameActions() { } NameActions.prototype.updateName = (name) => { - return name; + return name; }; const nameActions1 = alt1.createActions(NameActions); const nameActions2 = alt2.createActions(NameActions); function NameStore() { - this.bindActions(nameActions1); - this.bindActions(nameActions2); - this.name = 'foo'; + this.bindActions(nameActions1); + this.bindActions(nameActions2); + this.name = 'foo'; } NameStore.prototype.onUpdateName = function onUpdateName(name) { - this.name = name; + this.name = name; }; const nameStore1 = alt1.createStore(NameStore); @@ -363,939 +363,939 @@ const consoleWarn = console.warn.bind(console); /* istanbul ignore next */ const tests = { - beforeEach() { - alt.recycle(); - altInstance.recycle(); - alt1.recycle(); - alt2.recycle(); + beforeEach() { + alt.recycle(); + altInstance.recycle(); + alt1.recycle(); + alt2.recycle(); console.warn = consoleWarn; //eslint-disable-line - }, - - 'alt instance': () => { - assert.isFunction(alt.bootstrap, 'bootstrap function exists'); - assert.isObject(alt.dispatcher, 'dispatcher exists'); - assert.isFunction(alt.dispatcher.register, 'dispatcher function exists for listening to all events'); - assert.isFunction(alt.takeSnapshot, 'snapshot function exists for saving app state'); - assert.isFunction(alt.createActions, 'createActions function'); - assert.isFunction(alt.createStore, 'createStore function'); - assert.isObject(alt.stores.AltSecondStore, 'store exists in alt.stores'); - }, - - 'store methods': () => { - const storePrototype = Object.getPrototypeOf(myStore); - const assertMethods = ['constructor', 'listen', 'unlisten', 'getState']; - assert.deepEqual(Object.getOwnPropertyNames(storePrototype), assertMethods, 'methods exist for store'); - assert.isUndefined(myStore.addListener, 'event emitter methods not present'); - assert.isUndefined(myStore.removeListener, 'event emitter methods not present'); - assert.isUndefined(myStore.emit, 'event emitter methods not present'); - }, - - 'store external methods': () => { - assert.isFunction(myStore.externalMethod, 'static methods are made available'); - assert.isFunction(myStore.externalMethodNoStatic, 'methods via mixin are made available'); - assert(myStore.externalMethod() === true, 'static methods return proper result'); - assert(myStore.externalMethodNoStatic() === true, 'methods via mixin return proper result'); - assert.isFunction(secondStore.externalMethod, 'static methods are made available'); - assert.isFunction(secondStore.externalMethodNoStatic, 'static methods are made available'); - assert(secondStore.externalMethod() === 'bar', 'static methods have `this` bound to the instance'); - assert(secondStore.externalMethodNoStatic() === 'bar', 'static methods have `this` bound to the instance'); - assert(secondStore.concatFooWith('baz') === 'barbaz', 'static methods may be called with params too'); - assert(secondStore.concatFooWithNoStatic('baz') === 'barbaz', 'static methods may be called with params too'); - }, - - 'getting state': () => { - assert.isObject(myStore.getState()._dispatcher, 'the dispatcher is exposed internally'); - - assert(lifecycleStore.getState().bootstrapped === false, 'bootstrap has not been called yet'); - assert(lifecycleStore.getState().snapshotted === false, 'takeSnapshot has not been called yet'); - assert(lifecycleStore.getState().serialized === false, 'takeSnapshot has not been called yet'); - assert(lifecycleStore.getState().rollback === false, 'rollback has not been called'); - assert(lifecycleStore.getState().init === true, 'init gets called when store initializes'); - assert(lifecycleStore.getState().deserialized === true, 'deserialize has not been called yet'); - }, - - 'snapshots and bootstrapping': () => { - const initialSnapshot = alt.takeSnapshot(); - assert(lifecycleStore.getState().snapshotted === true, 'takeSnapshot was called and the life cycle event was triggered'); - - const bootstrapReturnValue = alt.bootstrap(initialSnapshot); - assert(bootstrapReturnValue === undefined, 'bootstrap returns nothing'); - assert(lifecycleStore.getState().bootstrapped === true, 'bootstrap was called and the life cycle event was triggered'); - assert(lifecycleStore.getState().snapshotted === true, 'snapshot was called and the life cycle event was triggered'); - assert(lifecycleStore.getState().serialized === true, 'takeSnapshot has not been called yet'); - assert(lifecycleStore.getState().deserialized === true, 'deserialize was called and the life cycle event was triggered'); - }, - - 'existence of actions': () => { - assert.isFunction(myActions.anotherAction, 'shorthand function created with createAction exists'); - assert.isFunction(myActions.callInternalMethod, 'shorthand function created with createActions exists'); - assert.isFunction(myActions.updateName, 'prototype defined actions exist'); - assert.isFunction(myActions.updateTwo, 'prototype defined actions exist'); - assert.isFunction(myActions.updateThree, 'prototype defined actions exist'); - assert.isFunction(myShorthandActions.actionOne, 'action created with shorthand createActions exists'); - assert.isFunction(myShorthandActions.actionTwo, 'other action created with shorthand createActions exists'); - assert.isFunction(objActions.hello, 'actions created by obj are functions'); - assert.isFunction(objActions.world, 'actions created by obj are functions'); - assert.isFunction(myActions.actionOnThis, 'actions defined in `this` are functions'); - }, - - 'existence of constants': () => { - assert.isDefined(myActions.UPDATE_NAME, 'a constant is created for each action'); - assert.isDefined(myActions.UPDATE_TWO, 'a constant is created for each action'); - assert.isDefined(myActions.CALL_INTERNAL_METHOD, 'a constant is created for each action'); - }, - - 'helper functions': () => { - assert.isFunction(myActions.updateName.defer, 'actions have a defer method for async flow'); - }, - - 'internal actions': () => { - const internalActions = myActions.justTestingInternalActions(); - assert.isFunction(internalActions.updateThree, 'actions (below) are available internally through this.actions'); - assert.isFunction(internalActions.updateName, 'actions (above) are available internally through this.actions'); - assert.isFunction(internalActions.updateName.defer, 'making sure internal actions has a defer as well'); - assert.isFunction(internalActions.updateThree.defer, 'making sure internal actions has a defer as well'); - - assert.isFunction(myStore.getState, 'the store has a getState method exposed'); - assert.isUndefined(myStore.internalOnly, 'internal only method isnt available'); - - assert(myStore.getState().name === 'first', 'store has been initialized properly'); - assert(myStore.getState().calledInternal === false, 'store has been initialized properly'); - }, - - 'calling actions': () => { - const actionReturnType = myActions.updateName('bear'); - assert(actionReturnType === 'bear', 'action returns what is dispatched'); - - assert(myStore.getState().name === 'bear', 'action was called, state was updated properly'); - assert(myStore.getState().calledInternal === false, 'internal method has not been called'); - assert(secondStore.getState().name === 'bear', 'second store gets its value from myStore'); - assert(thirdStore.getState().name === 'bear3', 'third store gets its value from secondStore, adds 3'); - }, - - 'calling internal methods': () => { - myActions.callInternalMethod(); - assert(myStore.getState().calledInternal === true, 'internal method has been called successfully by an action'); - }, - - snapshotting() { - myActions.updateName('bear'); - const snapshot = alt.takeSnapshot(); - assert.isString(snapshot, 'a snapshot json is returned'); - assert(JSON.parse(snapshot).MyStore.name === 'bear', 'the state is current'); - assert.isObject(JSON.parse(snapshot).AltSecondStore, 'the custom identifier name works'); + }, + + 'alt instance': () => { + assert.isFunction(alt.bootstrap, 'bootstrap function exists'); + assert.isObject(alt.dispatcher, 'dispatcher exists'); + assert.isFunction(alt.dispatcher.register, 'dispatcher function exists for listening to all events'); + assert.isFunction(alt.takeSnapshot, 'snapshot function exists for saving app state'); + assert.isFunction(alt.createActions, 'createActions function'); + assert.isFunction(alt.createStore, 'createStore function'); + assert.isObject(alt.stores.AltSecondStore, 'store exists in alt.stores'); + }, + + 'store methods': () => { + const storePrototype = Object.getPrototypeOf(myStore); + const assertMethods = ['constructor', 'listen', 'unlisten', 'getState']; + assert.deepEqual(Object.getOwnPropertyNames(storePrototype), assertMethods, 'methods exist for store'); + assert.isUndefined(myStore.addListener, 'event emitter methods not present'); + assert.isUndefined(myStore.removeListener, 'event emitter methods not present'); + assert.isUndefined(myStore.emit, 'event emitter methods not present'); + }, + + 'store external methods': () => { + assert.isFunction(myStore.externalMethod, 'static methods are made available'); + assert.isFunction(myStore.externalMethodNoStatic, 'methods via mixin are made available'); + assert(myStore.externalMethod() === true, 'static methods return proper result'); + assert(myStore.externalMethodNoStatic() === true, 'methods via mixin return proper result'); + assert.isFunction(secondStore.externalMethod, 'static methods are made available'); + assert.isFunction(secondStore.externalMethodNoStatic, 'static methods are made available'); + assert(secondStore.externalMethod() === 'bar', 'static methods have `this` bound to the instance'); + assert(secondStore.externalMethodNoStatic() === 'bar', 'static methods have `this` bound to the instance'); + assert(secondStore.concatFooWith('baz') === 'barbaz', 'static methods may be called with params too'); + assert(secondStore.concatFooWithNoStatic('baz') === 'barbaz', 'static methods may be called with params too'); + }, + + 'getting state': () => { + assert.isObject(myStore.getState()._dispatcher, 'the dispatcher is exposed internally'); + + assert(lifecycleStore.getState().bootstrapped === false, 'bootstrap has not been called yet'); + assert(lifecycleStore.getState().snapshotted === false, 'takeSnapshot has not been called yet'); + assert(lifecycleStore.getState().serialized === false, 'takeSnapshot has not been called yet'); + assert(lifecycleStore.getState().rollback === false, 'rollback has not been called'); + assert(lifecycleStore.getState().init === true, 'init gets called when store initializes'); + assert(lifecycleStore.getState().deserialized === true, 'deserialize has not been called yet'); + }, + + 'snapshots and bootstrapping': () => { + const initialSnapshot = alt.takeSnapshot(); + assert(lifecycleStore.getState().snapshotted === true, 'takeSnapshot was called and the life cycle event was triggered'); + + const bootstrapReturnValue = alt.bootstrap(initialSnapshot); + assert(bootstrapReturnValue === undefined, 'bootstrap returns nothing'); + assert(lifecycleStore.getState().bootstrapped === true, 'bootstrap was called and the life cycle event was triggered'); + assert(lifecycleStore.getState().snapshotted === true, 'snapshot was called and the life cycle event was triggered'); + assert(lifecycleStore.getState().serialized === true, 'takeSnapshot has not been called yet'); + assert(lifecycleStore.getState().deserialized === true, 'deserialize was called and the life cycle event was triggered'); + }, + + 'existence of actions': () => { + assert.isFunction(myActions.anotherAction, 'shorthand function created with createAction exists'); + assert.isFunction(myActions.callInternalMethod, 'shorthand function created with createActions exists'); + assert.isFunction(myActions.updateName, 'prototype defined actions exist'); + assert.isFunction(myActions.updateTwo, 'prototype defined actions exist'); + assert.isFunction(myActions.updateThree, 'prototype defined actions exist'); + assert.isFunction(myShorthandActions.actionOne, 'action created with shorthand createActions exists'); + assert.isFunction(myShorthandActions.actionTwo, 'other action created with shorthand createActions exists'); + assert.isFunction(objActions.hello, 'actions created by obj are functions'); + assert.isFunction(objActions.world, 'actions created by obj are functions'); + assert.isFunction(myActions.actionOnThis, 'actions defined in `this` are functions'); + }, + + 'existence of constants': () => { + assert.isDefined(myActions.UPDATE_NAME, 'a constant is created for each action'); + assert.isDefined(myActions.UPDATE_TWO, 'a constant is created for each action'); + assert.isDefined(myActions.CALL_INTERNAL_METHOD, 'a constant is created for each action'); + }, + + 'helper functions': () => { + assert.isFunction(myActions.updateName.defer, 'actions have a defer method for async flow'); + }, + + 'internal actions': () => { + const internalActions = myActions.justTestingInternalActions(); + assert.isFunction(internalActions.updateThree, 'actions (below) are available internally through this.actions'); + assert.isFunction(internalActions.updateName, 'actions (above) are available internally through this.actions'); + assert.isFunction(internalActions.updateName.defer, 'making sure internal actions has a defer as well'); + assert.isFunction(internalActions.updateThree.defer, 'making sure internal actions has a defer as well'); + + assert.isFunction(myStore.getState, 'the store has a getState method exposed'); + assert.isUndefined(myStore.internalOnly, 'internal only method isnt available'); + + assert(myStore.getState().name === 'first', 'store has been initialized properly'); + assert(myStore.getState().calledInternal === false, 'store has been initialized properly'); + }, + + 'calling actions': () => { + const actionReturnType = myActions.updateName('bear'); + assert(actionReturnType === 'bear', 'action returns what is dispatched'); + + assert(myStore.getState().name === 'bear', 'action was called, state was updated properly'); + assert(myStore.getState().calledInternal === false, 'internal method has not been called'); + assert(secondStore.getState().name === 'bear', 'second store gets its value from myStore'); + assert(thirdStore.getState().name === 'bear3', 'third store gets its value from secondStore, adds 3'); + }, + + 'calling internal methods': () => { + myActions.callInternalMethod(); + assert(myStore.getState().calledInternal === true, 'internal method has been called successfully by an action'); + }, + + snapshotting() { + myActions.updateName('bear'); + const snapshot = alt.takeSnapshot(); + assert.isString(snapshot, 'a snapshot json is returned'); + assert(JSON.parse(snapshot).MyStore.name === 'bear', 'the state is current'); + assert.isObject(JSON.parse(snapshot).AltSecondStore, 'the custom identifier name works'); + + myActions.updateName('blossom'); + assert(myStore.getState().name === 'blossom', 'action was called, state was updated properly'); + assert(JSON.parse(snapshot).MyStore.name === 'bear', 'the snapshot is not affected by action'); + }, + + 'specifying stores to snapshot': () => { + const snapshot = alt.takeSnapshot('MyStore', 'AltSecondStore'); + assert.deepEqual(Object.keys(JSON.parse(snapshot)), ['MyStore', 'AltSecondStore'], 'the snapshot includes specified stores'); + assert(Object.keys(JSON.parse(snapshot)).indexOf('LifeCycleStore') === -1, 'the snapshot does not include unspecified stores'); + + const snapshot2 = alt.takeSnapshot(myStore, secondStore); + assert.deepEqual(Object.keys(JSON.parse(snapshot2)), ['MyStore', 'AltSecondStore'], 'the snapshot includes specified stores'); + assert(Object.keys(JSON.parse(snapshot2)).indexOf('LifeCycleStore') === -1, 'the snapshot does not include unspecified stores'); + }, + + 'serializing/deserializing snapshot/bootstrap data': () => { + myActions.updateAnotherVal(11); + const snapshot = alt.takeSnapshot(); + const expectedSerializedData = { + modelData: { + x: 2, + y: 3, + sum: 5, + product: 6 + }, + anotherVal: 11 + }; + // serializes snapshot data correctly + assert.deepEqual(JSON.parse(snapshot).InterceptSnapshotStore, expectedSerializedData, 'interceptSnapshotStore was serialized correctly'); + alt.rollback(); + // deserializes data correctly + assert.deepEqual(interceptSnapshotStore.getModelData(), expectedSerializedData.modelData); + }, + + mutation() { + const state = myStore.getState(); + state.name = 'foobar'; + assert(state.name === 'foobar', 'mutated returned state'); + assert(myStore.getState().name === 'first', 'store state was not mutated'); + }, + + 'rolling back': () => { + const rollbackValue = alt.rollback(); + assert(rollbackValue === undefined, 'rollback returns nothing'); + + assert(myStore.getState().name === 'first', 'state has been rolledback to last snapshot'); + assert(lifecycleStore.getState().rollback === true, 'rollback lifecycle method was called'); + + myActions.updateName('blossom'); + // check that subsequent snapshots overwrite the LAST_SNAPSHOT such that + // they can be rolled back to + alt.takeSnapshot(); + alt.rollback(); + assert(myStore.getState().name === 'blossom', 'rolled back to second snapshot'); + }, + + 'store listening': () => { + const mooseChecker = (x) => { + assert(x.name === 'moose', 'listener for store works'); + assert(myStore.getState().name === 'moose', 'new store state present'); + }; + const dispose = myStore.listen(mooseChecker); + myActions.updateName('moose'); + + assert(myStore.getState().name === 'moose', 'new store state present'); + + dispose(); + myActions.updateName('badger'); + + assert(myStore.getState().name === 'badger', 'new store state present'); + }, + + unlistening() { + assert(myStore.getState().name !== 'moose', 'state has not been updated'); + + const mooseChecker = sinon.spy(); + const unlisten = myStore.listen(mooseChecker); + myActions.updateName('moose'); + + assert(myStore.getState().name === 'moose', 'new store state present'); + + unlisten(); + + myActions.updateName('badger'); + + assert(myStore.getState().name === 'badger', 'new store state present'); + assert.ok(mooseChecker.calledOnce); + }, + + 'unlisten lifecycle hook': () => { + const unlistener = sinon.spy(); + class XStore { + constructor() { + this.on('unlisten', unlistener); + } + } + const store = alt.createStore(XStore); + + // unlisten directly + store.listen(() => { })(); + + assert.ok(unlistener.calledOnce, 'unlisten lifecycle hook called'); + }, + + bootstrapping() { + alt.bootstrap('{"MyStore":{"name":"bee"}}'); + assert(myStore.getState().name === 'bee', 'I can bootstrap many times'); + + alt.bootstrap('{}'); + + alt.bootstrap('{"MyStore":{"name":"monkey"}}'); + assert(myStore.getState().name === 'monkey', 'I can bootstrap many times'); + }, + + 'variadic actions': (done) => { + myActions.updateTwo(4, 2); + assert(secondStore.getState().foo === 6, 'im able to pass two params into an action'); + + myActions.updateThree(4, 2, 1); + assert(secondStore.getState().foo === 7, 'the store method updateThree works'); + + myActions.shortHandBinary(1, 0); + assert(Array.isArray(secondStore.getState().foo) === true, 'shorthand for multiple elements pass through goes as array'); + assert(secondStore.getState().foo[0] === 1, 'shorthand for multiple elements pass through goes as array'); + assert(secondStore.getState().foo[1] === 0, 'shorthand for multiple elements pass through goes as array'); + + + myActions.shortHandBinary.defer(2, 1); + setTimeout(() => { + assert(secondStore.getState().foo[0] === 2, 'shorthand for defer multiple elements pass through goes as array'); + assert(secondStore.getState().foo[1] === 1, 'shorthand for defer multiple elements pass through goes as array'); + done(); + }); + }, + + 'access of stores': () => { + assert(secondStore.foo === undefined, 'cant access state properties that live inside store'); + assert(secondStore.bindAction === undefined, 'cant access action listeners from outside store'); + assert(secondStore.bindActions === undefined, 'cant access action listeners from outside store'); + }, + + 'deferral of actions': (done) => { + myActions.updateName('gerenuk'); + assert(myStore.getState().name === 'gerenuk', 'store state was updated properly'); + myActions.updateName.defer('marmot'); + assert(myStore.getState().name === 'gerenuk', 'store state has same name (for now)'); + setTimeout(() => { + assert(myStore.getState().name === 'marmot', 'store state was updated with defer'); + done(); + }); + }, + + 'getting instance': () => { + assert.isFunction(myActions.getInstanceInside, 'action for getting the instance inside'); + assert(secondStore.getState().instance === null, 'instance is null because it has not been set'); + myActions.getInstanceInside(); + assert.isObject(secondStore.getState().instance, 'instance has been now set'); + assert.isFunction(secondStore.getState().instance.getState, 'instance is a pointer to secondStore'); + assert.isFunction(secondStore.getState().instance.externalMethod, 'instance has the static methods available'); + assert(secondStore.getState().instance.externalMethod() === 'bar', 'calling a static method from instance and able to use this inside'); + }, + + 'conflicting listeners on a store': () => { + class StoreWithManyListeners { + constructor() { + this.bindActions(myActions); + } - myActions.updateName('blossom'); - assert(myStore.getState().name === 'blossom', 'action was called, state was updated properly'); - assert(JSON.parse(snapshot).MyStore.name === 'bear', 'the snapshot is not affected by action'); - }, + // listeners with same action + updateName() { } + onUpdateName() { } + } - 'specifying stores to snapshot': () => { - const snapshot = alt.takeSnapshot('MyStore', 'AltSecondStore'); - assert.deepEqual(Object.keys(JSON.parse(snapshot)), ['MyStore', 'AltSecondStore'], 'the snapshot includes specified stores'); - assert(Object.keys(JSON.parse(snapshot)).indexOf('LifeCycleStore') === -1, 'the snapshot does not include unspecified stores'); + assert.throw(() => { return alt.createStore(StoreWithManyListeners); }, ReferenceError, 'You have multiple action handlers bound to an action: updateName and onUpdateName'); - const snapshot2 = alt.takeSnapshot(myStore, secondStore); - assert.deepEqual(Object.keys(JSON.parse(snapshot2)), ['MyStore', 'AltSecondStore'], 'the snapshot includes specified stores'); - assert(Object.keys(JSON.parse(snapshot2)).indexOf('LifeCycleStore') === -1, 'the snapshot does not include unspecified stores'); - }, + class EvilStore { + updateName() { } + } - 'serializing/deserializing snapshot/bootstrap data': () => { - myActions.updateAnotherVal(11); - const snapshot = alt.takeSnapshot(); - const expectedSerializedData = { - modelData: { - x: 2, - y: 3, - sum: 5, - product: 6 - }, - anotherVal: 11 - }; - // serializes snapshot data correctly - assert.deepEqual(JSON.parse(snapshot).InterceptSnapshotStore, expectedSerializedData, 'interceptSnapshotStore was serialized correctly'); - alt.rollback(); - // deserializes data correctly - assert.deepEqual(interceptSnapshotStore.getModelData(), expectedSerializedData.modelData); - }, + class InnocentStore extends EvilStore { + constructor() { + super(); + this.bindActions(myActions); + } - mutation() { - const state = myStore.getState(); - state.name = 'foobar'; - assert(state.name === 'foobar', 'mutated returned state'); - assert(myStore.getState().name === 'first', 'store state was not mutated'); - }, + onUpdateName() { } + } - 'rolling back': () => { - const rollbackValue = alt.rollback(); - assert(rollbackValue === undefined, 'rollback returns nothing'); + assert.throw(() => { return alt.createStore(InnocentStore); }, ReferenceError, 'You have multiple action handlers bound to an action: updateName and onUpdateName'); + }, - assert(myStore.getState().name === 'first', 'state has been rolledback to last snapshot'); - assert(lifecycleStore.getState().rollback === true, 'rollback lifecycle method was called'); + 'registering invalid action handlers': () => { + class StoreWithInvalidActionHandlers { + constructor() { + this.bindAction(myActions.THIS_DOES_NOT_EXIST, this.trololol); + } - myActions.updateName('blossom'); - // check that subsequent snapshots overwrite the LAST_SNAPSHOT such that - // they can be rolled back to - alt.takeSnapshot(); - alt.rollback(); - assert(myStore.getState().name === 'blossom', 'rolled back to second snapshot'); - }, + trololol() { } + } - 'store listening': () => { - const mooseChecker = (x) => { - assert(x.name === 'moose', 'listener for store works'); - assert(myStore.getState().name === 'moose', 'new store state present'); - }; - const dispose = myStore.listen(mooseChecker); - myActions.updateName('moose'); + assert.throw(() => { return alt.createStore(StoreWithInvalidActionHandlers); }, ReferenceError, 'Invalid action reference passed in'); - assert(myStore.getState().name === 'moose', 'new store state present'); + class StoreWithInvalidActionHandlers2 { + constructor() { + this.bindAction(myActions.UPDATE_NAME, this.invisibleFunction); + } + } - dispose(); - myActions.updateName('badger'); + assert.throw(() => { return alt.createStore(StoreWithInvalidActionHandlers2); }, TypeError, 'bindAction expects a function'); + }, - assert(myStore.getState().name === 'badger', 'new store state present'); - }, + 'exporting invalid store methods': () => { + class StoreWithInvalidExportType { + constructor() { + this.foo = 'bar'; + this.exportPublicMethods({ foo: 'foo' }); + } + } - unlistening() { - assert(myStore.getState().name !== 'moose', 'state has not been updated'); + assert.throw(() => { return alt.createStore(StoreWithInvalidExportType); }, TypeError, 'exportPublicMethods expects a function'); + }, - const mooseChecker = sinon.spy(); - const unlisten = myStore.listen(mooseChecker); - myActions.updateName('moose'); + 'waiting for nothing': () => { + class WaitPlease { + constructor() { + this.generateActions('pleaseWait'); + } + } + const waiter = alt.createActions(WaitPlease); - assert(myStore.getState().name === 'moose', 'new store state present'); + alt.createStore(class WaitsForNobody { + constructor() { + this.bindActions(waiter); + } - unlisten(); + pleaseWait() { + this.waitFor(); + } + }); - myActions.updateName('badger'); + assert.throw(() => { return waiter.pleaseWait(); }, ReferenceError, 'Dispatch tokens not provided'); + }, - assert(myStore.getState().name === 'badger', 'new store state present'); - assert.ok(mooseChecker.calledOnce); - }, + 'cancelling emit': () => { + function eventEmittedFail() { + assert(true === false, 'event was emitted but I did not want it to be'); + } + const dispose = myStore.listen(eventEmittedFail); + myActions.dontEmit(); + dispose(); + assert(myStore.getState().dontEmitEventCalled === true, 'dont emit event was called successfully and event was not emitted'); + }, + + 'multiple deferrals': (done) => { + myActions.moreActions(); + assert(secondStore.getState().deferrals === 1, 'deferrals is initially set to 1'); + setTimeout(() => { + assert(secondStore.getState().deferrals === 3, 'but deferrals ends up being set to 3 after all actions complete'); + done(); + }); + }, + + recycling() { + alt.recycle(); + assert(myStore.getState().name === 'first', 'recycle sets the state back to its origin'); + + myActions.resetRecycled(); + assert(secondStore.getState().recycled === false, 'recycle const was reset due to action'); + alt.recycle(); + assert(secondStore.getState().recycled === true, 'init lifecycle method was called by recycling'); + }, + + flushing() { + myActions.updateName('goat'); + const flushed = JSON.parse(alt.flush()); + assert(myStore.getState().name === 'first', 'flush is a lot like recycle'); + assert(flushed.MyStore.name === 'goat', 'except that flush returns the state before recycling'); + + myActions.updateName('butterfly'); + assert(myStore.getState().name === 'butterfly', 'I can update the state again after a flush'); + assert(secondStore.getState().name === 'butterfly', 'I can update the state again after a flush'); + }, + + 'recycling single store': () => { + myActions.updateName('butterfly'); + alt.recycle('MyStore'); + assert(myStore.getState().name === 'first', 'I can recycle specific stores'); + assert(secondStore.getState().name === 'butterfly', 'and other stores will not be recycled'); + + myActions.updateName('butterfly'); + alt.recycle(myStore); + assert(myStore.getState().name === 'first', 'I can recycle specific stores'); + }, + + 'recycling invalid stores': () => { + assert.throw(() => { return alt.recycle('StoreThatDoesNotExist'); }, ReferenceError, 'StoreThatDoesNotExist is not a valid store'); + }, + + 'alt single instances': () => { + assert.instanceOf(altInstance, Alt, 'altInstance is an instance of alt'); + assert.isObject(altInstance.dispatcher, 'it has a dispatcher'); + assert.isFunction(altInstance.bootstrap, 'bootstrap function exists'); + assert.isFunction(altInstance.createActions, 'createActions function'); + assert.isFunction(altInstance.createStore, 'createStore function'); + + const myActionsFromInst = altInstance.getActions('myActions'); + assert.isObject(myActionsFromInst, 'the actions exist'); + + const fauxActions = altInstance.getActions('fauxActions'); + assert.isFunction(fauxActions.one, 'faux actions were generated'); + + const myActionsFail = altInstance.getActions('ActionsThatDontExist'); + assert.isUndefined(myActionsFail, 'undefined actions'); + + myActionsFromInst.updateName('lion'); + assert(altInstance.getStore('myStore').getState().name === 'lion', 'state was updated'); + assert(myStore.getState().name === 'first', 'and other singleton store was not affected'); + }, + + 'multiple alt instances': () => { + nameActions1.updateName('bar'); + nameActions2.updateName('baz'); + + assert(nameStore1.getState().name === 'bar', 'store 1 state is set'); + assert(nameStore2.getState().name === 'baz', 'this store has different state'); + assert(altInstance.getStore('myStore').getState().name === 'first', 'other stores not affected'); + assert(myStore.getState().name === 'first', 'other singleton store not affected'); + }, + + 'actions with the same name': () => { + const newAlt = new Alt(); + + function UserActions() { + this.generateActions('update'); + } + const ua = newAlt.createActions(UserActions); - 'unlisten lifecycle hook': () => { - const unlistener = sinon.spy(); - class XStore { - constructor() { - this.on('unlisten', unlistener); - } - } - const store = alt.createStore(XStore); + function LinkActions() { + this.generateActions('update'); + } + const la = newAlt.createActions(LinkActions); - // unlisten directly - store.listen(() => { })(); + function Store() { + this.bindAction(ua.UPDATE, this.ua); + this.bindAction(la.UPDATE, this.la); - assert.ok(unlistener.calledOnce, 'unlisten lifecycle hook called'); - }, + this.a = 0; + this.b = 0; + } - bootstrapping() { - alt.bootstrap('{"MyStore":{"name":"bee"}}'); - assert(myStore.getState().name === 'bee', 'I can bootstrap many times'); + Store.prototype.ua = function protoUa() { + this.a = 1; + }; - alt.bootstrap('{}'); + Store.prototype.la = function protoLa() { + this.b = 1; + }; - alt.bootstrap('{"MyStore":{"name":"monkey"}}'); - assert(myStore.getState().name === 'monkey', 'I can bootstrap many times'); - }, + const store = newAlt.createStore(Store); - 'variadic actions': (done) => { - myActions.updateTwo(4, 2); - assert(secondStore.getState().foo === 6, 'im able to pass two params into an action'); + ua.update(); + la.update(); - myActions.updateThree(4, 2, 1); - assert(secondStore.getState().foo === 7, 'the store method updateThree works'); + const state = store.getState(); - myActions.shortHandBinary(1, 0); - assert(Array.isArray(secondStore.getState().foo) === true, 'shorthand for multiple elements pass through goes as array'); - assert(secondStore.getState().foo[0] === 1, 'shorthand for multiple elements pass through goes as array'); - assert(secondStore.getState().foo[1] === 0, 'shorthand for multiple elements pass through goes as array'); + assert(state.a === 1, 'both actions were called'); + assert(state.b === 1, 'both actions were called'); + }, + 'actions with the same name and same class name': () => { + const newAlt = new Alt(); - myActions.shortHandBinary.defer(2, 1); - setTimeout(() => { - assert(secondStore.getState().foo[0] === 2, 'shorthand for defer multiple elements pass through goes as array'); - assert(secondStore.getState().foo[1] === 1, 'shorthand for defer multiple elements pass through goes as array'); - done(); - }); - }, + const ua = (function ua() { + function a() { this.generateActions('update'); } + return newAlt.createActions(a); + }()); - 'access of stores': () => { - assert(secondStore.foo === undefined, 'cant access state properties that live inside store'); - assert(secondStore.bindAction === undefined, 'cant access action listeners from outside store'); - assert(secondStore.bindActions === undefined, 'cant access action listeners from outside store'); - }, + const la = (function la() { + function a() { this.generateActions('update'); } + return newAlt.createActions(a); + }()); - 'deferral of actions': (done) => { - myActions.updateName('gerenuk'); - assert(myStore.getState().name === 'gerenuk', 'store state was updated properly'); - myActions.updateName.defer('marmot'); - assert(myStore.getState().name === 'gerenuk', 'store state has same name (for now)'); - setTimeout(() => { - assert(myStore.getState().name === 'marmot', 'store state was updated with defer'); - done(); - }); - }, + let uaOnce = 0; + let laOnce = 0; - 'getting instance': () => { - assert.isFunction(myActions.getInstanceInside, 'action for getting the instance inside'); - assert(secondStore.getState().instance === null, 'instance is null because it has not been set'); - myActions.getInstanceInside(); - assert.isObject(secondStore.getState().instance, 'instance has been now set'); - assert.isFunction(secondStore.getState().instance.getState, 'instance is a pointer to secondStore'); - assert.isFunction(secondStore.getState().instance.externalMethod, 'instance has the static methods available'); - assert(secondStore.getState().instance.externalMethod() === 'bar', 'calling a static method from instance and able to use this inside'); - }, + class Store { + constructor() { + this.bindAction(ua.UPDATE, this.ua); + this.bindAction(la.UPDATE, this.la); - 'conflicting listeners on a store': () => { - class StoreWithManyListeners { - constructor() { - this.bindActions(myActions); - } + this.a = 0; + this.b = 0; + } - // listeners with same action - updateName() { } - onUpdateName() { } - } + ua() { + this.a = 1; + uaOnce += 1; + } - assert.throw(() => { return alt.createStore(StoreWithManyListeners); }, ReferenceError, 'You have multiple action handlers bound to an action: updateName and onUpdateName'); + la() { + this.b = 1; + laOnce += 1; + } + } - class EvilStore { - updateName() { } - } + const store = newAlt.createStore(Store); - class InnocentStore extends EvilStore { - constructor() { - super(); - this.bindActions(myActions); - } + ua.update(); + la.update(); - onUpdateName() { } - } + const state = store.getState(); - assert.throw(() => { return alt.createStore(InnocentStore); }, ReferenceError, 'You have multiple action handlers bound to an action: updateName and onUpdateName'); - }, + assert(state.a === 1, 'both actions were called'); + assert(state.b === 1, 'both actions were called'); + assert.equal(uaOnce, 1, 'actions only called once'); + assert.equal(laOnce, 1, 'actions only called once'); + }, - 'registering invalid action handlers': () => { - class StoreWithInvalidActionHandlers { - constructor() { - this.bindAction(myActions.THIS_DOES_NOT_EXIST, this.trololol); - } + 'dispatching from alt instance': () => { + const inst = new AltInstance(); + let called = false; + const listen = (x) => { + assert(x.action === inst.getActions('myActions').updateName, 'the action provided is correct'); + assert(x.data === 'yo', 'i can dispatch instances on my own'); + called = true; + }; - trololol() { } - } + const id = inst.dispatcher.register(listen); + inst.dispatch(inst.getActions('myActions').updateName, 'yo'); + inst.dispatcher.unregister(id); - assert.throw(() => { return alt.createStore(StoreWithInvalidActionHandlers); }, ReferenceError, 'Invalid action reference passed in'); + assert(called === true, 'listener was called'); + }, - class StoreWithInvalidActionHandlers2 { - constructor() { - this.bindAction(myActions.UPDATE_NAME, this.invisibleFunction); - } - } + 'emit change method works from the store': (done) => { + assert(myStore.getState().async === false, 'store async is false'); - assert.throw(() => { return alt.createStore(StoreWithInvalidActionHandlers2); }, TypeError, 'bindAction expects a function'); - }, + let dispose; + const listener = () => { + assert(myStore.getState().async === true, 'store async is true'); + dispose(); + done(); + }; - 'exporting invalid store methods': () => { - class StoreWithInvalidExportType { - constructor() { - this.foo = 'bar'; - this.exportPublicMethods({ foo: 'foo' }); - } - } + dispose = myStore.listen(listener); + myActions.asyncStoreAction(); + }, - assert.throw(() => { return alt.createStore(StoreWithInvalidExportType); }, TypeError, 'exportPublicMethods expects a function'); - }, + 'emit change method works with an isolated store': (done) => { + const newAlt = new Alt(); - 'waiting for nothing': () => { - class WaitPlease { - constructor() { - this.generateActions('pleaseWait'); - } - } - const waiter = alt.createActions(WaitPlease); - - alt.createStore(class WaitsForNobody { - constructor() { - this.bindActions(waiter); - } - - pleaseWait() { - this.waitFor(); - } - }); + function Actions() { + this.generateActions('test'); + } - assert.throw(() => { return waiter.pleaseWait(); }, ReferenceError, 'Dispatch tokens not provided'); - }, + const actions = newAlt.createActions(Actions); - 'cancelling emit': () => { - function eventEmittedFail() { - assert(true === false, 'event was emitted but I did not want it to be'); - } - const dispose = myStore.listen(eventEmittedFail); - myActions.dontEmit(); - dispose(); - assert(myStore.getState().dontEmitEventCalled === true, 'dont emit event was called successfully and event was not emitted'); - }, + class Store { + constructor() { + this.bindActions(actions); + this.test = false; + } - 'multiple deferrals': (done) => { - myActions.moreActions(); - assert(secondStore.getState().deferrals === 1, 'deferrals is initially set to 1'); + onTest() { setTimeout(() => { - assert(secondStore.getState().deferrals === 3, 'but deferrals ends up being set to 3 after all actions complete'); - done(); + this.test = true; + this.emitChange(); }); - }, - - recycling() { - alt.recycle(); - assert(myStore.getState().name === 'first', 'recycle sets the state back to its origin'); - - myActions.resetRecycled(); - assert(secondStore.getState().recycled === false, 'recycle const was reset due to action'); - alt.recycle(); - assert(secondStore.getState().recycled === true, 'init lifecycle method was called by recycling'); - }, - - flushing() { - myActions.updateName('goat'); - const flushed = JSON.parse(alt.flush()); - assert(myStore.getState().name === 'first', 'flush is a lot like recycle'); - assert(flushed.MyStore.name === 'goat', 'except that flush returns the state before recycling'); - - myActions.updateName('butterfly'); - assert(myStore.getState().name === 'butterfly', 'I can update the state again after a flush'); - assert(secondStore.getState().name === 'butterfly', 'I can update the state again after a flush'); - }, - - 'recycling single store': () => { - myActions.updateName('butterfly'); - alt.recycle('MyStore'); - assert(myStore.getState().name === 'first', 'I can recycle specific stores'); - assert(secondStore.getState().name === 'butterfly', 'and other stores will not be recycled'); - - myActions.updateName('butterfly'); - alt.recycle(myStore); - assert(myStore.getState().name === 'first', 'I can recycle specific stores'); - }, - - 'recycling invalid stores': () => { - assert.throw(() => { return alt.recycle('StoreThatDoesNotExist'); }, ReferenceError, 'StoreThatDoesNotExist is not a valid store'); - }, - - 'alt single instances': () => { - assert.instanceOf(altInstance, Alt, 'altInstance is an instance of alt'); - assert.isObject(altInstance.dispatcher, 'it has a dispatcher'); - assert.isFunction(altInstance.bootstrap, 'bootstrap function exists'); - assert.isFunction(altInstance.createActions, 'createActions function'); - assert.isFunction(altInstance.createStore, 'createStore function'); - - const myActionsFromInst = altInstance.getActions('myActions'); - assert.isObject(myActionsFromInst, 'the actions exist'); - - const fauxActions = altInstance.getActions('fauxActions'); - assert.isFunction(fauxActions.one, 'faux actions were generated'); - - const myActionsFail = altInstance.getActions('ActionsThatDontExist'); - assert.isUndefined(myActionsFail, 'undefined actions'); - - myActionsFromInst.updateName('lion'); - assert(altInstance.getStore('myStore').getState().name === 'lion', 'state was updated'); - assert(myStore.getState().name === 'first', 'and other singleton store was not affected'); - }, - - 'multiple alt instances': () => { - nameActions1.updateName('bar'); - nameActions2.updateName('baz'); - - assert(nameStore1.getState().name === 'bar', 'store 1 state is set'); - assert(nameStore2.getState().name === 'baz', 'this store has different state'); - assert(altInstance.getStore('myStore').getState().name === 'first', 'other stores not affected'); - assert(myStore.getState().name === 'first', 'other singleton store not affected'); - }, - - 'actions with the same name': () => { - const newAlt = new Alt(); - - function UserActions() { - this.generateActions('update'); - } - const ua = newAlt.createActions(UserActions); - - function LinkActions() { - this.generateActions('update'); - } - const la = newAlt.createActions(LinkActions); - - function Store() { - this.bindAction(ua.UPDATE, this.ua); - this.bindAction(la.UPDATE, this.la); - - this.a = 0; - this.b = 0; - } - - Store.prototype.ua = function protoUa() { - this.a = 1; - }; - - Store.prototype.la = function protoLa() { - this.b = 1; - }; - - const store = newAlt.createStore(Store); - - ua.update(); - la.update(); - - const state = store.getState(); - - assert(state.a === 1, 'both actions were called'); - assert(state.b === 1, 'both actions were called'); - }, - - 'actions with the same name and same class name': () => { - const newAlt = new Alt(); - - const ua = (function ua() { - function a() { this.generateActions('update'); } - return newAlt.createActions(a); - }()); - - const la = (function la() { - function a() { this.generateActions('update'); } - return newAlt.createActions(a); - }()); - - let uaOnce = 0; - let laOnce = 0; - - class Store { - constructor() { - this.bindAction(ua.UPDATE, this.ua); - this.bindAction(la.UPDATE, this.la); - - this.a = 0; - this.b = 0; - } - - ua() { - this.a = 1; - uaOnce += 1; - } - - la() { - this.b = 1; - laOnce += 1; - } - } - - const store = newAlt.createStore(Store); - - ua.update(); - la.update(); - - const state = store.getState(); - - assert(state.a === 1, 'both actions were called'); - assert(state.b === 1, 'both actions were called'); - assert.equal(uaOnce, 1, 'actions only called once'); - assert.equal(laOnce, 1, 'actions only called once'); - }, - - 'dispatching from alt instance': () => { - const inst = new AltInstance(); - let called = false; - const listen = (x) => { - assert(x.action === inst.getActions('myActions').updateName, 'the action provided is correct'); - assert(x.data === 'yo', 'i can dispatch instances on my own'); - called = true; - }; - - const id = inst.dispatcher.register(listen); - inst.dispatch(inst.getActions('myActions').updateName, 'yo'); - inst.dispatcher.unregister(id); - - assert(called === true, 'listener was called'); - }, - - 'emit change method works from the store': (done) => { - assert(myStore.getState().async === false, 'store async is false'); - - let dispose; - const listener = () => { - assert(myStore.getState().async === true, 'store async is true'); - dispose(); - done(); - }; - - dispose = myStore.listen(listener); - myActions.asyncStoreAction(); - }, - - 'emit change method works with an isolated store': (done) => { - const newAlt = new Alt(); + return false; + } + } - function Actions() { - this.generateActions('test'); - } + const store = newAlt.createStore(Store); - const actions = newAlt.createActions(Actions); + assert(store.getState().test === false, 'test is false'); - class Store { - constructor() { - this.bindActions(actions); - this.test = false; - } + let dispose; + const listener = () => { + assert(store.getState().test === true, 'test is true'); + dispose(); + done(); + }; - onTest() { - setTimeout(() => { - this.test = true; - this.emitChange(); - }); - return false; - } - } + dispose = store.listen(listener); + actions.test(); + }, - const store = newAlt.createStore(Store); + 'extending stores': () => { + const newAlt = new Alt(); - assert(store.getState().test === false, 'test is false'); + class Other { + constructor() { + this.foo = true; + } - let dispose; - const listener = () => { - assert(store.getState().test === true, 'test is true'); - dispose(); - done(); - }; + test() { return true; } + } - dispose = store.listen(listener); - actions.test(); - }, + class Store extends Other { + constructor() { + super(); + this.bar = true; + this.baz = super.test(); + } + } - 'extending stores': () => { - const newAlt = new Alt(); + const store = newAlt.createStore(Store); - class Other { - constructor() { - this.foo = true; - } + assert(store.getState().foo === true, 'store inherits properties'); + assert(store.getState().bar === true, 'store properties are available'); + assert(store.getState().baz === true, 'inherited methods can be called'); + }, - test() { return true; } - } + 'exporting public method of ancestor': () => { + class StoreBase { + baseMethod() { + return true; + } + } - class Store extends Other { - constructor() { - super(); - this.bar = true; - this.baz = super.test(); - } - } + class Store extends StoreBase { + constructor() { + super(); + this.exportPublicMethods({ + baseMethod: this.baseMethod + }); + } + } - const store = newAlt.createStore(Store); + const store = alt.createStore(Store); - assert(store.getState().foo === true, 'store inherits properties'); - assert(store.getState().bar === true, 'store properties are available'); - assert(store.getState().baz === true, 'inherited methods can be called'); - }, + assert.isFunction(store.baseMethod, 'ancestor methods via export mixin are made available'); + }, - 'exporting public method of ancestor': () => { - class StoreBase { - baseMethod() { - return true; - } - } - - class Store extends StoreBase { - constructor() { - super(); - this.exportPublicMethods({ - baseMethod: this.baseMethod - }); - } - } - - const store = alt.createStore(Store); - - assert.isFunction(store.baseMethod, 'ancestor methods via export mixin are made available'); - }, + 'binding a listener that does not exist': () => { + class BadListenerStore { + constructor() { + this.bindListeners({ + methodThatDoesNotExist: myActions.updateName + }); + } + } - 'binding a listener that does not exist': () => { - class BadListenerStore { - constructor() { - this.bindListeners({ - methodThatDoesNotExist: myActions.updateName - }); - } - } + assert.throw(() => { return alt.createStore(BadListenerStore); }, ReferenceError, 'methodThatDoesNotExist defined but does not exist in BadListenerStore'); + }, - assert.throw(() => { return alt.createStore(BadListenerStore); }, ReferenceError, 'methodThatDoesNotExist defined but does not exist in BadListenerStore'); - }, + 'binding listeners to action that does not exist': () => { + class BadListenerStore { + constructor() { + this.bindListeners({ + foo: myActions.trolololololol + }); + } - 'binding listeners to action that does not exist': () => { - class BadListenerStore { - constructor() { - this.bindListeners({ - foo: myActions.trolololololol - }); - } + foo() { } + } - foo() { } - } + assert.throw(() => { return alt.createStore(BadListenerStore); }, ReferenceError, 'Invalid action reference passed in'); + }, - assert.throw(() => { return alt.createStore(BadListenerStore); }, ReferenceError, 'Invalid action reference passed in'); - }, + 'do not include store in snapshots': () => { + function NoBootstrap() { } - 'do not include store in snapshots': () => { - function NoBootstrap() { } + alt.createUnsavedStore(NoBootstrap, 'NoBootstrap'); - alt.createUnsavedStore(NoBootstrap, 'NoBootstrap'); + let snapshot = JSON.parse(alt.takeSnapshot()); - let snapshot = JSON.parse(alt.takeSnapshot()); + assert.isUndefined(snapshot.NoBootstrap, 'Store does not exist in snapshots'); + assert.isObject(snapshot.AltSecondStore, 'AltSecondStore exists'); - assert.isUndefined(snapshot.NoBootstrap, 'Store does not exist in snapshots'); - assert.isObject(snapshot.AltSecondStore, 'AltSecondStore exists'); + alt.createUnsavedStore({ + displayName: 'NoBootstrapObject' + }); - alt.createUnsavedStore({ - displayName: 'NoBootstrapObject' - }); + snapshot = JSON.parse(alt.takeSnapshot()); - snapshot = JSON.parse(alt.takeSnapshot()); + assert.isUndefined(snapshot.NoBootstrapObject, 'Store does not exist in snapshots'); + assert.isObject(snapshot.AltSecondStore, 'AltSecondStore exists'); + }, - assert.isUndefined(snapshot.NoBootstrapObject, 'Store does not exist in snapshots'); - assert.isObject(snapshot.AltSecondStore, 'AltSecondStore exists'); - }, + 'actions with no name are still ok': () => { + const actions = alt.createActions(function createActionsTest() { + this.generateActions('foo'); + }); - 'actions with no name are still ok': () => { - const actions = alt.createActions(function createActionsTest() { - this.generateActions('foo'); - }); + assert.isFunction(actions.foo, 'action still exists'); + }, - assert.isFunction(actions.foo, 'action still exists'); - }, + 'recycle store that does not exist': () => { + assert.doesNotThrow(() => { + alt.bootstrap('{"AStoreThatIJustMadeUpButDoesNotReallyExist": {}}'); + }); + }, - 'recycle store that does not exist': () => { - assert.doesNotThrow(() => { - alt.bootstrap('{"AStoreThatIJustMadeUpButDoesNotReallyExist": {}}'); - }); - }, + 'creating one off actions': () => { + const action = alt.createAction('hello', (x) => { + return x; + }); - 'creating one off actions': () => { - const action = alt.createAction('hello', (x) => { - return x; - }); + const store = alt.createStore({ + displayName: 'just testing', + state: { x: 0 }, + bindListeners: { + hello: action + }, + hello(x) { this.state.x = x; } + }); - const store = alt.createStore({ - displayName: 'just testing', - state: { x: 0 }, - bindListeners: { - hello: action - }, - hello(x) { this.state.x = x; } - }); + assert.isFunction(action, 'action was created'); - assert.isFunction(action, 'action was created'); + action(1); - action(1); + assert(store.getState().x === 1, 'action fires correctly'); + }, - assert(store.getState().x === 1, 'action fires correctly'); - }, + 'setState emits a change if not dispatching': (done) => { + const newAlt = new Alt(); - 'setState emits a change if not dispatching': (done) => { - const newAlt = new Alt(); - - const actions = newAlt.generateActions('fire'); - - const store = newAlt.createStore(class Store { - constructor() { - this.bindActions(actions); - this.test = false; - } - - fire() { - setTimeout(() => { - this.setState({ - test: true - }); - }); - return false; - } - }); + const actions = newAlt.generateActions('fire'); - assert(store.getState().test === false); + const store = newAlt.createStore(class Store { + constructor() { + this.bindActions(actions); + this.test = false; + } - const unlisten = store.listen((state) => { - assert(state.test === true); - unlisten(); - done(); + fire() { + setTimeout(() => { + this.setState({ + test: true + }); }); + return false; + } + }); + + assert(store.getState().test === false); + + const unlisten = store.listen((state) => { + assert(state.test === true); + unlisten(); + done(); + }); + + actions.fire(); + }, + + 'prepare a payload for bootstrap': () => { + const serialized = alt.prepare(myStore, { a: 1, b: 2 }); + const parsed = JSON.parse(serialized); + + assert.isString(serialized); + assert.isObject(parsed.MyStore); + assert(parsed.MyStore.a === 1); + assert(parsed.MyStore.b === 2); + assert.isUndefined(parsed.MyStore.c); + + assert.throws(() => { + alt.prepare({}, { x: 0 }); + }, ReferenceError); + }, + + 'async dispatches': (done) => { + const AsyncAction = alt.createActions({ + displayName: 'AsyncAction', + fire(x) { + return (dispatch) => { + dispatch(x); + }; + } + }); - actions.fire(); - }, + const token = alt.dispatcher.register((payload) => { + assert(payload.action === 'AsyncAction.fire'); + assert(payload.data === 2); + alt.dispatcher.unregister(token); + done(); + }); - 'prepare a payload for bootstrap': () => { - const serialized = alt.prepare(myStore, { a: 1, b: 2 }); - const parsed = JSON.parse(serialized); + AsyncAction.fire(2); + }, - assert.isString(serialized); - assert.isObject(parsed.MyStore); - assert(parsed.MyStore.a === 1); - assert(parsed.MyStore.b === 2); - assert.isUndefined(parsed.MyStore.c); + 'listen expects function': () => { + assert.throws(() => { + myStore.listen(null); + }, TypeError, 'listen expects a function'); + }, - assert.throws(() => { - alt.prepare({}, { x: 0 }); - }, ReferenceError); - }, + 'lots of listens': () => { + const ImportKeysActions = alt.generateActions('change', 'saved'); - 'async dispatches': (done) => { - const AsyncAction = alt.createActions({ - displayName: 'AsyncAction', - fire(x) { - return (dispatch) => { - dispatch(x); - }; - } - }); + const call = sinon.spy(); - const token = alt.dispatcher.register((payload) => { - assert(payload.action === 'AsyncAction.fire'); - assert(payload.data === 2); - alt.dispatcher.unregister(token); - done(); + const BalanceClaimStore = alt.createStore(class { //eslint-disable-line + constructor() { + this.bindListeners({ + onRefreshBalanceClaims: ImportKeysActions.saved, + onLoadMyAccounts: [ + ImportKeysActions.change, ImportKeysActions.saved + ] }); + } - AsyncAction.fire(2); - }, - - 'listen expects function': () => { - assert.throws(() => { - myStore.listen(null); - }, TypeError, 'listen expects a function'); - }, - - 'lots of listens': () => { - const ImportKeysActions = alt.generateActions('change', 'saved'); - - const call = sinon.spy(); + onRefreshBalanceClaims() { + call(); + } - const BalanceClaimStore = alt.createStore(class { //eslint-disable-line - constructor() { - this.bindListeners({ - onRefreshBalanceClaims: ImportKeysActions.saved, - onLoadMyAccounts: [ - ImportKeysActions.change, ImportKeysActions.saved - ] - }); - } - - onRefreshBalanceClaims() { - call(); - } - - onLoadMyAccounts() { - call(); - } - }); + onLoadMyAccounts() { + call(); + } + }); - ImportKeysActions.saved(); + ImportKeysActions.saved(); - assert(call.calledTwice, 'multiple action handlers are ok'); - }, + assert(call.calledTwice, 'multiple action handlers are ok'); + }, - 'dispatching action creators': () => { - const action = { - id: 'hello', - dispatch(data) { - return data; - } - }; + 'dispatching action creators': () => { + const action = { + id: 'hello', + dispatch(data) { + return data; + } + }; - const newAlt = new Alt(); + const newAlt = new Alt(); - class Store { - constructor() { - this.bindAction(action, this.hello.bind(this)); - this.state = { x: null }; - } + class Store { + constructor() { + this.bindAction(action, this.hello.bind(this)); + this.state = { x: null }; + } - hello(data) { - this.setState({ x: data }); - } - } + hello(data) { + this.setState({ x: data }); + } + } - const store = newAlt.createStore(Store); + const store = newAlt.createStore(Store); - assert(store.getState().x === null, 'x is null'); + assert(store.getState().x === null, 'x is null'); - newAlt.dispatch(action, 3); + newAlt.dispatch(action, 3); - assert(store.getState().x === 3, '3 was dispatched'); + assert(store.getState().x === 3, '3 was dispatched'); - newAlt.dispatch(action, 4); + newAlt.dispatch(action, 4); - assert(store.getState().x === 4, '4 was dispatched'); + assert(store.getState().x === 4, '4 was dispatched'); - newAlt.dispatch(action, undefined); + newAlt.dispatch(action, undefined); - assert(store.getState().x === 4, 'undefined means it wont dispatch'); - }, + assert(store.getState().x === 4, 'undefined means it wont dispatch'); + }, - 'dispatching async action creators': (done) => { - const action = { - id: 'hello', - dispatch() { - return (dispatch) => { return dispatch(done); }; - } - }; + 'dispatching async action creators': (done) => { + const action = { + id: 'hello', + dispatch() { + return (dispatch) => { return dispatch(done); }; + } + }; - const newAlt = new Alt(); + const newAlt = new Alt(); - class Store { - constructor() { - this.bindAction(action, this.hello); - } + class Store { + constructor() { + this.bindAction(action, this.hello); + } - hello(cb) { - cb(); - } - } + hello(cb) { + cb(); + } + } - newAlt.createStore(Store); - newAlt.dispatch(action); - }, + newAlt.createStore(Store); + newAlt.dispatch(action); + }, - 'is fsa': (done) => { - const res = alt.dispatcher.register((x) => { - assert.isDefined(x.type, 'there is a type'); - assert.isDefined(x.payload, 'there is a payload'); - assert.isDefined(x.meta, 'meta exists'); - assert.isString(x.meta.dispatchId, 'meta contains a unique dispatch id'); + 'is fsa': (done) => { + const res = alt.dispatcher.register((x) => { + assert.isDefined(x.type, 'there is a type'); + assert.isDefined(x.payload, 'there is a payload'); + assert.isDefined(x.meta, 'meta exists'); + assert.isString(x.meta.dispatchId, 'meta contains a unique dispatch id'); - assert(x.payload === 'Jane', 'the payload is correct'); + assert(x.payload === 'Jane', 'the payload is correct'); - alt.dispatcher.unregister(res); + alt.dispatcher.unregister(res); - done(); - }); + done(); + }); - myActions.updateName('Jane'); - }, + myActions.updateName('Jane'); + }, - 'can dispatch fsa': (done) => { - const res = alt.dispatcher.register((x) => { - assert.isDefined(x.type, 'there is a type'); - assert(x.type === 'owl'); - assert.isDefined(x.payload, 'there is a payload'); - assert(x.payload === 'Tawny'); - assert.isString(x.meta.dispatchId, 'meta contains a unique dispatch id'); + 'can dispatch fsa': (done) => { + const res = alt.dispatcher.register((x) => { + assert.isDefined(x.type, 'there is a type'); + assert(x.type === 'owl'); + assert.isDefined(x.payload, 'there is a payload'); + assert(x.payload === 'Tawny'); + assert.isString(x.meta.dispatchId, 'meta contains a unique dispatch id'); - alt.dispatcher.unregister(res); + alt.dispatcher.unregister(res); - done(); - }); + done(); + }); - alt.dispatch({ type: 'owl', payload: 'Tawny' }); - } + alt.dispatch({ type: 'owl', payload: 'Tawny' }); + } }; export default tests; diff --git a/test/setting-state.js b/test/setting-state.js index 162a6a12..9da57f60 100644 --- a/test/setting-state.js +++ b/test/setting-state.js @@ -7,145 +7,145 @@ const alt = new Alt(); const actions = alt.generateActions('fire', 'nothing'); class MyStore { - constructor() { - this.foo = 1; - this.bindListeners({ increment: actions.FIRE, nothing: actions.NOTHING }); - } - - increment() { - this.retVal = this.setState({ foo: this.foo + 1 }); - return this.retVal; - } - - nothing() { - this.setState(); - } + constructor() { + this.foo = 1; + this.bindListeners({ increment: actions.FIRE, nothing: actions.NOTHING }); + } + + increment() { + this.retVal = this.setState({ foo: this.foo + 1 }); + return this.retVal; + } + + nothing() { + this.setState(); + } } const myStore = alt.createStore(MyStore); export default { - setState: { - beforeEach() { - alt.recycle(); - }, - - 'using setState to set the state': function () { - const spy = sinon.spy(); - const dispose = myStore.listen(spy); - - actions.fire(); - - assert(myStore.getState().foo === 2, 'foo was incremented'); - assert.isUndefined(myStore.getState().retVal, 'return value of setState is undefined'); - - dispose(); - - // calling set state without anything doesn't make things crash and burn - actions.nothing(); - - assert.ok(spy.calledOnce, 'spy was only called once'); - }, - - 'by using setState a change event is not emitted twice': function () { - const spy = sinon.spy(); - const dispose = myStore.listen(spy); - - actions.nothing(); - - assert(myStore.getState().foo === 1, 'foo remains the same'); - - assert.ok(spy.calledOnce, 'spy was only called once'); - - dispose(); - }, - - 'transactional setState': function () { - const newAlt = new Alt(); - - const newActions = newAlt.generateActions('fire'); - class SetState { - constructor() { - this.bindActions(actions); - this.x = 0; - } - - fire() { - this.setState(() => { - return { - x: 1 - }; - }); - } - } - - const store = newAlt.createStore(SetState); - - assert(store.getState().x === 0, 'x is initially 0'); - newActions.fire(); - assert(store.getState().x === 1, 'x is 1'); - }, - - 'transactional setState with failure': function () { - const newAlt = new Alt(); - - const newActions = newAlt.generateActions('fire'); - class SetState { - constructor() { - this.bindActions(actions); - this.x = 0; - } - - fire() { - this.setState(() => { - throw new Error('error'); - }); - } - } - - const store = newAlt.createStore(SetState); - - assert(store.getState().x === 0, 'x is initially 0'); - assert.throws(() => { return newActions.fire(); }); - assert(store.getState().x === 0, 'x remains 0'); - }, - - 'setState no dispatch': function () { - const newAlt = new Alt(); - - newAlt.generateActions('fire'); - class BrokenSetState { - constructor() { - this.x = 0; - this.setState({ x: 1 }); - } - } - - assert.throws(() => { - newAlt.createStore(BrokenSetState); - }); - }, - - 'state is set not replaced': function () { - const newAlt = new Alt(); - const newActions = newAlt.generateActions('fire'); - class SetState { - constructor() { - this.bindActions(newActions); - this.x = 0; - this.y = 0; - } - - fire() { - this.setState({ x: 1 }); - } - } - const store = newAlt.createStore(SetState); - - assert(store.getState().x === 0, 'x is initially 0'); - newActions.fire(); - assert(store.getState().x === 1, 'x is now 1'); - assert(store.getState().y === 0, 'y was untouched'); + setState: { + beforeEach() { + alt.recycle(); + }, + + 'using setState to set the state': function () { + const spy = sinon.spy(); + const dispose = myStore.listen(spy); + + actions.fire(); + + assert(myStore.getState().foo === 2, 'foo was incremented'); + assert.isUndefined(myStore.getState().retVal, 'return value of setState is undefined'); + + dispose(); + + // calling set state without anything doesn't make things crash and burn + actions.nothing(); + + assert.ok(spy.calledOnce, 'spy was only called once'); + }, + + 'by using setState a change event is not emitted twice': function () { + const spy = sinon.spy(); + const dispose = myStore.listen(spy); + + actions.nothing(); + + assert(myStore.getState().foo === 1, 'foo remains the same'); + + assert.ok(spy.calledOnce, 'spy was only called once'); + + dispose(); + }, + + 'transactional setState': function () { + const newAlt = new Alt(); + + const newActions = newAlt.generateActions('fire'); + class SetState { + constructor() { + this.bindActions(actions); + this.x = 0; } + + fire() { + this.setState(() => { + return { + x: 1 + }; + }); + } + } + + const store = newAlt.createStore(SetState); + + assert(store.getState().x === 0, 'x is initially 0'); + newActions.fire(); + assert(store.getState().x === 1, 'x is 1'); + }, + + 'transactional setState with failure': function () { + const newAlt = new Alt(); + + const newActions = newAlt.generateActions('fire'); + class SetState { + constructor() { + this.bindActions(actions); + this.x = 0; + } + + fire() { + this.setState(() => { + throw new Error('error'); + }); + } + } + + const store = newAlt.createStore(SetState); + + assert(store.getState().x === 0, 'x is initially 0'); + assert.throws(() => { return newActions.fire(); }); + assert(store.getState().x === 0, 'x remains 0'); + }, + + 'setState no dispatch': function () { + const newAlt = new Alt(); + + newAlt.generateActions('fire'); + class BrokenSetState { + constructor() { + this.x = 0; + this.setState({ x: 1 }); + } + } + + assert.throws(() => { + newAlt.createStore(BrokenSetState); + }); + }, + + 'state is set not replaced': function () { + const newAlt = new Alt(); + const newActions = newAlt.generateActions('fire'); + class SetState { + constructor() { + this.bindActions(newActions); + this.x = 0; + this.y = 0; + } + + fire() { + this.setState({ x: 1 }); + } + } + const store = newAlt.createStore(SetState); + + assert(store.getState().x === 0, 'x is initially 0'); + newActions.fire(); + assert(store.getState().x === 1, 'x is now 1'); + assert(store.getState().y === 0, 'y was untouched'); } + } }; diff --git a/test/store-as-a-module.js b/test/store-as-a-module.js index 1d337bdf..3f12d003 100644 --- a/test/store-as-a-module.js +++ b/test/store-as-a-module.js @@ -7,17 +7,17 @@ const actions = alt.generateActions('increment'); const store = alt.createStore(StoreModel); export default { - 'Stores as a Module': { - 'store state is there': function () { - assert.equal(store.getState(), 1, 'store data is initialized to 1'); + 'Stores as a Module': { + 'store state is there': function () { + assert.equal(store.getState(), 1, 'store data is initialized to 1'); - actions.increment(); + actions.increment(); - assert.equal(store.getState(), 2, 'store data was updated'); + assert.equal(store.getState(), 2, 'store data was updated'); - actions.increment(); + actions.increment(); - assert.equal(store.getState(), 3, 'incremented again'); - } + assert.equal(store.getState(), 3, 'incremented again'); } + } }; diff --git a/test/store-model-test.js b/test/store-model-test.js index fb87fef4..34e29b5b 100644 --- a/test/store-model-test.js +++ b/test/store-model-test.js @@ -5,60 +5,60 @@ const alt = new Alt(); const Actions = alt.generateActions('hello'); function MyStoreModel() { - this.bindActions(Actions); + this.bindActions(Actions); - this.test = 2; + this.test = 2; } MyStoreModel.prototype.onHello = function () { this.test = 1; }; const MyStoreModelObj = { - displayName: 'MyStoreAsObject', + displayName: 'MyStoreAsObject', - state: { test: 2 }, + state: { test: 2 }, - bindListeners: { - onHello: Actions.HELLO - }, + bindListeners: { + onHello: Actions.HELLO + }, - onHello() { - this.state.test = 1; - } + onHello() { + this.state.test = 1; + } }; export default { - 'Exposing the StoreModel': { - beforeEach() { - alt.recycle(); - }, + 'Exposing the StoreModel': { + beforeEach() { + alt.recycle(); + }, - 'as an object': function () { - const MyStore = alt.createStore(MyStoreModelObj); + 'as an object': function () { + const MyStore = alt.createStore(MyStoreModelObj); - assert(MyStore.getState().test === 2, 'store state is initially set'); + assert(MyStore.getState().test === 2, 'store state is initially set'); - assert.isDefined(MyStore.StoreModel, 'store model is available'); - assert.isObject(MyStore.StoreModel, 'store model is an object'); + assert.isDefined(MyStore.StoreModel, 'store model is available'); + assert.isObject(MyStore.StoreModel, 'store model is an object'); - assert(MyStore.StoreModel === MyStoreModelObj, 'the store model is the same as the original object'); + assert(MyStore.StoreModel === MyStoreModelObj, 'the store model is the same as the original object'); - Actions.hello(); + Actions.hello(); - assert(MyStore.getState().test === 1, 'i can change state through actions'); - }, + assert(MyStore.getState().test === 1, 'i can change state through actions'); + }, - 'as a class': function () { - const MyStore = alt.createStore(MyStoreModel, 'MyStore'); + 'as a class': function () { + const MyStore = alt.createStore(MyStoreModel, 'MyStore'); - assert(MyStore.getState().test === 2, 'store state is initially set'); + assert(MyStore.getState().test === 2, 'store state is initially set'); - assert.isDefined(MyStore.StoreModel, 'store model is available'); - assert.isFunction(MyStore.StoreModel, 'store model is a function'); + assert.isDefined(MyStore.StoreModel, 'store model is available'); + assert.isFunction(MyStore.StoreModel, 'store model is a function'); - assert(MyStore.StoreModel === MyStoreModel, 'the store model is the same as the original object'); + assert(MyStore.StoreModel === MyStoreModel, 'the store model is the same as the original object'); - Actions.hello(); + Actions.hello(); - assert(MyStore.getState().test === 1, 'i can change state through actions'); - } + assert(MyStore.getState().test === 1, 'i can change state through actions'); } + } }; diff --git a/test/store-transforms-test.js b/test/store-transforms-test.js index a474ca1e..ff5a0f2b 100644 --- a/test/store-transforms-test.js +++ b/test/store-transforms-test.js @@ -4,28 +4,28 @@ import Alt from '../dist/alt-with-runtime'; const alt = new Alt(); alt.storeTransforms.push((Store) => { - Store.test = 'hello'; - return Store; + Store.test = 'hello'; + return Store; }); class Store { - constructor() { - this.x = 0; - } + constructor() { + this.x = 0; + } } export default { - 'store transforms': { - 'when creating stores alt goes through its series of transforms': function () { - const store = alt.createStore(Store); - assert(alt.storeTransforms.length === 1); - assert.isDefined(store.test); - assert(store.test === 'hello', 'store that adds hello to instance transform'); - }, + 'store transforms': { + 'when creating stores alt goes through its series of transforms': function () { + const store = alt.createStore(Store); + assert(alt.storeTransforms.length === 1); + assert.isDefined(store.test); + assert(store.test === 'hello', 'store that adds hello to instance transform'); + }, - 'unsaved stores get the same treatment': function () { - const store2 = alt.createUnsavedStore(Store); - assert.isDefined(store2.test); - } + 'unsaved stores get the same treatment': function () { + const store2 = alt.createUnsavedStore(Store); + assert.isDefined(store2.test); } + } }; diff --git a/test/stores-get-alt.js b/test/stores-get-alt.js index 618435be..8637fe0f 100644 --- a/test/stores-get-alt.js +++ b/test/stores-get-alt.js @@ -4,23 +4,23 @@ import Alt from '../dist/alt-with-runtime'; const alt = new Alt(); export default { - 'the stores get the alt instance': function () { - class MyStore { - constructor(altInstace) { - assert.instanceOf(altInstace, Alt, 'alt is an instance of Alt'); - } - } - - alt.createStore(MyStore, 'MyStore', alt); - }, + 'the stores get the alt instance': function () { + class MyStore { + constructor(altInstace) { + assert.instanceOf(altInstace, Alt, 'alt is an instance of Alt'); + } + } - 'the actions get the alt instance': function () { - class MyActions { - constructor(altInstace) { - assert.instanceOf(altInstace, Alt, 'alt is an instance of Alt'); - } - } + alt.createStore(MyStore, 'MyStore', alt); + }, - alt.createActions(MyActions, undefined, alt); + 'the actions get the alt instance': function () { + class MyActions { + constructor(altInstace) { + assert.instanceOf(altInstace, Alt, 'alt is an instance of Alt'); + } } + + alt.createActions(MyActions, undefined, alt); + } }; diff --git a/test/stores-with-colliding-names.js b/test/stores-with-colliding-names.js index 328834c5..2dcd4eb0 100644 --- a/test/stores-with-colliding-names.js +++ b/test/stores-with-colliding-names.js @@ -7,37 +7,37 @@ const alt = new Alt(); alt.createStore(function MyStore() {}); //eslint-disable-line export default { - 'console warn for missing identifier': { - beforeEach() { - console.warn = sinon.stub(); - console.warn.returnsArg(0); - }, - - 'stores with colliding names': function () { - const myStore = (function () { - return function MyStore() { }; - }()); - alt.createStore(myStore); - - assert.isObject(alt.stores.MyStore1, 'a store was still created'); - }, - - 'colliding names via identifier': function () { - class auniquestore { } - alt.createStore(auniquestore, 'MyStore'); - - assert.isObject(alt.stores.MyStore1, 'a store was still created'); - }, - - 'not providing a store name via anonymous function': function () { - alt.createStore(() => { }); - - assert.isObject(alt.stores[''], 'a store with no name was still created'); - }, - - afterEach() { - assert.ok(console.warn.calledOnce, 'the warning was called'); - assert.instanceOf(console.warn.returnValues[0], ReferenceError, 'value returned is an instanceof referenceerror'); - } + 'console warn for missing identifier': { + beforeEach() { + console.warn = sinon.stub(); + console.warn.returnsArg(0); + }, + + 'stores with colliding names': function () { + const myStore = (function () { + return function MyStore() { }; + }()); + alt.createStore(myStore); + + assert.isObject(alt.stores.MyStore1, 'a store was still created'); + }, + + 'colliding names via identifier': function () { + class auniquestore { } + alt.createStore(auniquestore, 'MyStore'); + + assert.isObject(alt.stores.MyStore1, 'a store was still created'); + }, + + 'not providing a store name via anonymous function': function () { + alt.createStore(() => { }); + + assert.isObject(alt.stores[''], 'a store with no name was still created'); + }, + + afterEach() { + assert.ok(console.warn.calledOnce, 'the warning was called'); + assert.instanceOf(console.warn.returnValues[0], ReferenceError, 'value returned is an instanceof referenceerror'); } + } }; diff --git a/test/value-stores-test.js b/test/value-stores-test.js index 75b31823..b70e0a77 100644 --- a/test/value-stores-test.js +++ b/test/value-stores-test.js @@ -6,72 +6,72 @@ const alt = new Alt(); const actions = alt.generateActions('fire'); const store = alt.createStore({ - state: 21, - displayName: 'ValueStore', - reduce(state, payload) { - return state + 1; - } + state: 21, + displayName: 'ValueStore', + reduce(state, payload) { + return state + 1; + } }); const store2 = alt.createStore({ - state: [1, 2, 3], - displayName: 'Value2Store', - reduce(state, payload) { - return state.concat(state[state.length - 1] + 1); - } + state: [1, 2, 3], + displayName: 'Value2Store', + reduce(state, payload) { + return state.concat(state[state.length - 1] + 1); + } }); const store3 = alt.createStore({ - state: 21, - displayName: 'ValueStore3', - bindListeners: { - fire: actions.fire - }, - fire() { - this.setState(this.state + 1); - } + state: 21, + displayName: 'ValueStore3', + bindListeners: { + fire: actions.fire + }, + fire() { + this.setState(this.state + 1); + } }); export default { - 'value stores': { - beforeEach() { - alt.recycle(); - }, + 'value stores': { + beforeEach() { + alt.recycle(); + }, - 'stores can contain state as any value': function (done) { - assert(store.state === 21, 'store state is value'); - assert(store.getState() === 21, 'getState returns value too'); + 'stores can contain state as any value': function (done) { + assert(store.state === 21, 'store state is value'); + assert(store.getState() === 21, 'getState returns value too'); - const unlisten = store.listen((state) => { - assert(state === 22, 'incremented store state'); - unlisten(); - done(); - }); + const unlisten = store.listen((state) => { + assert(state === 22, 'incremented store state'); + unlisten(); + done(); + }); - assert(JSON.parse(alt.takeSnapshot()).ValueStore === 21, 'snapshot ok'); + assert(JSON.parse(alt.takeSnapshot()).ValueStore === 21, 'snapshot ok'); - actions.fire(); - }, + actions.fire(); + }, - 'stores can contain state as any value (non reduce)': function (done) { - assert(store3.state === 21, 'store state is value'); - assert(store3.getState() === 21, 'getState returns value too'); + 'stores can contain state as any value (non reduce)': function (done) { + assert(store3.state === 21, 'store state is value'); + assert(store3.getState() === 21, 'getState returns value too'); - const unlisten = store3.listen((state) => { - assert(state === 22, 'incremented store state'); - unlisten(); - done(); - }); + const unlisten = store3.listen((state) => { + assert(state === 22, 'incremented store state'); + unlisten(); + done(); + }); - assert(JSON.parse(alt.takeSnapshot()).ValueStore3 === 21, 'snapshot ok'); + assert(JSON.parse(alt.takeSnapshot()).ValueStore3 === 21, 'snapshot ok'); - actions.fire(); - }, + actions.fire(); + }, - 'store with array works too': function () { - assert.deepEqual(store2.state, [1, 2, 3]); - actions.fire(); - assert.deepEqual(store2.state, [1, 2, 3, 4]); - } + 'store with array works too': function () { + assert.deepEqual(store2.state, [1, 2, 3]); + actions.fire(); + assert.deepEqual(store2.state, [1, 2, 3, 4]); } + } }; From 4e0863fce56b0e9a0b0aedb2bf4ebb6cbfb33738 Mon Sep 17 00:00:00 2001 From: Ryan Date: Thu, 9 Nov 2017 16:20:52 -0500 Subject: [PATCH 15/21] Update to fix a few other files that were touched. --- dist.config.js | 34 +++++++-------- dist.min.config.js | 34 +++++++-------- web/scripts/createIndex.js | 84 +++++++++++++++++++------------------- web/scripts/search.js | 4 +- web/webpack.config.js | 38 ++++++++--------- 5 files changed, 97 insertions(+), 97 deletions(-) diff --git a/dist.config.js b/dist.config.js index 7fd27a7c..c5e45d1a 100644 --- a/dist.config.js +++ b/dist.config.js @@ -1,19 +1,19 @@ module.exports = { - context: `${__dirname}/src`, - entry: { - alt: ['./index.js'], - }, - output: { - path: `${__dirname}/dist`, - filename: '[name].js', - library: 'Alt', - libraryTarget: 'umd', - }, - module: { - loaders: [{ - test: /\.js$/, - loader: 'babel-loader', - exclude: /node_modules/, - }], - }, + context: `${__dirname}/src`, + entry: { + alt: ['./index.js'] + }, + output: { + path: `${__dirname}/dist`, + filename: '[name].js', + library: 'Alt', + libraryTarget: 'umd' + }, + module: { + loaders: [{ + test: /\.js$/, + loader: 'babel-loader', + exclude: /node_modules/ + }] + } }; diff --git a/dist.min.config.js b/dist.min.config.js index b9a46ec9..73629fd8 100644 --- a/dist.min.config.js +++ b/dist.min.config.js @@ -1,19 +1,19 @@ module.exports = { - context: `${__dirname}/src`, - entry: { - alt: ['./index.js'], - }, - output: { - path: `${__dirname}/dist`, - filename: '[name].min.js', - library: 'Alt', - libraryTarget: 'umd', - }, - module: { - loaders: [{ - test: /\.js$/, - loader: 'babel-loader', - exclude: /node_modules/, - }], - }, + context: `${__dirname}/src`, + entry: { + alt: ['./index.js'] + }, + output: { + path: `${__dirname}/dist`, + filename: '[name].min.js', + library: 'Alt', + libraryTarget: 'umd' + }, + module: { + loaders: [{ + test: /\.js$/, + loader: 'babel-loader', + exclude: /node_modules/ + }] + } }; diff --git a/web/scripts/createIndex.js b/web/scripts/createIndex.js index 616b69ce..c37b3503 100644 --- a/web/scripts/createIndex.js +++ b/web/scripts/createIndex.js @@ -3,67 +3,67 @@ const path = require('path'); const lunr = require('lunr'); //eslint-disable-line const index = lunr(function () { - this.field('title', { boost: 10 }); - this.field('description', { boost: 5 }); - this.field('body'); - this.field('layout'); - this.field('permalink'); + this.field('title', { boost: 10 }); + this.field('description', { boost: 5 }); + this.field('body'); + this.field('layout'); + this.field('permalink'); }); function addDocument(name, idx) { - const markdown = String(fs.readFileSync(name)).split('---'); + const markdown = String(fs.readFileSync(name)).split('---'); - const topdoc = markdown[1]; + const topdoc = markdown[1]; - const body = markdown.slice(2, markdown.length).join(''); + const body = markdown.slice(2, markdown.length).join(''); - const doc = topdoc - .split('\n') - .filter(Boolean) - .reduce((obj, prop) => { - const keyVal = prop.split(':'); - obj[keyVal[0]] = keyVal[1].trim(); - return obj; - }, { id: idx, body }); + const doc = topdoc + .split('\n') + .filter(Boolean) + .reduce((obj, prop) => { + const keyVal = prop.split(':'); + obj[keyVal[0]] = keyVal[1].trim(); + return obj; + }, { id: idx, body }); - index.add(doc); + index.add(doc); - return { - id: doc.id, - title: doc.title, - description: doc.description, - body: doc.body, - permalink: doc.permalink - }; + return { + id: doc.id, + title: doc.title, + description: doc.description, + body: doc.body, + permalink: doc.permalink + }; } function isDir(fullpath) { - try { - return fs.statSync(fullpath).isDirectory(); - } catch (err) { - return null; - } + try { + return fs.statSync(fullpath).isDirectory(); + } catch (err) { + return null; + } } function fromDirectory(dir) { - return fs.readdirSync(dir).reduce((dirs, file) => { - const fullpath = path.join(dir, file); - if (isDir(fullpath)) { - dirs.push(...fromDirectory(path.join(fullpath))); - } else if (/.md$/.test(file)) { - dirs.push(fullpath); - } - return dirs; - }, []); + return fs.readdirSync(dir).reduce((dirs, file) => { + const fullpath = path.join(dir, file); + if (isDir(fullpath)) { + dirs.push(...fromDirectory(path.join(fullpath))); + } else if (/.md$/.test(file)) { + dirs.push(fullpath); + } + return dirs; + }, []); } const documents = fromDirectory('../docs') - .concat(fromDirectory('../guides')) - .map(addDocument); + .concat(fromDirectory('../guides')) + .map(addDocument); const searchData = { - docs: documents, - index: index.toJSON() + docs: documents, + index: index.toJSON() }; fs.writeFileSync('./assets/search.json', JSON.stringify(searchData)); diff --git a/web/scripts/search.js b/web/scripts/search.js index c292dcb5..5a38b637 100644 --- a/web/scripts/search.js +++ b/web/scripts/search.js @@ -5,10 +5,10 @@ import ReactDOM from 'react-dom'; //eslint-disable-line const github = /goatslacker.github.io\/alt/; if (github.test(location.href)) { - location.href = location.href.replace(github, 'alt.js.org'); + location.href = location.href.replace(github, 'alt.js.org'); } ReactDOM.render( , - document.getElementById('alt-search-app') + document.getElementById('alt-search-app') ); diff --git a/web/webpack.config.js b/web/webpack.config.js index 74f9c8cc..96ce6154 100644 --- a/web/webpack.config.js +++ b/web/webpack.config.js @@ -1,23 +1,23 @@ const path = require('path'); module.exports = { - entry: path.join(__dirname, 'scripts', 'search.js'), - output: { - filename: path.join(__dirname, 'assets', 'search.js') - }, - module: { - loaders: [ - { test: /\.js$/, - include: [ - path.join(__dirname, 'scripts'), - path.join(__dirname, '..', 'node_modules', 'alt-search-docs', 'src'), - path.join(__dirname, '..', 'node_modules', 'alt-search-docs', 'node_modules/react-text-highlight/src') - ], - loader: 'babel-loader?stage=0' - }, - { test: /\.css$/, - loader: 'style-loader!css-loader' - } - ] - } + entry: path.join(__dirname, 'scripts', 'search.js'), + output: { + filename: path.join(__dirname, 'assets', 'search.js') + }, + module: { + loaders: [ + { test: /\.js$/, + include: [ + path.join(__dirname, 'scripts'), + path.join(__dirname, '..', 'node_modules', 'alt-search-docs', 'src'), + path.join(__dirname, '..', 'node_modules', 'alt-search-docs', 'node_modules/react-text-highlight/src') + ], + loader: 'babel-loader?stage=0' + }, + { test: /\.css$/, + loader: 'style-loader!css-loader' + } + ] + } }; From ab703cf2fe78903b0f6410a33124658231a46a5e Mon Sep 17 00:00:00 2001 From: Ryan Date: Fri, 10 Nov 2017 14:11:04 -0500 Subject: [PATCH 16/21] Update lint to remove semicolons. --- .eslintrc | 1 + scripts/this-dispatch-to-return.js | 78 +- src/actions/index.js | 44 +- src/functions.js | 16 +- src/index.js | 174 ++--- src/store/AltStore.js | 100 +-- src/store/StoreMixin.js | 130 +-- src/store/index.js | 80 +- src/utils/AltUtils.js | 50 +- src/utils/StateFunctions.js | 48 +- test/actions-dump-test.js | 42 +- test/alt-config-object.js | 58 +- test/async-action-test.js | 42 +- test/async-test.js | 248 +++--- test/batching-test.js | 90 +-- test/before-and-after-test.js | 62 +- test/bound-listeners-test.js | 60 +- test/config-set-get-state-test.js | 42 +- test/debug-alt-test.js | 26 +- test/es3-module-pattern.js | 92 +-- test/failed-dispatch-test.js | 82 +- test/functional-test.js | 136 ++-- test/functions-test.js | 68 +- test/helpers/SaaM.js | 6 +- test/helpers/SampleActions.js | 4 +- test/helpers/alt.js | 4 +- test/index.js | 1128 +++++++++++++-------------- test/setting-state.js | 128 +-- test/store-as-a-module.js | 24 +- test/store-model-test.js | 50 +- test/store-transforms-test.js | 28 +- test/stores-get-alt.js | 16 +- test/stores-with-colliding-names.js | 34 +- test/value-stores-test.js | 62 +- 34 files changed, 1627 insertions(+), 1626 deletions(-) diff --git a/.eslintrc b/.eslintrc index 454d023a..d06f13f5 100644 --- a/.eslintrc +++ b/.eslintrc @@ -7,6 +7,7 @@ }, "rules": { "comma-dangle": [2, "never"], + "semi": [2, "never"], "arrow-body-style": [2, "always"], "class-methods-use-this": 0, "no-console": 0, diff --git a/scripts/this-dispatch-to-return.js b/scripts/this-dispatch-to-return.js index 94123b47..440b999d 100644 --- a/scripts/this-dispatch-to-return.js +++ b/scripts/this-dispatch-to-return.js @@ -6,8 +6,8 @@ const isDispatch = (path) => { // commented out so we support var self = this; self.dispatch(); path.value.callee.property.type === 'Identifier' && path.value.callee.property.name === 'dispatch' - ); -}; + ) +} const isThisActions = (path) => { return ( @@ -15,34 +15,34 @@ const isThisActions = (path) => { path.value.object.type === 'MemberExpression' && path.value.object.property.type === 'Identifier' && path.value.object.property.name === 'actions' - ); -}; + ) +} const updateDispatchToReturn = (j) => { return (p) => { - j(p).replaceWith(j.returnStatement(p.value.arguments[0] || null)); - }; -}; + j(p).replaceWith(j.returnStatement(p.value.arguments[0] || null)) + } +} const updateDispatchToCall = (j) => { return (p) => { - j(p).replaceWith(j.callExpression(j.identifier('dispatch'), p.value.arguments)); - }; -}; + j(p).replaceWith(j.callExpression(j.identifier('dispatch'), p.value.arguments)) + } +} const updateToJustThis = (j) => { return (p) => { - j(p).replaceWith(j.memberExpression(p.value.object.object, p.value.property)); - }; -}; + j(p).replaceWith(j.memberExpression(p.value.object.object, p.value.property)) + } +} const findDispatches = (j, p) => { - return j(p).find(j.CallExpression).filter(isDispatch); -}; + return j(p).find(j.CallExpression).filter(isDispatch) +} const findThisActionReferences = (j, p) => { - return j(p).find(j.MemberExpression).filter(isThisActions); -}; + return j(p).find(j.MemberExpression).filter(isThisActions) +} const replaceFunction = (j, p) => { j(p).replaceWith(j.functionExpression( @@ -57,54 +57,54 @@ const replaceFunction = (j, p) => { ) ) ]) - )); -}; + )) +} module.exports = (file, api) => { - const j = api.jscodeshift; - const root = j(file.source); + const j = api.jscodeshift + const root = j(file.source) root.find(j.FunctionExpression).forEach((p) => { // ignore constructors if (p.parent.value.type === 'MethodDefinition' && p.parent.value.kind === 'constructor') { - return; + return } // find all dispatches that are inside the function - const dispatches = findDispatches(j, p).size(); + const dispatches = findDispatches(j, p).size() const withinParent = findDispatches(j, p).filter((x) => { - return x.parent.parent.parent.value === p.value; - }).size(); + return x.parent.parent.parent.value === p.value + }).size() if (withinParent === 0 && dispatches > 0) { - replaceFunction(j, p); - findDispatches(j, p).forEach(updateDispatchToCall(j)); + replaceFunction(j, p) + findDispatches(j, p).forEach(updateDispatchToCall(j)) } else if (dispatches === 0) { - const hasReturn = j(p).find(j.ReturnStatement).size() > 0; + const hasReturn = j(p).find(j.ReturnStatement).size() > 0 if (hasReturn) { - console.warn('Could not transform function because it returned', 'at line', p.parent.value.loc.start.line); + console.warn('Could not transform function because it returned', 'at line', p.parent.value.loc.start.line) } else { - console.warn('This function does not dispatch?', 'at line', p.parent.value.loc.start.line); + console.warn('This function does not dispatch?', 'at line', p.parent.value.loc.start.line) } // if there are multiple dispatches happening then we'll need to return a // dispatch function and update this.dispatch to a dispatch call } else if (dispatches > 1) { - replaceFunction(j, p); - findDispatches(j, p).forEach(updateDispatchToCall(j)); + replaceFunction(j, p) + findDispatches(j, p).forEach(updateDispatchToCall(j)) // if there's a single dispatch then it's ok to return to dispatch } else if (p.value.body.body.length === 1) { // if its the only statement within the function - findDispatches(j, p).forEach(updateDispatchToReturn(j)); + findDispatches(j, p).forEach(updateDispatchToReturn(j)) } else { // otherwise lets run the function - replaceFunction(j, p); - findDispatches(j, p).forEach(updateDispatchToCall(j)); + replaceFunction(j, p) + findDispatches(j, p).forEach(updateDispatchToCall(j)) } // Also find any mentions to `this.actions` - findThisActionReferences(j, p).forEach(updateToJustThis(j)); - }); + findThisActionReferences(j, p).forEach(updateToJustThis(j)) + }) - return root.toSource({ quote: 'single' }); -}; + return root.toSource({ quote: 'single' }) +} diff --git a/src/actions/index.js b/src/actions/index.js index b68c331b..44d917cf 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -1,48 +1,48 @@ -import isPromise from 'is-promise'; -import * as fn from '../functions'; -import * as utils from '../utils/AltUtils'; +import isPromise from 'is-promise' +import * as fn from '../functions' +import * as utils from '../utils/AltUtils' export default function makeAction(alt, namespace, name, implementation, obj) { - const id = utils.uid(alt._actionsRegistry, `${namespace}.${name}`); + const id = utils.uid(alt._actionsRegistry, `${namespace}.${name}`) alt._actionsRegistry[id] = 1; //eslint-disable-line - const data = { id, namespace, name }; + const data = { id, namespace, name } - const dispatch = (payload) => { return alt.dispatch(id, payload, data); }; + const dispatch = (payload) => { return alt.dispatch(id, payload, data) } // the action itself const action = (...args) => { - const invocationResult = implementation.apply(obj, args); - let actionResult = invocationResult; + const invocationResult = implementation.apply(obj, args) + let actionResult = invocationResult // async functions that return promises should not be dispatched if (invocationResult !== undefined && !isPromise(invocationResult)) { if (fn.isFunction(invocationResult)) { // inner function result should be returned as an action result - actionResult = invocationResult(dispatch, alt); + actionResult = invocationResult(dispatch, alt) } else { - dispatch(invocationResult); + dispatch(invocationResult) } } if (invocationResult === undefined) { - utils.warn('An action was called but nothing was dispatched'); + utils.warn('An action was called but nothing was dispatched') } - return actionResult; - }; - action.defer = (...args) => { return setTimeout(() => { return action(...args); }); }; - action.id = id; - action.data = data; + return actionResult + } + action.defer = (...args) => { return setTimeout(() => { return action(...args) }) } + action.id = id + action.data = data // ensure each reference is unique in the namespace - const container = alt.actions[namespace]; - const namespaceId = utils.uid(container, name); - container[namespaceId] = action; + const container = alt.actions[namespace] + const namespaceId = utils.uid(container, name) + container[namespaceId] = action // generate a constant - const constant = utils.formatAsConstant(namespaceId); - container[constant] = id; + const constant = utils.formatAsConstant(namespaceId) + container[constant] = id - return action; + return action } diff --git a/src/functions.js b/src/functions.js index b33ee137..b4587cc3 100644 --- a/src/functions.js +++ b/src/functions.js @@ -1,7 +1,7 @@ -export const isFunction = (x) => { return typeof x === 'function'; }; +export const isFunction = (x) => { return typeof x === 'function' } export function isMutableObject(target) { - const Ctor = target.constructor; + const Ctor = target.constructor return ( !!target @@ -13,20 +13,20 @@ export function isMutableObject(target) { !Object.isFrozen(target) && (Ctor instanceof Ctor || target.type === 'AltStore') - ); + ) } export function eachObject(f, o) { o.forEach((from) => { Object.keys(Object(from)).forEach((key) => { - f(key, from[key]); - }); - }); + f(key, from[key]) + }) + }) } export function assign(target, ...source) { eachObject((key, value) => { target[key] = value; //eslint-disable-line - }, source); - return target; + }, source) + return target } diff --git a/src/index.js b/src/index.js index 293b9fbd..c20f1010 100644 --- a/src/index.js +++ b/src/index.js @@ -1,31 +1,31 @@ /* global window */ -import { Dispatcher } from 'flux'; +import { Dispatcher } from 'flux' -import * as StateFunctions from './utils/StateFunctions'; -import * as fn from './functions'; -import * as store from './store'; -import * as utils from './utils/AltUtils'; -import makeAction from './actions'; +import * as StateFunctions from './utils/StateFunctions' +import * as fn from './functions' +import * as store from './store' +import * as utils from './utils/AltUtils' +import makeAction from './actions' class Alt { constructor(config = {}) { - this.config = config; - this.serialize = config.serialize || JSON.stringify; - this.deserialize = config.deserialize || JSON.parse; - this.dispatcher = config.dispatcher || new Dispatcher(); - this.batchingFunction = config.batchingFunction || ((callback) => { return callback(); }); - this.actions = { global: {} }; - this.stores = {}; - this.storeTransforms = config.storeTransforms || []; - this.trapAsync = false; - this._actionsRegistry = {}; - this._initSnapshot = {}; - this._lastSnapshot = {}; + this.config = config + this.serialize = config.serialize || JSON.stringify + this.deserialize = config.deserialize || JSON.parse + this.dispatcher = config.dispatcher || new Dispatcher() + this.batchingFunction = config.batchingFunction || ((callback) => { return callback() }) + this.actions = { global: {} } + this.stores = {} + this.storeTransforms = config.storeTransforms || [] + this.trapAsync = false + this._actionsRegistry = {} + this._initSnapshot = {} + this._lastSnapshot = {} } dispatch(action, data, details) { this.batchingFunction(() => { - const id = Math.random().toString(18).substr(2, 16); + const id = Math.random().toString(18).substr(2, 16) // support straight dispatching of FSA-style actions if (action.hasOwnProperty('type') && action.hasOwnProperty('payload')) { @@ -33,100 +33,100 @@ class Alt { id: action.type, namespace: action.type, name: action.type - }; + } return this.dispatcher.dispatch( utils.fsa(id, action.type, action.payload, fsaDetails), - ); + ) } if (action.id && action.dispatch) { - return utils.dispatch(id, action, data, this); + return utils.dispatch(id, action, data, this) } - return this.dispatcher.dispatch(utils.fsa(id, action, data, details)); - }); + return this.dispatcher.dispatch(utils.fsa(id, action, data, details)) + }) } createUnsavedStore(StoreModel, ...args) { - const key = StoreModel.displayName || ''; - store.createStoreConfig(this.config, StoreModel); - const Store = store.transformStore(this.storeTransforms, StoreModel); + const key = StoreModel.displayName || '' + store.createStoreConfig(this.config, StoreModel) + const Store = store.transformStore(this.storeTransforms, StoreModel) return fn.isFunction(Store) ? store.createStoreFromClass(this, Store, key, ...args) - : store.createStoreFromObject(this, Store, key); + : store.createStoreFromObject(this, Store, key) } createStore(StoreModel, iden, ...args) { - let key = iden || StoreModel.displayName || StoreModel.name || ''; - store.createStoreConfig(this.config, StoreModel); - const Store = store.transformStore(this.storeTransforms, StoreModel); + let key = iden || StoreModel.displayName || StoreModel.name || '' + store.createStoreConfig(this.config, StoreModel) + const Store = store.transformStore(this.storeTransforms, StoreModel) /* istanbul ignore next */ - if (module.hot) delete this.stores[key]; + if (module.hot) delete this.stores[key] if (this.stores[key] || !key) { if (this.stores[key]) { utils.warn( `A store named ${key} already exists, double check your store ` + 'names or pass in your own custom identifier for each store', - ); + ) } else { - utils.warn('Store name was not specified'); + utils.warn('Store name was not specified') } - key = utils.uid(this.stores, key); + key = utils.uid(this.stores, key) } const storeInstance = fn.isFunction(Store) ? store.createStoreFromClass(this, Store, key, ...args) - : store.createStoreFromObject(this, Store, key); + : store.createStoreFromObject(this, Store, key) - this.stores[key] = storeInstance; - StateFunctions.saveInitialSnapshot(this, key); + this.stores[key] = storeInstance + StateFunctions.saveInitialSnapshot(this, key) - return storeInstance; + return storeInstance } generateActions(...actionNames) { - const actions = { name: 'global' }; + const actions = { name: 'global' } return this.createActions(actionNames.reduce((obj, action) => { obj[action] = utils.dispatchIdentity; //eslint-disable-line - return obj; - }, actions)); + return obj + }, actions)) } createAction(name, implementation, obj) { - return makeAction(this, 'global', name, implementation, obj); + return makeAction(this, 'global', name, implementation, obj) } createActions(ActionsClass, exportObj = {}, ...argsForConstructor) { - const actions = {}; + const actions = {} const key = utils.uid( this._actionsRegistry, ActionsClass.displayName || ActionsClass.name || 'Unknown', - ); + ) if (fn.isFunction(ActionsClass)) { - fn.assign(actions, utils.getPrototypeChain(ActionsClass)); + fn.assign(actions, utils.getPrototypeChain(ActionsClass)) class ActionsGenerator extends ActionsClass { generateActions(...actionNames) { //eslint-disable-line actionNames.forEach((actionName) => { - actions[actionName] = utils.dispatchIdentity; - }); + actions[actionName] = utils.dispatchIdentity + }) } } - fn.assign(actions, new ActionsGenerator(...argsForConstructor)); + fn.assign(actions, new ActionsGenerator(...argsForConstructor)) } else { - fn.assign(actions, ActionsClass); + fn.assign(actions, ActionsClass) } - this.actions[key] = this.actions[key] || {}; + this.actions[key] = this.actions[key] || {} fn.eachObject((actionName, action) => { if (!fn.isFunction(action)) { exportObj[actionName] = action; //eslint-disable-line - return; + return } // create the action @@ -136,20 +136,20 @@ class Alt { actionName, action, exportObj, - ); + ) // generate a constant - const constant = utils.formatAsConstant(actionName); + const constant = utils.formatAsConstant(actionName) exportObj[constant] = exportObj[actionName].id; //eslint-disable-line - }, [actions]); + }, [actions]) - return exportObj; + return exportObj } takeSnapshot(...storeNames) { - const state = StateFunctions.snapshot(this, storeNames); - fn.assign(this._lastSnapshot, state); - return this.serialize(state); + const state = StateFunctions.snapshot(this, storeNames) + fn.assign(this._lastSnapshot, state) + return this.serialize(state) } rollback() { @@ -157,10 +157,10 @@ class Alt { this, this.serialize(this._lastSnapshot), (storeInst) => { - storeInst.lifecycle('rollback'); - storeInst.emitChange(); + storeInst.lifecycle('rollback') + storeInst.emitChange() }, - ); + ) } recycle(...storeNames) { @@ -170,38 +170,38 @@ class Alt { this._initSnapshot, storeNames, ) - : this._initSnapshot; + : this._initSnapshot StateFunctions.setAppState( this, this.serialize(initialSnapshot), (storeInst) => { - storeInst.lifecycle('init'); - storeInst.emitChange(); + storeInst.lifecycle('init') + storeInst.emitChange() }, - ); + ) } flush() { - const state = this.serialize(StateFunctions.snapshot(this)); - this.recycle(); - return state; + const state = this.serialize(StateFunctions.snapshot(this)) + this.recycle() + return state } bootstrap(data) { StateFunctions.setAppState(this, data, (storeInst, state) => { - storeInst.lifecycle('bootstrap', state); - storeInst.emitChange(); - }); + storeInst.lifecycle('bootstrap', state) + storeInst.emitChange() + }) } prepare(storeInst, payload) { - const data = {}; + const data = {} if (!storeInst.displayName) { - throw new ReferenceError('Store provided does not have a name'); + throw new ReferenceError('Store provided does not have a name') } - data[storeInst.displayName] = payload; - return this.serialize(data); + data[storeInst.displayName] = payload + return this.serialize(data) } // Instance type methods for injecting alt into your application as context @@ -209,33 +209,33 @@ class Alt { addActions(name, ActionsClass, ...args) { this.actions[name] = Array.isArray(ActionsClass) ? this.generateActions.apply(this, ActionsClass) //eslint-disable-line - : this.createActions(ActionsClass, ...args); + : this.createActions(ActionsClass, ...args) } addStore(name, StoreModel, ...args) { - this.createStore(StoreModel, name, ...args); + this.createStore(StoreModel, name, ...args) } getActions(name) { - return this.actions[name]; + return this.actions[name] } getStore(name) { - return this.stores[name]; + return this.stores[name] } static debug(name, alt, win) { - const key = 'alt.js.org'; - let context = win; + const key = 'alt.js.org' + let context = win if (!context && typeof window !== 'undefined') { - context = window; + context = window } if (typeof context !== 'undefined') { - context[key] = context[key] || []; - context[key].push({ name, alt }); + context[key] = context[key] || [] + context[key].push({ name, alt }) } - return alt; + return alt } } -export default Alt; +export default Alt diff --git a/src/store/AltStore.js b/src/store/AltStore.js index 0d5e6afa..0d584ecc 100644 --- a/src/store/AltStore.js +++ b/src/store/AltStore.js @@ -1,111 +1,111 @@ -import transmitter from 'transmitter'; -import * as fn from '../functions'; +import transmitter from 'transmitter' +import * as fn from '../functions' class AltStore { constructor(alt, model, state, StoreModel) { - const lifecycleEvents = model.lifecycleEvents; - this.transmitter = transmitter(); + const lifecycleEvents = model.lifecycleEvents + this.transmitter = transmitter() this.lifecycle = (event, x) => { - if (lifecycleEvents[event]) lifecycleEvents[event].publish(x); - }; - this.state = state; + if (lifecycleEvents[event]) lifecycleEvents[event].publish(x) + } + this.state = state - this.alt = alt; - this.preventDefault = false; - this.displayName = model.displayName; - this.boundListeners = model.boundListeners; - this.StoreModel = StoreModel; - this.reduce = model.reduce || ((x) => { return x; }); - this.subscriptions = []; + this.alt = alt + this.preventDefault = false + this.displayName = model.displayName + this.boundListeners = model.boundListeners + this.StoreModel = StoreModel + this.reduce = model.reduce || ((x) => { return x }) + this.subscriptions = [] - const output = model.output || ((x) => { return x; }); + const output = model.output || ((x) => { return x }) - this.emitChange = () => { return this.transmitter.publish(output(this.state)); }; + this.emitChange = () => { return this.transmitter.publish(output(this.state)) } const handleDispatch = (f, payload) => { try { - return f(); + return f() } catch (e) { if (model.handlesOwnErrors) { this.lifecycle('error', { error: e, payload, state: this.state - }); - return false; + }) + return false } - throw e; + throw e } - }; + } - fn.assign(this, model.publicMethods); + fn.assign(this, model.publicMethods) // Register dispatcher this.dispatchToken = alt.dispatcher.register((payload) => { - this.preventDefault = false; + this.preventDefault = false this.lifecycle('beforeEach', { payload, state: this.state - }); + }) - const actionHandlers = model.actionListeners[payload.action]; + const actionHandlers = model.actionListeners[payload.action] if (actionHandlers || model.otherwise) { - let result; + let result if (actionHandlers) { result = handleDispatch(() => { return actionHandlers.filter(Boolean).every((handler) => { - return handler.call(model, payload.data, payload.action) !== false; - }); - }, payload); + return handler.call(model, payload.data, payload.action) !== false + }) + }, payload) } else { result = handleDispatch(() => { - model.otherwise(payload.data, payload.action); - }, payload); + model.otherwise(payload.data, payload.action) + }, payload) } - if (result !== false && !this.preventDefault) this.emitChange(); + if (result !== false && !this.preventDefault) this.emitChange() } if (model.reduce) { handleDispatch(() => { - const value = model.reduce(this.state, payload); - if (value !== undefined) this.state = value; - }, payload); - if (!this.preventDefault) this.emitChange(); + const value = model.reduce(this.state, payload) + if (value !== undefined) this.state = value + }, payload) + if (!this.preventDefault) this.emitChange() } this.lifecycle('afterEach', { payload, state: this.state - }); - }); + }) + }) - this.lifecycle('init'); + this.lifecycle('init') } listen(cb) { - if (!fn.isFunction(cb)) throw new TypeError('listen expects a function'); - const { dispose } = this.transmitter.subscribe(cb); - this.subscriptions.push({ cb, dispose }); + if (!fn.isFunction(cb)) throw new TypeError('listen expects a function') + const { dispose } = this.transmitter.subscribe(cb) + this.subscriptions.push({ cb, dispose }) return () => { - this.lifecycle('unlisten'); - dispose(); - }; + this.lifecycle('unlisten') + dispose() + } } unlisten(cb) { - this.lifecycle('unlisten'); + this.lifecycle('unlisten') this.subscriptions - .filter((subscription) => { return subscription.cb === cb; }) - .forEach((subscription) => { return subscription.dispose(); }); + .filter((subscription) => { return subscription.cb === cb }) + .forEach((subscription) => { return subscription.dispose() }) } getState() { - return this.StoreModel.config.getState.call(this, this.state); + return this.StoreModel.config.getState.call(this, this.state) } } -export default AltStore; +export default AltStore diff --git a/src/store/StoreMixin.js b/src/store/StoreMixin.js index 5a8ce7f9..f2dc82d5 100644 --- a/src/store/StoreMixin.js +++ b/src/store/StoreMixin.js @@ -1,165 +1,165 @@ -import transmitter from 'transmitter'; -import * as fn from '../functions'; +import transmitter from 'transmitter' +import * as fn from '../functions' const StoreMixin = { waitFor(...sources) { if (!sources.length) { - throw new ReferenceError('Dispatch tokens not provided'); + throw new ReferenceError('Dispatch tokens not provided') } - let sourcesArray = sources; + let sourcesArray = sources if (sources.length === 1) { - sourcesArray = Array.isArray(sources[0]) ? sources[0] : sources; + sourcesArray = Array.isArray(sources[0]) ? sources[0] : sources } - const tokens = sourcesArray.map((source) => { return source.dispatchToken || source; }); + const tokens = sourcesArray.map((source) => { return source.dispatchToken || source }) - this.dispatcher.waitFor(tokens); + this.dispatcher.waitFor(tokens) }, exportAsync(asyncMethods) { - this.registerAsync(asyncMethods); + this.registerAsync(asyncMethods) }, registerAsync(asyncDef) { - let loadCounter = 0; + let loadCounter = 0 const asyncMethods = fn.isFunction(asyncDef) ? asyncDef(this.alt) - : asyncDef; + : asyncDef const toExport = Object.keys(asyncMethods).reduce((publicMethods, methodName) => { - const desc = asyncMethods[methodName]; - const spec = fn.isFunction(desc) ? desc(this) : desc; + const desc = asyncMethods[methodName] + const spec = fn.isFunction(desc) ? desc(this) : desc - const validHandlers = ['success', 'error', 'loading']; + const validHandlers = ['success', 'error', 'loading'] validHandlers.forEach((handler) => { if (spec[handler] && !spec[handler].id) { - throw new Error(`${handler} handler must be an action function`); + throw new Error(`${handler} handler must be an action function`) } - }); + }) publicMethods[methodName] = (...args) => { //eslint-disable-line - const state = this.getInstance().getState(); - const value = spec.local && spec.local(state, ...args); + const state = this.getInstance().getState() + const value = spec.local && spec.local(state, ...args) const shouldFetch = spec.shouldFetch ? spec.shouldFetch(state, ...args) /*eslint-disable*/ : value == null /* eslint-enable */ - const intercept = spec.interceptResponse || ((x) => { return x; }); + const intercept = spec.interceptResponse || ((x) => { return x }) const makeActionHandler = (action, isError) => { return (x) => { const fire = () => { - loadCounter -= 1; - action(intercept(x, action, args)); - if (isError) throw x; - return x; - }; - return this.alt.trapAsync ? () => { return fire(); } : fire(); - }; - }; + loadCounter -= 1 + action(intercept(x, action, args)) + if (isError) throw x + return x + } + return this.alt.trapAsync ? () => { return fire() } : fire() + } + } // if we don't have it in cache then fetch it if (shouldFetch) { - loadCounter += 1; + loadCounter += 1 /* istanbul ignore else */ - if (spec.loading) spec.loading(intercept(null, spec.loading, args)); + if (spec.loading) spec.loading(intercept(null, spec.loading, args)) return spec.remote(state, ...args).then( makeActionHandler(spec.success), makeActionHandler(spec.error, 1), - ); + ) } // otherwise emit the change now - this.emitChange(); - return value; - }; + this.emitChange() + return value + } - return publicMethods; - }, {}); + return publicMethods + }, {}) - this.exportPublicMethods(toExport); + this.exportPublicMethods(toExport) this.exportPublicMethods({ - isLoading: () => { return loadCounter > 0; } - }); + isLoading: () => { return loadCounter > 0 } + }) }, exportPublicMethods(methods) { fn.eachObject((methodName, value) => { if (!fn.isFunction(value)) { - throw new TypeError('exportPublicMethods expects a function'); + throw new TypeError('exportPublicMethods expects a function') } - this.publicMethods[methodName] = value; - }, [methods]); + this.publicMethods[methodName] = value + }, [methods]) }, emitChange() { - this.getInstance().emitChange(); + this.getInstance().emitChange() }, on(lifecycleEvent, handler) { - if (lifecycleEvent === 'error') this.handlesOwnErrors = true; - const bus = this.lifecycleEvents[lifecycleEvent] || transmitter(); - this.lifecycleEvents[lifecycleEvent] = bus; - return bus.subscribe(handler.bind(this)); + if (lifecycleEvent === 'error') this.handlesOwnErrors = true + const bus = this.lifecycleEvents[lifecycleEvent] || transmitter() + this.lifecycleEvents[lifecycleEvent] = bus + return bus.subscribe(handler.bind(this)) }, bindAction(symbol, handler) { if (!symbol) { - throw new ReferenceError('Invalid action reference passed in'); + throw new ReferenceError('Invalid action reference passed in') } if (!fn.isFunction(handler)) { - throw new TypeError('bindAction expects a function'); + throw new TypeError('bindAction expects a function') } // You can pass in the constant or the function itself - const key = symbol.id ? symbol.id : symbol; - this.actionListeners[key] = this.actionListeners[key] || []; - this.actionListeners[key].push(handler.bind(this)); - this.boundListeners.push(key); + const key = symbol.id ? symbol.id : symbol + this.actionListeners[key] = this.actionListeners[key] || [] + this.actionListeners[key].push(handler.bind(this)) + this.boundListeners.push(key) }, bindActions(actions) { fn.eachObject((action, symbol) => { - const matchFirstCharacter = /./; - const assumedEventHandler = action.replace(matchFirstCharacter, (x) => { return `on${x[0].toUpperCase()}`; }); + const matchFirstCharacter = /./ + const assumedEventHandler = action.replace(matchFirstCharacter, (x) => { return `on${x[0].toUpperCase()}` }) if (this[action] && this[assumedEventHandler]) { // If you have both action and onAction throw new ReferenceError( 'You have multiple action handlers bound to an action: ' + `${action} and ${assumedEventHandler}`, - ); + ) } - const handler = this[action] || this[assumedEventHandler]; + const handler = this[action] || this[assumedEventHandler] if (handler) { - this.bindAction(symbol, handler); + this.bindAction(symbol, handler) } - }, [actions]); + }, [actions]) }, bindListeners(obj) { fn.eachObject((methodName, symbol) => { - const listener = this[methodName]; + const listener = this[methodName] if (!listener) { throw new ReferenceError( `${methodName} defined but does not exist in ${this.displayName}`, - ); + ) } if (Array.isArray(symbol)) { symbol.forEach((action) => { - this.bindAction(action, listener); - }); + this.bindAction(action, listener) + }) } else { - this.bindAction(symbol, listener); + this.bindAction(symbol, listener) } - }, [obj]); + }, [obj]) } -}; +} -export default StoreMixin; +export default StoreMixin diff --git a/src/store/index.js b/src/store/index.js index 27af8bab..ade2e143 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -1,27 +1,27 @@ -import * as utils from '../utils/AltUtils'; -import * as fn from '../functions'; -import AltStore from './AltStore'; -import StoreMixin from './StoreMixin'; +import * as utils from '../utils/AltUtils' +import * as fn from '../functions' +import AltStore from './AltStore' +import StoreMixin from './StoreMixin' function doSetState(store, storeInstance, state) { if (!state) { - return; + return } - const { config } = storeInstance.StoreModel; + const { config } = storeInstance.StoreModel const nextState = fn.isFunction(state) ? state(storeInstance.state) - : state; + : state storeInstance.state = config.setState.call( //eslint-disable-line store, storeInstance.state, nextState, - ); + ) if (!store.alt.dispatcher.isDispatching()) { - store.emitChange(); + store.emitChange() } } @@ -31,73 +31,73 @@ function createPrototype(proto, alt, key, extras) { alt, dispatcher: alt.dispatcher, preventDefault() { - this.getInstance().preventDefault = true; + this.getInstance().preventDefault = true }, boundListeners: [], lifecycleEvents: {}, actionListeners: {}, publicMethods: {}, handlesOwnErrors: false - }, extras); + }, extras) } export function createStoreConfig(globalConfig, StoreModel) { StoreModel.config = fn.assign({ //eslint-disable-line getState(state) { if (Array.isArray(state)) { - return state.slice(); + return state.slice() } else if (fn.isMutableObject(state)) { - return fn.assign({}, state); + return fn.assign({}, state) } - return state; + return state }, setState(currentState, nextState) { if (fn.isMutableObject(nextState)) { - return fn.assign(currentState, nextState); + return fn.assign(currentState, nextState) } - return nextState; + return nextState } - }, globalConfig, StoreModel.config); + }, globalConfig, StoreModel.config) } export function transformStore(transforms, StoreModel) { - return transforms.reduce((Store, transform) => { return transform(Store); }, StoreModel); + return transforms.reduce((Store, transform) => { return transform(Store) }, StoreModel) } export function createStoreFromObject(alt, StoreModel, key) { - let storeInstance; + let storeInstance const StoreProto = createPrototype({}, alt, key, fn.assign({ getInstance() { - return storeInstance; + return storeInstance }, setState(nextState) { - doSetState(this, storeInstance, nextState); + doSetState(this, storeInstance, nextState) } - }, StoreModel)); + }, StoreModel)) - // bind the store listeners - /* istanbul ignore else */ + // bind the store listeners + /* istanbul ignore else */ if (StoreProto.bindListeners) { StoreMixin.bindListeners.call( StoreProto, StoreProto.bindListeners, - ); + ) } /* istanbul ignore else */ if (StoreProto.observe) { StoreMixin.bindListeners.call( StoreProto, StoreProto.observe(alt), - ); + ) } // bind the lifecycle events /* istanbul ignore else */ if (StoreProto.lifecycle) { fn.eachObject((eventName, event) => { - StoreMixin.on.call(StoreProto, eventName, event); - }, [StoreProto.lifecycle]); + StoreMixin.on.call(StoreProto, eventName, event) + }, [StoreProto.lifecycle]) } // create the instance and fn.assign the public methods to the instance @@ -113,14 +113,14 @@ export function createStoreFromObject(alt, StoreModel, key) { displayName: key, config: StoreModel.config }, - ); + ) - return storeInstance; + return storeInstance } export function createStoreFromClass(alt, StoreModel, key, ...argsForClass) { - let storeInstance; - const { config } = StoreModel; + let storeInstance + const { config } = StoreModel // Creating a class here so we don't overload the provided store's // prototype with the mixin behaviour and I'm extending from StoreModel @@ -130,19 +130,19 @@ export function createStoreFromClass(alt, StoreModel, key, ...argsForClass) { createPrototype(Store.prototype, alt, key, { type: 'AltStore', getInstance() { - return storeInstance; + return storeInstance }, setState(nextState) { - doSetState(this, storeInstance, nextState); + doSetState(this, storeInstance, nextState) } - }); + }) - const store = new Store(...argsForClass); + const store = new Store(...argsForClass) /* istanbul ignore next */ - if (config.bindListeners) store.bindListeners(config.bindListeners); + if (config.bindListeners) store.bindListeners(config.bindListeners) /* istanbul ignore next */ - if (config.datasource) store.registerAsync(config.datasource); + if (config.datasource) store.registerAsync(config.datasource) storeInstance = fn.assign( new AltStore( @@ -154,7 +154,7 @@ export function createStoreFromClass(alt, StoreModel, key, ...argsForClass) { utils.getInternalMethods(StoreModel), config.publicMethods, { displayName: key }, - ); + ) - return storeInstance; + return storeInstance } diff --git a/src/utils/AltUtils.js b/src/utils/AltUtils.js index 2b570a10..7a5cf996 100644 --- a/src/utils/AltUtils.js +++ b/src/utils/AltUtils.js @@ -1,4 +1,4 @@ -import * as fn from '../functions'; +import * as fn from '../functions' /*eslint-disable*/ const builtIns = Object.getOwnPropertyNames(NoopClass) @@ -6,16 +6,16 @@ const builtInProto = Object.getOwnPropertyNames(NoopClass.prototype) /* eslint-enable */ export function getInternalMethods(Obj, isProto) { - const excluded = isProto ? builtInProto : builtIns; - const obj = isProto ? Obj.prototype : Obj; + const excluded = isProto ? builtInProto : builtIns + const obj = isProto ? Obj.prototype : Obj return Object.getOwnPropertyNames(obj).reduce((value, m) => { if (excluded.indexOf(m) !== -1) { - return value; + return value } value[m] = obj[m]; //eslint-disable-line - return value; - }, {}); + return value + }, {}) } export function getPrototypeChain(Obj, methods = {}) { @@ -24,7 +24,7 @@ export function getPrototypeChain(Obj, methods = {}) { : getPrototypeChain( Object.getPrototypeOf(Obj), fn.assign(getInternalMethods(Obj, true), methods), - ); + ) } export function warn(msg) { @@ -37,22 +37,22 @@ export function warn(msg) { } export function uid(container, name) { - let count = 0; - let key = name; + let count = 0 + let key = name while (Object.hasOwnProperty.call(container, key)) { - count += 1; - key = name + String(count); + count += 1 + key = name + String(count) } - return key; + return key } export function formatAsConstant(name) { - return name.replace(/[a-z]([A-Z])/g, (i) => { return `${i[0]}_${i[1].toLowerCase()}`; }).toUpperCase(); + return name.replace(/[a-z]([A-Z])/g, (i) => { return `${i[0]}_${i[1].toLowerCase()}` }).toUpperCase() } export function dispatchIdentity(x, ...a) { - if (x === undefined) return null; - return a.length ? [x].concat(a) : x; + if (x === undefined) return null + return a.length ? [x].concat(a) : x } export function fsa(id, type, payload, details) { @@ -68,24 +68,24 @@ export function fsa(id, type, payload, details) { action: type, data: payload, details - }; + } } export function dispatch(id, actionObj, payload, alt) { - const data = actionObj.dispatch(payload); - if (data === undefined) return null; + const data = actionObj.dispatch(payload) + if (data === undefined) return null - const type = actionObj.id; - const namespace = type; - const name = type; - const details = { id: type, namespace, name }; + const type = actionObj.id + const namespace = type + const name = type + const details = { id: type, namespace, name } - const dispatchLater = (x) => { return alt.dispatch(type, x, details); }; + const dispatchLater = (x) => { return alt.dispatch(type, x, details) } - if (fn.isFunction(data)) return data(dispatchLater, alt); + if (fn.isFunction(data)) return data(dispatchLater, alt) // XXX standardize this - return alt.dispatcher.dispatch(fsa(id, type, data, details)); + return alt.dispatcher.dispatch(fsa(id, type, data, details)) } /* istanbul ignore next */ diff --git a/src/utils/StateFunctions.js b/src/utils/StateFunctions.js index 5064c347..b54e68cf 100644 --- a/src/utils/StateFunctions.js +++ b/src/utils/StateFunctions.js @@ -1,53 +1,53 @@ -import * as fn from '../functions'; +import * as fn from '../functions' export function setAppState(instance, data, onStore) { - const obj = instance.deserialize(data); + const obj = instance.deserialize(data) fn.eachObject((key, value) => { - const store = instance.stores[key]; + const store = instance.stores[key] if (store) { - const { config } = store.StoreModel; - const state = store.state; - if (config.onDeserialize) obj[key] = config.onDeserialize(value) || value; + const { config } = store.StoreModel + const state = store.state + if (config.onDeserialize) obj[key] = config.onDeserialize(value) || value if (fn.isMutableObject(state)) { - fn.eachObject((k) => { return delete state[k]; }, [state]); - fn.assign(state, obj[key]); + fn.eachObject((k) => { return delete state[k] }, [state]) + fn.assign(state, obj[key]) } else { - store.state = obj[key]; + store.state = obj[key] } - onStore(store, store.state); + onStore(store, store.state) } - }, [obj]); + }, [obj]) } export function snapshot(instance, storeNames = []) { - const stores = storeNames.length ? storeNames : Object.keys(instance.stores); + const stores = storeNames.length ? storeNames : Object.keys(instance.stores) return stores.reduce((obj, storeHandle) => { - const storeName = storeHandle.displayName || storeHandle; - const store = instance.stores[storeName]; - const { config } = store.StoreModel; - store.lifecycle('snapshot'); + const storeName = storeHandle.displayName || storeHandle + const store = instance.stores[storeName] + const { config } = store.StoreModel + store.lifecycle('snapshot') const customSnapshot = config.onSerialize && - config.onSerialize(store.state); + config.onSerialize(store.state) obj[storeName] = customSnapshot || store.getState(); //eslint-disable-line - return obj; - }, {}); + return obj + }, {}) } export function saveInitialSnapshot(instance, key) { const state = instance.deserialize( instance.serialize(instance.stores[key].state), - ); + ) instance._initSnapshot[key] = state; //eslint-disable-line instance._lastSnapshot[key] = state; //eslint-disable-line } export function filterSnapshots(instance, state, stores) { return stores.reduce((obj, store) => { - const storeName = store.displayName || store; + const storeName = store.displayName || store if (!state[storeName]) { - throw new ReferenceError(`${storeName} is not a valid store`); + throw new ReferenceError(`${storeName} is not a valid store`) } obj[storeName] = state[storeName]; //eslint-disable-line - return obj; - }, {}); + return obj + }, {}) } diff --git a/test/actions-dump-test.js b/test/actions-dump-test.js index dac5d391..9682b105 100644 --- a/test/actions-dump-test.js +++ b/test/actions-dump-test.js @@ -1,45 +1,45 @@ -import { assert } from 'chai'; -import Alt from '../'; +import { assert } from 'chai' +import Alt from '../' -const alt = new Alt(); +const alt = new Alt() -alt.generateActions('one', 'two'); -alt.generateActions('three'); -alt.generateActions('one'); +alt.generateActions('one', 'two') +alt.generateActions('three') +alt.generateActions('one') alt.createActions(class FooActions { static displayName = 'FooActions'; one() {} two() {} -}); +}) alt.createActions({ displayName: 'Pojo', one() { }, two() { } -}); +}) alt.createActions({ one() { }, two() { } -}); +}) -alt.createAction('test', () => { }); +alt.createAction('test', () => { }) export default { 'actions obj': function () { - assert.isObject(alt.actions, 'actions exist'); - assert.isFunction(alt.actions.global.test, 'test exists'); - assert(Object.keys(alt.actions.global).length === 10, 'global actions contain stuff from createAction and generateActions'); - assert(Object.keys(alt.actions.FooActions).length === 4, '2 actions namespaced on FooActions'); - assert.isObject(alt.actions.Pojo, 'pojo named action exists'); - assert(Object.keys(alt.actions.Pojo).length === 4, 'pojo has 2 actions associated with it'); + assert.isObject(alt.actions, 'actions exist') + assert.isFunction(alt.actions.global.test, 'test exists') + assert(Object.keys(alt.actions.global).length === 10, 'global actions contain stuff from createAction and generateActions') + assert(Object.keys(alt.actions.FooActions).length === 4, '2 actions namespaced on FooActions') + assert.isObject(alt.actions.Pojo, 'pojo named action exists') + assert(Object.keys(alt.actions.Pojo).length === 4, 'pojo has 2 actions associated with it') - assert.isDefined(alt.actions.global.three, 'three action is defined in global'); + assert.isDefined(alt.actions.global.three, 'three action is defined in global') - assert.isDefined(alt.actions.Unknown.one, 'one exists in Unknown'); - assert.isDefined(alt.actions.global.one1, 'one1 was created because of a name clash'); + assert.isDefined(alt.actions.Unknown.one, 'one exists in Unknown') + assert.isDefined(alt.actions.global.one1, 'one1 was created because of a name clash') - assert.isDefined(alt.actions.global.THREE, 'the constant exists too'); + assert.isDefined(alt.actions.global.THREE, 'the constant exists too') } -}; +} diff --git a/test/alt-config-object.js b/test/alt-config-object.js index d2d38c6f..b9176228 100644 --- a/test/alt-config-object.js +++ b/test/alt-config-object.js @@ -1,20 +1,20 @@ -import { assert } from 'chai'; -import Alt from '../dist/alt-with-runtime'; +import { assert } from 'chai' +import Alt from '../dist/alt-with-runtime' class MyActions { constructor() { - this.generateActions('changeNumber'); + this.generateActions('changeNumber') } } class MyStore { constructor() { - this.number = 2; - this.letter = 'a'; + this.number = 2 + this.letter = 'a' } onChangeNumber() { - this.number *= 2; + this.number *= 2 } } @@ -29,44 +29,44 @@ export default { const alt = new Alt({ dispatcher: new CustomDispatcher() - }); - const dispatcher = alt.dispatcher; + }) + const dispatcher = alt.dispatcher // uses custom dispatcher - assert.equal(typeof dispatcher.extraMethod, 'function'); - assert.equal(typeof dispatcher.dispatch, 'function'); + assert.equal(typeof dispatcher.extraMethod, 'function') + assert.equal(typeof dispatcher.dispatch, 'function') }, 'custom serialize/deserialize': function () { const CustomSerialize = (data) => { return Object.keys(data).reduce((obj, key) => { - obj[key] = { wrapper: data[key] }; - return obj; - }, {}); - }; + obj[key] = { wrapper: data[key] } + return obj + }, {}) + } const CustomDeserialize = (data) => { return Object.keys(data).reduce((obj, key) => { - obj[key] = data[key].wrapper; - return obj; - }, {}); - }; + obj[key] = data[key].wrapper + return obj + }, {}) + } const alt = new Alt({ serialize: CustomSerialize, deserialize: CustomDeserialize - }); - alt.addStore('MyStore', MyStore); - alt.addActions('MyActions', MyActions); - const snapshot = alt.takeSnapshot(); - alt.getActions('MyActions').changeNumber(); - alt.rollback(); + }) + alt.addStore('MyStore', MyStore) + alt.addActions('MyActions', MyActions) + const snapshot = alt.takeSnapshot() + alt.getActions('MyActions').changeNumber() + alt.rollback() - assert.deepEqual(snapshot, { MyStore: { wrapper: { number: 2, letter: 'a' } } }); - assert.deepEqual(alt.getStore('MyStore').getState(), { number: 2, letter: 'a' }); + assert.deepEqual(snapshot, { MyStore: { wrapper: { number: 2, letter: 'a' } } }) + assert.deepEqual(alt.getStore('MyStore').getState(), { number: 2, letter: 'a' }) }, 'custom transforms': function () { - const alt = new Alt({ storeTransforms: [] }); - assert.isArray(alt.storeTransforms); + const alt = new Alt({ storeTransforms: [] }) + assert.isArray(alt.storeTransforms) } -}; +} diff --git a/test/async-action-test.js b/test/async-action-test.js index cb1ea303..035e2fa2 100644 --- a/test/async-action-test.js +++ b/test/async-action-test.js @@ -1,52 +1,52 @@ -import { assert } from 'chai'; -import isPromise from 'is-promise'; -import Alt from '../'; +import { assert } from 'chai' +import isPromise from 'is-promise' +import Alt from '../' -const alt = new Alt(); +const alt = new Alt() const actions = alt.createActions(class AsyncActions { static displayName = 'AsyncActions'; fetch() { - return Promise.resolve('foo'); + return Promise.resolve('foo') } fetchAndDispatch() { return (dispatch) => { - dispatch(); - return Promise.resolve('foo'); - }; + dispatch() + return Promise.resolve('foo') + } } -}); +}) const store = alt.createStore(class FooStore { static displayName = 'FooStore'; constructor() { - this.dispatched = false; - this.bindActions(actions); + this.dispatched = false + this.bindActions(actions) } onFetch() { - this.dispatched = true; + this.dispatched = true } onFetchAndDispatch() { - this.dispatched = true; + this.dispatched = true } -}); +}) export default { 'async actions': { afterEach() { - alt.recycle(store); + alt.recycle(store) }, 'are not dispatched automatically': function () { - actions.fetch(); - assert(store.state.dispatched === false, 'async action is not automatically dispatched'); + actions.fetch() + assert(store.state.dispatched === false, 'async action is not automatically dispatched') }, 'return the result of inner function invocation': function () { - const promise = actions.fetchAndDispatch(); - assert(isPromise(promise), 'async action does not return the result of inner function invocation'); - assert(store.state.dispatched === true, 'async action is dispatched when the dispatch is invoked manually'); + const promise = actions.fetchAndDispatch() + assert(isPromise(promise), 'async action does not return the result of inner function invocation') + assert(store.state.dispatched === true, 'async action is dispatched when the dispatch is invoked manually') } } -}; +} diff --git a/test/async-test.js b/test/async-test.js index f9224e2e..06076f4c 100644 --- a/test/async-test.js +++ b/test/async-test.js @@ -1,32 +1,32 @@ -import sinon from 'sinon'; -import { assert } from 'chai'; -import { Promise } from 'es6-promise'; -import Alt from '../'; +import sinon from 'sinon' +import { assert } from 'chai' +import { Promise } from 'es6-promise' +import Alt from '../' -const alt = new Alt(); +const alt = new Alt() const StargazerActions = alt.generateActions( 'fetchingUsers', 'usersReceived', 'failed', -); +) -const fauxjax = sinon.stub().returns(Promise.resolve([1, 2, 3, 4])); -const failjax = sinon.stub().returns(Promise.reject(new Error('things broke'))); +const fauxjax = sinon.stub().returns(Promise.resolve([1, 2, 3, 4])) +const failjax = sinon.stub().returns(Promise.reject(new Error('things broke'))) const api = { remote(state) { }, local(state) { } -}; +} const remote = sinon.stub(api, 'remote', (state, repo = state.repo) => { - const url = `https://api.github.com/repos/${state.user}/${repo}/stargazers`; - return repo === 'alts' ? failjax(url) : fauxjax(url); -}); + const url = `https://api.github.com/repos/${state.user}/${repo}/stargazers` + return repo === 'alts' ? failjax(url) : fauxjax(url) +}) const local = sinon.stub(api, 'local', (state) => { - return state.users.length ? state.users : null; -}); + return state.users.length ? state.users : null +}) const StargazerSource = { fetchUsers() { @@ -36,41 +36,41 @@ const StargazerSource = { loading: StargazerActions.fetchingUsers, success: StargazerActions.usersReceived, error: StargazerActions.failed - }; + } }, alwaysFetchUsers: { remote, - local: () => { return true; }, + local: () => { return true }, loading: StargazerActions.fetchingUsers, success: StargazerActions.usersReceived, error: StargazerActions.failed, - shouldFetch: () => { return true; } + shouldFetch: () => { return true } }, neverFetchUsers: { remote, - local: () => { return false; }, + local: () => { return false }, loading: StargazerActions.fetchingUsers, success: StargazerActions.usersReceived, error: StargazerActions.failed, - shouldFetch: () => { return false; } + shouldFetch: () => { return false } }, fetchRepos: { remote() { - return Promise.resolve('batman'); + return Promise.resolve('batman') }, interceptResponse(x, action, args) { - assert(x === 'batman'); - assert(action === StargazerActions.usersReceived); - assert(Array.isArray(args)); - return 'TESTTEST'; + assert(x === 'batman') + assert(action === StargazerActions.usersReceived) + assert(Array.isArray(args)) + return 'TESTTEST' }, success: StargazerActions.usersReceived, error: StargazerActions.failed } -}; +} const StargazerStore = alt.createStore(class { static config = { @@ -84,47 +84,47 @@ const StargazerStore = alt.createStore(class { users: [], errorMessage: null, isLoading: false - }; + } - this.registerAsync(StargazerSource); + this.registerAsync(StargazerSource) this.bindListeners({ loading: StargazerActions.fetchingUsers, receivedUsers: StargazerActions.usersReceived, failed: StargazerActions.failed - }); + }) } loading() { - this.setState({ isLoading: true }); + this.setState({ isLoading: true }) } failed(e) { - this.setState({ errorMessage: e.statusText || String(e) }); + this.setState({ errorMessage: e.statusText || String(e) }) } receivedUsers(users) { - this.setState({ users, errorMessage: null }); + this.setState({ users, errorMessage: null }) } -}); +}) export default { async: { beforeEach() { - global.window = {}; + global.window = {} - alt.recycle(); - local.reset(); - remote.reset(); + alt.recycle() + local.reset() + remote.reset() }, afterEach() { - delete global.window; + delete global.window }, 'methods are available': function () { - assert.isFunction(StargazerStore.fetchUsers); - assert.isFunction(StargazerStore.isLoading); + assert.isFunction(StargazerStore.fetchUsers) + assert.isFunction(StargazerStore.isLoading) }, 'data source with no action': function () { @@ -132,176 +132,176 @@ export default { alt.createStore(class { constructor() { this.registerAsync({ - derp() { return { success: () => { return null; } }; } - }); + derp() { return { success: () => { return null } } } + }) } - }); - }, Error, /handler must be an action function/); + }) + }, Error, /handler must be an action function/) }, 'loading state': function (done) { - const spy = sinon.spy(); - const begin = StargazerStore.listen(spy); + const spy = sinon.spy() + const begin = StargazerStore.listen(spy) const test = StargazerStore.listen((state) => { - assert.isArray(state.users, 'we have an array'); + assert.isArray(state.users, 'we have an array') if (spy.callCount === 1) { - assert(state.isLoading === true, 'the loading action was called'); - assert.ok(StargazerStore.isLoading(), 'and the loading function returns true'); - assert(state.users.length === 0, 'empty array'); + assert(state.isLoading === true, 'the loading action was called') + assert.ok(StargazerStore.isLoading(), 'and the loading function returns true') + assert(state.users.length === 0, 'empty array') } else if (spy.callCount === 2) { - assert.notOk(StargazerStore.isLoading(), 'and the loading function returns false'); - assert(state.users.length === 4, 'there are 4 elements present'); + assert.notOk(StargazerStore.isLoading(), 'and the loading function returns false') + assert(state.users.length === 4, 'there are 4 elements present') } - }); + }) const end = StargazerStore.listen((state) => { if (spy.callCount === 2) { - begin(); - test(); - end(); + begin() + test() + end() - assert.ok(local.calledOnce); - assert.ok(remote.calledOnce); - done(); + assert.ok(local.calledOnce) + assert.ok(remote.calledOnce) + done() } - }); + }) - StargazerStore.fetchUsers(); - assert.ok(StargazerStore.isLoading()); + StargazerStore.fetchUsers() + assert.ok(StargazerStore.isLoading()) }, 'data available already': function (done) { - StargazerActions.usersReceived([1, 2, 3]); + StargazerActions.usersReceived([1, 2, 3]) - const spy = sinon.spy(); - const count = StargazerStore.listen(spy); + const spy = sinon.spy() + const count = StargazerStore.listen(spy) const test = StargazerStore.listen((state) => { if (spy.callCount === 1) { - assert(state.users.length === 3); - count(); - test(); - assert.ok(local.calledOnce); - assert.notOk(StargazerStore.isLoading()); - assert(remote.callCount === 0); - done(); + assert(state.users.length === 3) + count() + test() + assert.ok(local.calledOnce) + assert.notOk(StargazerStore.isLoading()) + assert(remote.callCount === 0) + done() } - }); + }) - StargazerStore.fetchUsers(); - assert.notOk(StargazerStore.isLoading()); + StargazerStore.fetchUsers() + assert.notOk(StargazerStore.isLoading()) }, errors(done) { - const spy = sinon.spy(); - const count = StargazerStore.listen(spy); + const spy = sinon.spy() + const count = StargazerStore.listen(spy) const test = StargazerStore.listen((state) => { if (spy.callCount === 1) { - assert(state.users.length === 0); + assert(state.users.length === 0) } else if (spy.callCount === 2) { - assert.match(state.errorMessage, /things broke/); - count(); - test(); - assert.notOk(StargazerStore.isLoading()); - assert.ok(local.calledOnce); - assert.ok(remote.calledOnce); - done(); + assert.match(state.errorMessage, /things broke/) + count() + test() + assert.notOk(StargazerStore.isLoading()) + assert.ok(local.calledOnce) + assert.ok(remote.calledOnce) + done() } - }); + }) - StargazerStore.fetchUsers('alts'); - assert.ok(StargazerStore.isLoading()); + StargazerStore.fetchUsers('alts') + assert.ok(StargazerStore.isLoading()) }, 'shouldFetch is true': function () { - StargazerStore.alwaysFetchUsers(); - assert.ok(StargazerStore.isLoading(), 'i am loading'); - assert.ok(remote.calledOnce, 'remote was called once'); + StargazerStore.alwaysFetchUsers() + assert.ok(StargazerStore.isLoading(), 'i am loading') + assert.ok(remote.calledOnce, 'remote was called once') }, 'shouldFetch is false': function () { - StargazerStore.neverFetchUsers(); - assert.notOk(StargazerStore.isLoading(), 'loading now'); - assert(remote.callCount === 0, 'remote was not called'); + StargazerStore.neverFetchUsers() + assert.notOk(StargazerStore.isLoading(), 'loading now') + assert(remote.callCount === 0, 'remote was not called') }, 'multiple loads': function (done) { const unsub = StargazerStore.listen((state) => { if (state.users === 'TESTTEST') { - assert.notOk(StargazerStore.isLoading()); - unsub(); - done(); + assert.notOk(StargazerStore.isLoading()) + unsub() + done() } else { - assert.ok(StargazerStore.isLoading()); + assert.ok(StargazerStore.isLoading()) } - }); + }) - StargazerStore.fetchUsers(); - StargazerStore.fetchRepos(); - assert.ok(StargazerStore.isLoading()); + StargazerStore.fetchUsers() + StargazerStore.fetchRepos() + assert.ok(StargazerStore.isLoading()) }, 'as a function': function () { - const FauxSource = sinon.stub().returns({}); + const FauxSource = sinon.stub().returns({}) class FauxStore { static displayName = 'FauxStore'; constructor() { - this.exportAsync(FauxSource); + this.exportAsync(FauxSource) } } - const store = alt.createStore(FauxStore); + const store = alt.createStore(FauxStore) - assert(FauxSource.firstCall.args[0] === alt); - assert.isFunction(store.isLoading); + assert(FauxSource.firstCall.args[0] === alt) + assert.isFunction(store.isLoading) }, 'server rendering does not happen unless you lock alt': function (done) { - delete global.window; + delete global.window - const actions = alt.generateActions('test'); - alt.trapAsync = true; + const actions = alt.generateActions('test') + alt.trapAsync = true const PojoSource = { justTesting: { remote() { - return Promise.resolve(true); + return Promise.resolve(true) }, success: actions.test, error: actions.test } - }; + } class MyStore { static displayName = 'ServerRenderingStore'; constructor() { - this.registerAsync(PojoSource); + this.registerAsync(PojoSource) } } - const spy = sinon.spy(); + const spy = sinon.spy() - const dispatchToken = alt.dispatcher.register(spy); + const dispatchToken = alt.dispatcher.register(spy) - const store = alt.createStore(MyStore); + const store = alt.createStore(MyStore) store.justTesting().then((value) => { - assert.isFunction(value); - assert(spy.callCount === 0, 'the dispatcher was never called'); + assert.isFunction(value) + assert(spy.callCount === 0, 'the dispatcher was never called') - value(); + value() - assert.ok(spy.calledOnce, 'the dispatcher was flushed'); + assert.ok(spy.calledOnce, 'the dispatcher was flushed') - alt.dispatcher.unregister(dispatchToken); - alt.trapAsync = false; - done(); - }); + alt.dispatcher.unregister(dispatchToken) + alt.trapAsync = false + done() + }) } } -}; +} diff --git a/test/batching-test.js b/test/batching-test.js index 24690631..d92be2a1 100644 --- a/test/batching-test.js +++ b/test/batching-test.js @@ -1,34 +1,34 @@ -import React from 'react'; -import PropTypes from 'prop-types'; -import { jsdom } from 'jsdom'; -import { assert } from 'chai'; -import TestUtils from 'react-dom/test-utils'; -import ReactDom from 'react-dom'; -import Alt from '../'; +import React from 'react' +import PropTypes from 'prop-types' +import { jsdom } from 'jsdom' +import { assert } from 'chai' +import TestUtils from 'react-dom/test-utils' +import ReactDom from 'react-dom' +import Alt from '../' const Actions = { buttonClick() { setTimeout(() => { - this.switchComponent(); - }, 10); - return null; + this.switchComponent() + }, 10) + return null }, switchComponent() { - return null; + return null }, uhoh() { - return null; + return null } -}; +} function Store(actions) { - this.active = false; + this.active = false this.bindAction(actions.switchComponent, () => { - this.active = true; - }); + this.active = true + }) } class ComponentA extends React.Component { @@ -38,19 +38,19 @@ class ComponentA extends React.Component { }; constructor(props) { - super(props); - this.state = props.alt.stores.store.getState(); + super(props) + this.state = props.alt.stores.store.getState() } componentWillMount() { - this.props.alt.stores.store.listen((state) => { return this.setState(state); }); + this.props.alt.stores.store.listen((state) => { return this.setState(state) }) } render() { if (this.state.active) { - return ; + return } - return
; + return
} } @@ -61,59 +61,59 @@ class ComponentB extends React.Component { //eslint-disable-line }; componentWillMount() { - let error = null; + let error = null try { - this.props.alt.actions.actions.uhoh(); + this.props.alt.actions.actions.uhoh() } catch (err) { - error = err; + error = err } finally { - this.props.callback(error); + this.props.callback(error) } } render() { - return
; + return
} } export default { 'Batching dispatcher': { beforeEach() { - global.document = jsdom(''); - global.window = global.document.defaultView; + global.document = jsdom('') + global.window = global.document.defaultView }, afterEach() { - delete global.document; - delete global.window; + delete global.document + delete global.window }, 'does not batch': function (done) { - const alt = new Alt(); - alt.addActions('actions', Actions); - alt.addStore('store', Store, alt.actions.actions); + const alt = new Alt() + alt.addActions('actions', Actions) + alt.addStore('store', Store, alt.actions.actions) function test(err) { - assert.match(err, /dispatch in the middle of a dispatch/); - done(); + assert.match(err, /dispatch in the middle of a dispatch/) + done() } - TestUtils.renderIntoDocument(); - alt.actions.actions.buttonClick(); + TestUtils.renderIntoDocument() + alt.actions.actions.buttonClick() }, 'allows batching': function (done) { - const alt = new Alt({ batchingFunction: ReactDom.unstable_batchedUpdates }); - alt.addActions('actions', Actions); - alt.addStore('store', Store, alt.actions.actions); + const alt = new Alt({ batchingFunction: ReactDom.unstable_batchedUpdates }) + alt.addActions('actions', Actions) + alt.addStore('store', Store, alt.actions.actions) function test(err) { - assert.isNull(err); - done(); + assert.isNull(err) + done() } - TestUtils.renderIntoDocument(); - alt.actions.actions.buttonClick(); + TestUtils.renderIntoDocument() + alt.actions.actions.buttonClick() } } -}; +} diff --git a/test/before-and-after-test.js b/test/before-and-after-test.js index 5d33041f..2d7efc2f 100644 --- a/test/before-and-after-test.js +++ b/test/before-and-after-test.js @@ -1,12 +1,12 @@ -import { assert } from 'chai'; -import sinon from 'sinon'; -import Alt from '../'; +import { assert } from 'chai' +import sinon from 'sinon' +import Alt from '../' -const alt = new Alt(); -const action = alt.generateActions('fire'); +const alt = new Alt() +const action = alt.generateActions('fire') -const beforeEach = sinon.spy(); -const afterEach = sinon.spy(); +const beforeEach = sinon.spy() +const afterEach = sinon.spy() alt.createStore({ displayName: 'Store', @@ -23,43 +23,43 @@ alt.createStore({ }, change(x) { - this.setState({ a: x }); + this.setState({ a: x }) } -}); +}) export default { 'Before and After hooks': { beforeEach() { - alt.recycle(); + alt.recycle() }, 'before and after hook fire once': function () { - action.fire(2); + action.fire(2) - assert.ok(beforeEach.calledOnce); - assert.ok(afterEach.calledOnce); + assert.ok(beforeEach.calledOnce) + assert.ok(afterEach.calledOnce) }, 'before is called before after': function () { - action.fire(2); + action.fire(2) - assert.ok(beforeEach.calledBefore(afterEach)); - assert.ok(afterEach.calledAfter(beforeEach)); + assert.ok(beforeEach.calledBefore(afterEach)) + assert.ok(afterEach.calledAfter(beforeEach)) }, 'args passed in': function () { - action.fire(2); + action.fire(2) - assert.ok(beforeEach.args[0].length === 1, '1 arg is passed'); - assert.ok(afterEach.args[0].length === 1, '1 arg is passed'); + assert.ok(beforeEach.args[0].length === 1, '1 arg is passed') + assert.ok(afterEach.args[0].length === 1, '1 arg is passed') - assert.ok(beforeEach.args[0][0].payload.data === 2, 'before has payload'); - assert.ok(afterEach.args[0][0].payload.data === 2, 'after has payload'); + assert.ok(beforeEach.args[0][0].payload.data === 2, 'before has payload') + assert.ok(afterEach.args[0][0].payload.data === 2, 'after has payload') }, 'before and after get state': function () { - let beforeValue = null; - let afterValue = null; + let beforeValue = null + let afterValue = null alt.createStore({ displayName: 'SpecialStore', @@ -69,21 +69,21 @@ export default { }, lifecycle: { beforeEach({ state }) { - beforeValue = state.a; + beforeValue = state.a }, afterEach({ state }) { - afterValue = state.a; + afterValue = state.a } }, change(x) { - this.setState({ a: x }); + this.setState({ a: x }) } - }); + }) - action.fire(2); + action.fire(2) - assert.ok(beforeValue === 1, 'before has current state'); - assert.ok(afterValue === 2, 'after has next state'); + assert.ok(beforeValue === 1, 'before has current state') + assert.ok(afterValue === 2, 'after has next state') } } -}; +} diff --git a/test/bound-listeners-test.js b/test/bound-listeners-test.js index c507a23d..bde0f9e2 100644 --- a/test/bound-listeners-test.js +++ b/test/bound-listeners-test.js @@ -1,13 +1,13 @@ -import { assert } from 'chai'; -import Alt from '../dist/alt-with-runtime'; +import { assert } from 'chai' +import Alt from '../dist/alt-with-runtime' -const alt = new Alt(); +const alt = new Alt() -const Actions = alt.generateActions('one', 'two', 'three'); +const Actions = alt.generateActions('one', 'two', 'three') class NoActions { constructor() { - this.bindActions(Actions); + this.bindActions(Actions) } foo() { } @@ -16,7 +16,7 @@ class NoActions { class OneAction { constructor() { - this.bindAction(Actions.ONE, this.one); + this.bindAction(Actions.ONE, this.one) } one() { } @@ -26,7 +26,7 @@ class TwoAction { constructor() { this.bindListeners({ two: Actions.TWO - }); + }) } two() { } @@ -34,7 +34,7 @@ class TwoAction { class BindActions { constructor() { - this.bindActions(Actions); + this.bindActions(Actions) } one() { } @@ -45,48 +45,48 @@ class BindActions { export default { 'Exporting listener names': { 'when no actions are listened on': function () { - const myStore = alt.createStore(NoActions); - assert(myStore.boundListeners.length === 0, 'none are returned'); + const myStore = alt.createStore(NoActions) + assert(myStore.boundListeners.length === 0, 'none are returned') }, 'when using bindAction': function () { - const myStore = alt.createStore(OneAction); - assert(myStore.boundListeners.length === 1); - assert(myStore.boundListeners[0] === Actions.ONE); + const myStore = alt.createStore(OneAction) + assert(myStore.boundListeners.length === 1) + assert(myStore.boundListeners[0] === Actions.ONE) }, 'when using bindListeners': function () { - const myStore = alt.createStore(TwoAction); - assert(myStore.boundListeners.length === 1); - assert(myStore.boundListeners[0] === Actions.TWO); + const myStore = alt.createStore(TwoAction) + assert(myStore.boundListeners.length === 1) + assert(myStore.boundListeners[0] === Actions.TWO) }, 'when using bindActions': function () { - const myStore = alt.createStore(BindActions); - assert(myStore.boundListeners.length === 2); + const myStore = alt.createStore(BindActions) + assert(myStore.boundListeners.length === 2) assert( myStore.boundListeners.indexOf(Actions.ONE) > -1 && myStore.boundListeners.indexOf(Actions.TWO) > -1 - ); + ) }, 'dispatching actions': function () { - const newAlt = new Alt(); + const newAlt = new Alt() - const one = newAlt.generateActions('one'); - const two = newAlt.generateActions('one'); + const one = newAlt.generateActions('one') + const two = newAlt.generateActions('one') newAlt.createStore(function Store() { this.bindAction(one.one, (x) => { - assert(x === 1); - }); + assert(x === 1) + }) this.bindAction(two.one, (x) => { - assert(x === 2); - }); - }); + assert(x === 2) + }) + }) - newAlt.dispatch('global.one', 1); - newAlt.dispatch('global.one1', 2); + newAlt.dispatch('global.one', 1) + newAlt.dispatch('global.one1', 2) } } -}; +} diff --git a/test/config-set-get-state-test.js b/test/config-set-get-state-test.js index 485ba7cb..2884e176 100644 --- a/test/config-set-get-state-test.js +++ b/test/config-set-get-state-test.js @@ -1,17 +1,17 @@ -import { assert } from 'chai'; -import sinon from 'sinon'; -import Alt from '../'; +import { assert } from 'chai' +import sinon from 'sinon' +import Alt from '../' export default { 'Config state getter and setter': { 'setting state': function () { const setState = sinon.stub().returns({ foo: 'bar' - }); + }) - const alt = new Alt({ setState }); + const alt = new Alt({ setState }) - const action = alt.generateActions('fire'); + const action = alt.generateActions('fire') const store = alt.createStore({ displayName: 'store', @@ -20,36 +20,36 @@ export default { }, state: { x: 1 }, fire() { - this.setState({ x: 2 }); + this.setState({ x: 2 }) } - }); + }) - assert(store.getState().x === 1); + assert(store.getState().x === 1) - action.fire(); + action.fire() - assert.ok(setState.calledOnce); - assert(setState.args[0].length === 2); - assert(store.getState().foo === 'bar'); + assert.ok(setState.calledOnce) + assert(setState.args[0].length === 2) + assert(store.getState().foo === 'bar') }, 'getting state': function () { const getState = sinon.stub().returns({ foo: 'bar' - }); + }) - const alt = new Alt({ getState }); + const alt = new Alt({ getState }) const store = alt.createStore({ displayName: 'store', state: { x: 1 } - }); + }) - assert.isUndefined(store.getState().x); + assert.isUndefined(store.getState().x) - assert.ok(getState.calledOnce); - assert(getState.args[0].length === 1); - assert(store.getState().foo === 'bar'); + assert.ok(getState.calledOnce) + assert(getState.args[0].length === 1) + assert(store.getState().foo === 'bar') } } -}; +} diff --git a/test/debug-alt-test.js b/test/debug-alt-test.js index 7d7d3d5d..4d982b76 100644 --- a/test/debug-alt-test.js +++ b/test/debug-alt-test.js @@ -1,31 +1,31 @@ -import { assert } from 'chai'; -import Alt from '../'; +import { assert } from 'chai' +import Alt from '../' export default { 'debug mode': { beforeEach() { - global.window = {}; + global.window = {} }, 'enable debug mode': function () { - const alt = new Alt(); - Alt.debug('an identifier', alt); + const alt = new Alt() + Alt.debug('an identifier', alt) - assert.isArray(global.window['alt.js.org']); - assert(global.window['alt.js.org'].length === 1); - assert.isString(global.window['alt.js.org'][0].name); - assert(global.window['alt.js.org'][0].alt === alt); + assert.isArray(global.window['alt.js.org']) + assert(global.window['alt.js.org'].length === 1) + assert.isString(global.window['alt.js.org'][0].name) + assert(global.window['alt.js.org'][0].alt === alt) }, afterEach() { - delete global.window; + delete global.window } }, 'isomorphic debug mode': { 'enable debug mode does not make things explode': function () { - const alt = new Alt(); - Alt.debug(alt); + const alt = new Alt() + Alt.debug(alt) } } -}; +} diff --git a/test/es3-module-pattern.js b/test/es3-module-pattern.js index cc5edc70..b510c9c6 100644 --- a/test/es3-module-pattern.js +++ b/test/es3-module-pattern.js @@ -1,10 +1,10 @@ -import { assert } from 'chai'; -import sinon from 'sinon'; -import Alt from '../dist/alt-with-runtime'; +import { assert } from 'chai' +import sinon from 'sinon' +import Alt from '../dist/alt-with-runtime' -const alt = new Alt(); +const alt = new Alt() -const actions = alt.generateActions('fire'); +const actions = alt.generateActions('fire') function MyStore() { const privateVariable = true; //eslint-disable-line @@ -18,7 +18,7 @@ function MyStore() { publicMethods: { getData() { - return this.getState().data; + return this.getState().data } }, @@ -29,62 +29,62 @@ function MyStore() { }, handleFire(data) { - this.setState({ data }); + this.setState({ data }) } - }; + } } -const myStore = alt.createStore(MyStore()); +const myStore = alt.createStore(MyStore()) export default { 'Creating store using ES3 module pattern': { beforeEach() { - alt.recycle(); - console.warn = function () { }; + alt.recycle() + console.warn = function () { } }, 'store method exists': function () { - const storePrototype = Object.getPrototypeOf(myStore); - const assertMethods = ['constructor', 'listen', 'unlisten', 'getState']; - assert.deepEqual(Object.getOwnPropertyNames(storePrototype), assertMethods, 'methods exist for store'); - assert.isUndefined(myStore.addListener, 'event emitter methods not present'); - assert.isUndefined(myStore.removeListener, 'event emitter methods not present'); - assert.isUndefined(myStore.emit, 'event emitter methods not present'); + const storePrototype = Object.getPrototypeOf(myStore) + const assertMethods = ['constructor', 'listen', 'unlisten', 'getState'] + assert.deepEqual(Object.getOwnPropertyNames(storePrototype), assertMethods, 'methods exist for store') + assert.isUndefined(myStore.addListener, 'event emitter methods not present') + assert.isUndefined(myStore.removeListener, 'event emitter methods not present') + assert.isUndefined(myStore.emit, 'event emitter methods not present') }, 'public methods available': function () { - assert.isFunction(myStore.getData, 'public methods are available'); - assert(myStore.getData() === 1, 'initial store data is set'); + assert.isFunction(myStore.getData, 'public methods are available') + assert(myStore.getData() === 1, 'initial store data is set') }, 'private and instance variables are not available': function () { - assert.isUndefined(myStore.privateVariable, 'encapsulated variables are not available'); - assert.isUndefined(myStore.testProperty, 'instance variables are not available'); + assert.isUndefined(myStore.privateVariable, 'encapsulated variables are not available') + assert.isUndefined(myStore.testProperty, 'instance variables are not available') }, 'firing an action': function () { - actions.fire(2); + actions.fire(2) - assert(myStore.getState().data === 2, 'action was fired and handled correctly'); + assert(myStore.getState().data === 2, 'action was fired and handled correctly') }, 'adding lifecycle events': function () { - const spy = sinon.spy(); + const spy = sinon.spy() class TestStore { constructor() { - this.lifecycle = { init: spy }; + this.lifecycle = { init: spy } this.state = { foo: 'bar' - }; + } } } - const store = alt.createStore(new TestStore()); + const store = alt.createStore(new TestStore()) - assert.ok(spy.calledOnce, 'lifecycle event was called'); - assert(store.getState().foo === 'bar', 'state is set'); + assert.ok(spy.calledOnce, 'lifecycle event was called') + assert(store.getState().foo === 'bar', 'state is set') }, 'set state': function () { @@ -98,18 +98,18 @@ export default { handleFire(data) { this.setState({ hello: data - }); + }) - this.setState(); + this.setState() } - }; + } - const store = alt.createStore(TestStore); - assert.isNull(store.getState().hello, 'store state property has not been set yet'); + const store = alt.createStore(TestStore) + assert.isNull(store.getState().hello, 'store state property has not been set yet') - actions.fire('world'); + actions.fire('world') - assert(store.getState().hello === 'world', 'store state was set using setState'); + assert(store.getState().hello === 'world', 'store state was set using setState') }, 'set state in lifecycle': function () { @@ -118,13 +118,13 @@ export default { lifecycle: { init() { - this.state.test = 'i am here'; + this.state.test = 'i am here' } } - }; + } - const store = alt.createStore(TestStore); - assert(store.getState().test === 'i am here', 'setting state on lifecycle'); + const store = alt.createStore(TestStore) + assert(store.getState().test === 'i am here', 'setting state on lifecycle') }, 'get instance works': function () { @@ -134,13 +134,13 @@ export default { handleFire: actions.FIRE }, handleFire() { - this.setState({ test: this.getInstance() }); + this.setState({ test: this.getInstance() }) } - }; + } - const store = alt.createStore(TestStore); - actions.fire(); - assert(store.getState().test === store); + const store = alt.createStore(TestStore) + actions.fire() + assert(store.getState().test === store) } } -}; +} diff --git a/test/failed-dispatch-test.js b/test/failed-dispatch-test.js index 5bde4c71..f6c4d420 100644 --- a/test/failed-dispatch-test.js +++ b/test/failed-dispatch-test.js @@ -1,94 +1,94 @@ -import { assert } from 'chai'; -import sinon from 'sinon'; -import Alt from '../dist/alt-with-runtime'; +import { assert } from 'chai' +import sinon from 'sinon' +import Alt from '../dist/alt-with-runtime' export default { 'catch failed dispatches': { 'uncaught dispatches result in an error': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); + const alt = new Alt() + const actions = alt.generateActions('fire') class Uncaught { constructor() { - this.bindListeners({ fire: actions.FIRE }); + this.bindListeners({ fire: actions.FIRE }) } fire() { - throw new Error('oops'); + throw new Error('oops') } } - alt.createStore(Uncaught); - assert.throws(() => { return actions.fire(); }); + alt.createStore(Uncaught) + assert.throws(() => { return actions.fire() }) }, 'errors can be caught though': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); + const alt = new Alt() + const actions = alt.generateActions('fire') class Caught { constructor() { - this.x = 0; - this.bindListeners({ fire: actions.FIRE }); + this.x = 0 + this.bindListeners({ fire: actions.FIRE }) this.on('error', () => { - this.x = 1; - }); + this.x = 1 + }) } fire() { - throw new Error('oops'); + throw new Error('oops') } } - const caught = alt.createStore(Caught); + const caught = alt.createStore(Caught) - const storeListener = sinon.spy(); + const storeListener = sinon.spy() - caught.listen(storeListener); + caught.listen(storeListener) - assert(caught.getState().x === 0); - assert.doesNotThrow(() => { return actions.fire(); }); - assert(caught.getState().x === 1); + assert(caught.getState().x === 0) + assert.doesNotThrow(() => { return actions.fire() }) + assert(caught.getState().x === 1) - assert.notOk(storeListener.calledOnce, 'the store did not emit a change'); + assert.notOk(storeListener.calledOnce, 'the store did not emit a change') - caught.unlisten(storeListener); + caught.unlisten(storeListener) }, 'you have to emit changes yourself': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); + const alt = new Alt() + const actions = alt.generateActions('fire') class CaughtReturn { constructor() { - this.x = 0; - this.bindListeners({ fire: actions.FIRE }); + this.x = 0 + this.bindListeners({ fire: actions.FIRE }) this.on('error', () => { - this.x = 1; - this.emitChange(); - }); + this.x = 1 + this.emitChange() + }) } fire() { - throw new Error('oops'); + throw new Error('oops') } } - const caughtReturn = alt.createStore(CaughtReturn); + const caughtReturn = alt.createStore(CaughtReturn) - const storeListener = sinon.spy(); + const storeListener = sinon.spy() - const dispose = caughtReturn.listen(storeListener); + const dispose = caughtReturn.listen(storeListener) - assert(caughtReturn.getState().x === 0); - assert.doesNotThrow(() => { return actions.fire(); }); - assert(caughtReturn.getState().x === 1); + assert(caughtReturn.getState().x === 0) + assert.doesNotThrow(() => { return actions.fire() }) + assert(caughtReturn.getState().x === 1) - assert.ok(storeListener.calledOnce); + assert.ok(storeListener.calledOnce) - dispose(); + dispose() } } -}; +} diff --git a/test/functional-test.js b/test/functional-test.js index 46ece626..5e0536d8 100644 --- a/test/functional-test.js +++ b/test/functional-test.js @@ -1,43 +1,43 @@ -import { assert } from 'chai'; -import sinon from 'sinon'; -import Alt from '../dist/alt-with-runtime'; +import { assert } from 'chai' +import sinon from 'sinon' +import Alt from '../dist/alt-with-runtime' export default { 'functional goodies for alt': { 'observing for changes in a POJO so we get context passed in': function () { - const alt = new Alt(); + const alt = new Alt() - const observe = sinon.stub().returns({}); - const displayName = 'store'; + const observe = sinon.stub().returns({}) + const displayName = 'store' - alt.createStore({ displayName, observe }); + alt.createStore({ displayName, observe }) - assert.ok(observe.calledOnce); - assert(observe.args[0][0] === alt, 'first arg is alt'); + assert.ok(observe.calledOnce) + assert(observe.args[0][0] === alt, 'first arg is alt') }, 'when observing changes, they are observed': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); + const alt = new Alt() + const actions = alt.generateActions('fire') - const displayName = 'store'; + const displayName = 'store' const store = alt.createStore({ displayName, observe() { - return { fire: actions.fire }; + return { fire: actions.fire } }, fire() { } - }); + }) - assert(store.boundListeners.length === 1, 'there is 1 action bound'); + assert(store.boundListeners.length === 1, 'there is 1 action bound') }, 'otherwise works like a haskell guard': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire', 'test'); + const alt = new Alt() + const actions = alt.generateActions('fire', 'test') - const spy = sinon.spy(); + const spy = sinon.spy() const store = alt.createStore({ displayName: 'store', @@ -47,32 +47,32 @@ export default { }, fire() { - this.setState({ x: 1 }); + this.setState({ x: 1 }) }, otherwise() { - this.setState({ x: 2 }); + this.setState({ x: 2 }) } - }); + }) - const kill = store.listen(spy); + const kill = store.listen(spy) - actions.test(); - assert(store.getState().x === 2, 'the otherwise clause was ran'); + actions.test() + assert(store.getState().x === 2, 'the otherwise clause was ran') - actions.fire(); - assert(store.getState().x === 1, 'just fire was ran'); + actions.fire() + assert(store.getState().x === 1, 'just fire was ran') - assert.ok(spy.calledTwice); + assert.ok(spy.calledTwice) - kill(); + kill() }, 'preventDefault prevents a change event to be emitted': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); + const alt = new Alt() + const actions = alt.generateActions('fire') - const spy = sinon.spy(); + const spy = sinon.spy() const store = alt.createStore({ displayName: 'store', @@ -82,24 +82,24 @@ export default { }, fire() { - this.setState({ x: 1 }); - this.preventDefault(); + this.setState({ x: 1 }) + this.preventDefault() } - }); + }) - const kill = store.listen(spy); + const kill = store.listen(spy) - actions.fire(); - assert(store.getState().x === 1, 'just fire was ran'); + actions.fire() + assert(store.getState().x === 1, 'just fire was ran') - assert(spy.callCount === 0, 'store listener was never called'); + assert(spy.callCount === 0, 'store listener was never called') - kill(); + kill() }, 'reduce fires on every dispatch if defined': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); + const alt = new Alt() + const actions = alt.generateActions('fire') const store = alt.createStore({ displayName: 'store', @@ -107,22 +107,22 @@ export default { state: { x: 0 }, reduce(state) { - if (state.x >= 3) return undefined; - return { x: state.x + 1 }; + if (state.x >= 3) return undefined + return { x: state.x + 1 } } - }); + }) - actions.fire(); - actions.fire(); - actions.fire(); - actions.fire(); + actions.fire() + actions.fire() + actions.fire() + actions.fire() - assert(store.getState().x === 3, 'counter was incremented'); + assert(store.getState().x === 3, 'counter was incremented') }, 'reduce doesnt emit if preventDefault': function () { - const alt = new Alt(); - const actions = alt.generateActions('fire'); + const alt = new Alt() + const actions = alt.generateActions('fire') const store = alt.createStore({ displayName: 'store', @@ -130,24 +130,24 @@ export default { state: { x: 0 }, reduce(state) { - this.preventDefault(); - return {}; + this.preventDefault() + return {} } - }); + }) - const spy = sinon.spy(); + const spy = sinon.spy() - const unsub = store.listen(spy); + const unsub = store.listen(spy) - actions.fire(); + actions.fire() - assert(spy.callCount === 0); + assert(spy.callCount === 0) - unsub(); + unsub() }, 'stores have a reduce method': function () { - const alt = new Alt(); + const alt = new Alt() const store = alt.createStore({ displayName: 'store', @@ -155,21 +155,21 @@ export default { state: { x: 0 }, reduce(state) { - return state; + return state } - }); + }) const store2 = alt.createStore({ displayName: 'store2', state: { x: 1 } - }); + }) - assert.isFunction(store.reduce); - assert.isFunction(store2.reduce); + assert.isFunction(store.reduce) + assert.isFunction(store2.reduce) - assert(store.reduce(store.state).x === 0); - assert(store2.reduce(store2.state).x === 1); + assert(store.reduce(store.state).x === 0) + assert(store2.reduce(store2.state).x === 1) } } -}; +} diff --git a/test/functions-test.js b/test/functions-test.js index 70fb5b13..8c0bc1f8 100644 --- a/test/functions-test.js +++ b/test/functions-test.js @@ -1,36 +1,36 @@ -import { assert } from 'chai'; -import * as fn from '../lib/functions'; -import Alt from '../dist/alt-with-runtime'; +import { assert } from 'chai' +import * as fn from '../lib/functions' +import Alt from '../dist/alt-with-runtime' -const alt = new Alt(); +const alt = new Alt() export default { 'test the functions.js isMutableObject()': { 'can import lib/functions': function () { - assert.ok(fn); - assert.ok(fn.isMutableObject); - assert(typeof fn.isMutableObject === 'function', 'isMutableObject is imported'); + assert.ok(fn) + assert.ok(fn.isMutableObject) + assert(typeof fn.isMutableObject === 'function', 'isMutableObject is imported') }, 'isMutableObject works on regular objects': function () { - const obj = {}; - const obj2 = { foo: 'bar' }; + const obj = {} + const obj2 = { foo: 'bar' } - assert(fn.isMutableObject(obj) === true, 'regular object should pass'); - assert(fn.isMutableObject(obj2) === true, 'regular object with fields should pass'); + assert(fn.isMutableObject(obj) === true, 'regular object should pass') + assert(fn.isMutableObject(obj2) === true, 'regular object with fields should pass') }, 'isMutableObject fails on non-objects': function () { - assert(fn.isMutableObject(false) === false, 'boolean should fail'); - assert(fn.isMutableObject(1) === false, 'integer should fail'); - assert(fn.isMutableObject(new Date()) === false, 'date should fail'); + assert(fn.isMutableObject(false) === false, 'boolean should fail') + assert(fn.isMutableObject(1) === false, 'integer should fail') + assert(fn.isMutableObject(new Date()) === false, 'date should fail') }, 'isMutableObject works on frozen objects': function () { - const obj = {}; - Object.freeze(obj); + const obj = {} + Object.freeze(obj) - assert(fn.isMutableObject(obj) === false, 'frozen objects should fail'); + assert(fn.isMutableObject(obj) === false, 'frozen objects should fail') } }, @@ -40,17 +40,17 @@ export default { constructor() { this.state = { foo: 'bar' - }; + } - assert(this.state.foo === 'bar', 'State is initialized'); + assert(this.state.foo === 'bar', 'State is initialized') } } - alt.createStore(NonFrozenStore, 'NonFrozenStore', alt); - alt.bootstrap('{"NonFrozenStore": {"foo":"bar2"}}'); + alt.createStore(NonFrozenStore, 'NonFrozenStore', alt) + alt.bootstrap('{"NonFrozenStore": {"foo":"bar2"}}') - const myStore = alt.getStore('NonFrozenStore'); - assert(myStore.getState().foo === 'bar2', 'State was bootstrapped with updated bar'); + const myStore = alt.getStore('NonFrozenStore') + assert(myStore.getState().foo === 'bar2', 'State was bootstrapped with updated bar') }, 'frozen store state can be bootstrapped': function () { @@ -58,26 +58,26 @@ export default { constructor() { this.config = { onDeserialize: (data) => { - Object.freeze(data); - return data; + Object.freeze(data) + return data } - }; + } this.state = { foo: 'bar' - }; + } - Object.freeze(this.state); + Object.freeze(this.state) - assert(this.state.foo === 'bar', 'State is initialized'); + assert(this.state.foo === 'bar', 'State is initialized') } } - alt.createStore(FrozenStateStore, 'FrozenStateStore', alt); - alt.bootstrap('{"FrozenStateStore": {"foo":"bar2"}}'); + alt.createStore(FrozenStateStore, 'FrozenStateStore', alt) + alt.bootstrap('{"FrozenStateStore": {"foo":"bar2"}}') - const myStore = alt.getStore('FrozenStateStore'); - assert(myStore.getState().foo === 'bar2', 'State was bootstrapped with updated bar'); + const myStore = alt.getStore('FrozenStateStore') + assert(myStore.getState().foo === 'bar2', 'State was bootstrapped with updated bar') } } -}; +} diff --git a/test/helpers/SaaM.js b/test/helpers/SaaM.js index 935ef26f..ea673fa0 100644 --- a/test/helpers/SaaM.js +++ b/test/helpers/SaaM.js @@ -1,6 +1,6 @@ -export const displayName = 'SaaM'; -export const state = 1; +export const displayName = 'SaaM' +export const state = 1 export function reduce(reduceState, payload) { //eslint-disable-line - return reduceState + 1; + return reduceState + 1 } diff --git a/test/helpers/SampleActions.js b/test/helpers/SampleActions.js index 7c187ed7..43b5ea3e 100644 --- a/test/helpers/SampleActions.js +++ b/test/helpers/SampleActions.js @@ -1,3 +1,3 @@ -import alt from './alt'; +import alt from './alt' -export default alt.generateActions('fire'); +export default alt.generateActions('fire') diff --git a/test/helpers/alt.js b/test/helpers/alt.js index 4ea77f2f..67e8f7c4 100644 --- a/test/helpers/alt.js +++ b/test/helpers/alt.js @@ -1,3 +1,3 @@ -import Alt from '../../dist/alt-with-runtime'; +import Alt from '../../dist/alt-with-runtime' -export default new Alt(); +export default new Alt() diff --git a/test/index.js b/test/index.js index 8451b7f5..ec205de3 100644 --- a/test/index.js +++ b/test/index.js @@ -1,8 +1,8 @@ -import { assert } from 'chai'; -import sinon from 'sinon'; -import Alt from '../'; +import { assert } from 'chai' +import sinon from 'sinon' +import Alt from '../' -const alt = new Alt(); +const alt = new Alt() class MyActions { constructor() { @@ -16,196 +16,196 @@ class MyActions { 'resetRecycled', 'asyncStoreAction', 'updateAnotherVal', - ); - this.generateActions('anotherAction'); + ) + this.generateActions('anotherAction') this.actionOnThis = (x) => { - return x; - }; + return x + } } updateName(name) { //eslint-disable-line - return name; + return name } justTestingInternalActions() { return { updateThree: this.updateThree, updateName: this.updateName - }; + } } moreActions() { return (dispatch) => { - dispatch(1); - this.moreActions2.defer(2); - this.moreActions3.defer(3); - }; + dispatch(1) + this.moreActions2.defer(2) + this.moreActions3.defer(3) + } } updateTwo(a, b) { - return { a, b }; + return { a, b } } updateThree(a, b, c) { - return { a, b, c }; + return { a, b, c } } } -const myActions = {}; -alt.createActions(MyActions, myActions); +const myActions = {} +alt.createActions(MyActions, myActions) const objActions = alt.createActions({ hello() { }, world() { } -}); +}) -const myShorthandActions = alt.generateActions('actionOne', 'actionTwo'); +const myShorthandActions = alt.generateActions('actionOne', 'actionTwo') class MyStore { constructor() { - const myActionsInst = this.alt.getActions('myActions'); + const myActionsInst = this.alt.getActions('myActions') if (myActionsInst) { - this.bindAction(myActionsInst.updateName, this.onUpdateName); + this.bindAction(myActionsInst.updateName, this.onUpdateName) } - this.bindAction(myActions.updateName, this.onUpdateName); - this.bindAction(myActions.CALL_INTERNAL_METHOD, this.doCallInternal); - this.bindAction(myActions.dontEmit, this.dontEmitEvent); - this.bindAction(myActions.asyncStoreAction, this.doStoreAsync); - this.name = 'first'; - this.calledInternal = false; - this.dontEmitEventCalled = false; - this.async = false; + this.bindAction(myActions.updateName, this.onUpdateName) + this.bindAction(myActions.CALL_INTERNAL_METHOD, this.doCallInternal) + this.bindAction(myActions.dontEmit, this.dontEmitEvent) + this.bindAction(myActions.asyncStoreAction, this.doStoreAsync) + this.name = 'first' + this.calledInternal = false + this.dontEmitEventCalled = false + this.async = false this.exportPublicMethods({ externalMethodNoStatic: this.externalMethodNoStatic - }); + }) - this._dispatcher = this.dispatcher; + this._dispatcher = this.dispatcher } doStoreAsync() { setTimeout(() => { - this.async = true; - this.getInstance().emitChange(); - }); - return false; + this.async = true + this.getInstance().emitChange() + }) + return false } onUpdateName(name) { - this.name = name; + this.name = name } doCallInternal() { - this.internalOnly(); + this.internalOnly() } internalOnly() { - this.calledInternal = true; + this.calledInternal = true } dontEmitEvent() { - this.dontEmitEventCalled = true; - return false; + this.dontEmitEventCalled = true + return false } static externalMethod() { - return true; + return true } externalMethodNoStatic() { - return true; + return true } } -const myStore = alt.createStore(MyStore); +const myStore = alt.createStore(MyStore) class SecondStore { constructor() { - this.foo = 'bar'; - this.name = myStore.getState().name; - this.instance = null; + this.foo = 'bar' + this.name = myStore.getState().name + this.instance = null - this.deferrals = 0; + this.deferrals = 0 - this.recycled = false; + this.recycled = false - this.bindActions(myActions); + this.bindActions(myActions) this.exportPublicMethods({ externalMethodNoStatic: this.externalMethodNoStatic, concatFooWithNoStatic: this.concatFooWithNoStatic - }); + }) this.on('init', () => { - this.recycled = true; - }); + this.recycled = true + }) } onResetRecycled() { - this.recycled = false; + this.recycled = false } onUpdateTwo(x) { - this.foo = x.a + x.b; + this.foo = x.a + x.b } updateThree(x) { - this.waitFor([myStore.dispatchToken]); - this.name = myStore.getState().name; - this.foo = x.a + x.b + x.c; + this.waitFor([myStore.dispatchToken]) + this.name = myStore.getState().name + this.foo = x.a + x.b + x.c } shortHandBinary(arr) { - this.foo = arr; + this.foo = arr } onUpdateName() { - this.waitFor(myStore.dispatchToken); - this.name = myStore.getState().name; + this.waitFor(myStore.dispatchToken) + this.name = myStore.getState().name } onGetInstanceInside() { - this.instance = this.getInstance(); + this.instance = this.getInstance() } onMoreActions(x) { - this.deferrals = x; + this.deferrals = x } onMoreActions2(x) { - this.deferrals = x; + this.deferrals = x } onMoreActions3(x) { - this.deferrals = x; + this.deferrals = x } static externalMethod() { - return this.getState().foo; + return this.getState().foo } externalMethodNoStatic() { - return this.getState().foo; + return this.getState().foo } static concatFooWith(x) { - return this.getState().foo + x; + return this.getState().foo + x } concatFooWithNoStatic(x) { - return this.getState().foo + x; + return this.getState().foo + x } } -const secondStore = alt.createStore(SecondStore, 'AltSecondStore'); +const secondStore = alt.createStore(SecondStore, 'AltSecondStore') class LifeCycleStore { static config = { onSerialize: (state) => { state.serialized = true; //eslint-disable-line - return state; + return state }, onDeserialize: (data) => { data.deserialized = true; //eslint-disable-line @@ -213,31 +213,31 @@ class LifeCycleStore { }; constructor() { - this.bootstrapped = false; - this.init = false; - this.rollback = false; - this.snapshotted = false; - this.serialized = false; - this.deserialized = false; + this.bootstrapped = false + this.init = false + this.rollback = false + this.snapshotted = false + this.serialized = false + this.deserialized = false this.bindListeners({ test: myActions.updateName, test2: [myActions.updateName, myActions.updateTwo], test3: myActions.updateName - }); + }) this.on('init', () => { - this.init = true; - }); + this.init = true + }) this.on('bootstrap', () => { - this.bootstrapped = true; - }); + this.bootstrapped = true + }) this.on('snapshot', () => { - this.snapshotted = true; - }); + this.snapshotted = true + }) this.on('rollback', () => { - this.rollback = true; - }); + this.rollback = true + }) } test() { } @@ -245,33 +245,33 @@ class LifeCycleStore { test3() { } } -const lifecycleStore = alt.createStore(LifeCycleStore); +const lifecycleStore = alt.createStore(LifeCycleStore) class ThirdStore { constructor() { - this.bindAction(myActions.updateName, this.onUpdateName); + this.bindAction(myActions.updateName, this.onUpdateName) } onUpdateName() { - this.waitFor(myStore, secondStore); // Not referencing dispatchToken! - this.name = `${secondStore.getState().name}3`; + this.waitFor(myStore, secondStore) // Not referencing dispatchToken! + this.name = `${secondStore.getState().name}3` } } -const thirdStore = alt.createStore(ThirdStore); +const thirdStore = alt.createStore(ThirdStore) class Model { constructor({ x, y }) { - this.x = x; - this.y = y; + this.x = x + this.y = y } get sum() { - return this.x + this.y; + return this.x + this.y } get product() { - return this.x * this.y; + return this.x * this.y } get data() { @@ -280,7 +280,7 @@ class Model { y: this.y, sum: this.sum, product: this.product - }; + } } } @@ -290,219 +290,219 @@ class InterceptSnapshotStore { return { modelData: state.modelData.data, anotherVal: state.anotherVal - }; + } }, onDeserialize: (data) => { const obj = { modelData: new Model({ x: data.modelData.x, y: data.modelData.y }), anotherVal: data.anotherVal - }; - return obj; + } + return obj } }; constructor() { - this.bindAction(myActions.updateAnotherVal, this.onUpdateAnotherVal); + this.bindAction(myActions.updateAnotherVal, this.onUpdateAnotherVal) - this.modelData = new Model({ x: 2, y: 3 }); - this.anotherVal = 5; - this.privateVal = 10; + this.modelData = new Model({ x: 2, y: 3 }) + this.anotherVal = 5 + this.privateVal = 10 } onUpdateAnotherVal(newVal) { - this.anotherVal = newVal; + this.anotherVal = newVal } static getModelData() { - return this.getState().modelData.data; + return this.getState().modelData.data } } -const interceptSnapshotStore = alt.createStore(InterceptSnapshotStore); +const interceptSnapshotStore = alt.createStore(InterceptSnapshotStore) // Alt instances... class AltInstance extends Alt { constructor() { - super(); - this.addActions('myActions', MyActions, this); - this.addActions('fauxActions', ['one', 'two']); - this.addStore('myStore', MyStore, this); + super() + this.addActions('myActions', MyActions, this) + this.addActions('fauxActions', ['one', 'two']) + this.addStore('myStore', MyStore, this) } } -const altInstance = new AltInstance(); +const altInstance = new AltInstance() // Really confusing set of instances -const alt1 = new Alt(); -const alt2 = new Alt(); +const alt1 = new Alt() +const alt2 = new Alt() function NameActions() { } NameActions.prototype.updateName = (name) => { - return name; -}; + return name +} -const nameActions1 = alt1.createActions(NameActions); -const nameActions2 = alt2.createActions(NameActions); +const nameActions1 = alt1.createActions(NameActions) +const nameActions2 = alt2.createActions(NameActions) function NameStore() { - this.bindActions(nameActions1); - this.bindActions(nameActions2); - this.name = 'foo'; + this.bindActions(nameActions1) + this.bindActions(nameActions2) + this.name = 'foo' } NameStore.prototype.onUpdateName = function onUpdateName(name) { - this.name = name; -}; + this.name = name +} -const nameStore1 = alt1.createStore(NameStore); -const nameStore2 = alt2.createStore(NameStore); +const nameStore1 = alt1.createStore(NameStore) +const nameStore2 = alt2.createStore(NameStore) -const consoleWarn = console.warn.bind(console); +const consoleWarn = console.warn.bind(console) /* istanbul ignore next */ const tests = { beforeEach() { - alt.recycle(); - altInstance.recycle(); - alt1.recycle(); - alt2.recycle(); + alt.recycle() + altInstance.recycle() + alt1.recycle() + alt2.recycle() console.warn = consoleWarn; //eslint-disable-line }, 'alt instance': () => { - assert.isFunction(alt.bootstrap, 'bootstrap function exists'); - assert.isObject(alt.dispatcher, 'dispatcher exists'); - assert.isFunction(alt.dispatcher.register, 'dispatcher function exists for listening to all events'); - assert.isFunction(alt.takeSnapshot, 'snapshot function exists for saving app state'); - assert.isFunction(alt.createActions, 'createActions function'); - assert.isFunction(alt.createStore, 'createStore function'); - assert.isObject(alt.stores.AltSecondStore, 'store exists in alt.stores'); + assert.isFunction(alt.bootstrap, 'bootstrap function exists') + assert.isObject(alt.dispatcher, 'dispatcher exists') + assert.isFunction(alt.dispatcher.register, 'dispatcher function exists for listening to all events') + assert.isFunction(alt.takeSnapshot, 'snapshot function exists for saving app state') + assert.isFunction(alt.createActions, 'createActions function') + assert.isFunction(alt.createStore, 'createStore function') + assert.isObject(alt.stores.AltSecondStore, 'store exists in alt.stores') }, 'store methods': () => { - const storePrototype = Object.getPrototypeOf(myStore); - const assertMethods = ['constructor', 'listen', 'unlisten', 'getState']; - assert.deepEqual(Object.getOwnPropertyNames(storePrototype), assertMethods, 'methods exist for store'); - assert.isUndefined(myStore.addListener, 'event emitter methods not present'); - assert.isUndefined(myStore.removeListener, 'event emitter methods not present'); - assert.isUndefined(myStore.emit, 'event emitter methods not present'); + const storePrototype = Object.getPrototypeOf(myStore) + const assertMethods = ['constructor', 'listen', 'unlisten', 'getState'] + assert.deepEqual(Object.getOwnPropertyNames(storePrototype), assertMethods, 'methods exist for store') + assert.isUndefined(myStore.addListener, 'event emitter methods not present') + assert.isUndefined(myStore.removeListener, 'event emitter methods not present') + assert.isUndefined(myStore.emit, 'event emitter methods not present') }, 'store external methods': () => { - assert.isFunction(myStore.externalMethod, 'static methods are made available'); - assert.isFunction(myStore.externalMethodNoStatic, 'methods via mixin are made available'); - assert(myStore.externalMethod() === true, 'static methods return proper result'); - assert(myStore.externalMethodNoStatic() === true, 'methods via mixin return proper result'); - assert.isFunction(secondStore.externalMethod, 'static methods are made available'); - assert.isFunction(secondStore.externalMethodNoStatic, 'static methods are made available'); - assert(secondStore.externalMethod() === 'bar', 'static methods have `this` bound to the instance'); - assert(secondStore.externalMethodNoStatic() === 'bar', 'static methods have `this` bound to the instance'); - assert(secondStore.concatFooWith('baz') === 'barbaz', 'static methods may be called with params too'); - assert(secondStore.concatFooWithNoStatic('baz') === 'barbaz', 'static methods may be called with params too'); + assert.isFunction(myStore.externalMethod, 'static methods are made available') + assert.isFunction(myStore.externalMethodNoStatic, 'methods via mixin are made available') + assert(myStore.externalMethod() === true, 'static methods return proper result') + assert(myStore.externalMethodNoStatic() === true, 'methods via mixin return proper result') + assert.isFunction(secondStore.externalMethod, 'static methods are made available') + assert.isFunction(secondStore.externalMethodNoStatic, 'static methods are made available') + assert(secondStore.externalMethod() === 'bar', 'static methods have `this` bound to the instance') + assert(secondStore.externalMethodNoStatic() === 'bar', 'static methods have `this` bound to the instance') + assert(secondStore.concatFooWith('baz') === 'barbaz', 'static methods may be called with params too') + assert(secondStore.concatFooWithNoStatic('baz') === 'barbaz', 'static methods may be called with params too') }, 'getting state': () => { - assert.isObject(myStore.getState()._dispatcher, 'the dispatcher is exposed internally'); - - assert(lifecycleStore.getState().bootstrapped === false, 'bootstrap has not been called yet'); - assert(lifecycleStore.getState().snapshotted === false, 'takeSnapshot has not been called yet'); - assert(lifecycleStore.getState().serialized === false, 'takeSnapshot has not been called yet'); - assert(lifecycleStore.getState().rollback === false, 'rollback has not been called'); - assert(lifecycleStore.getState().init === true, 'init gets called when store initializes'); - assert(lifecycleStore.getState().deserialized === true, 'deserialize has not been called yet'); + assert.isObject(myStore.getState()._dispatcher, 'the dispatcher is exposed internally') + + assert(lifecycleStore.getState().bootstrapped === false, 'bootstrap has not been called yet') + assert(lifecycleStore.getState().snapshotted === false, 'takeSnapshot has not been called yet') + assert(lifecycleStore.getState().serialized === false, 'takeSnapshot has not been called yet') + assert(lifecycleStore.getState().rollback === false, 'rollback has not been called') + assert(lifecycleStore.getState().init === true, 'init gets called when store initializes') + assert(lifecycleStore.getState().deserialized === true, 'deserialize has not been called yet') }, 'snapshots and bootstrapping': () => { - const initialSnapshot = alt.takeSnapshot(); - assert(lifecycleStore.getState().snapshotted === true, 'takeSnapshot was called and the life cycle event was triggered'); - - const bootstrapReturnValue = alt.bootstrap(initialSnapshot); - assert(bootstrapReturnValue === undefined, 'bootstrap returns nothing'); - assert(lifecycleStore.getState().bootstrapped === true, 'bootstrap was called and the life cycle event was triggered'); - assert(lifecycleStore.getState().snapshotted === true, 'snapshot was called and the life cycle event was triggered'); - assert(lifecycleStore.getState().serialized === true, 'takeSnapshot has not been called yet'); - assert(lifecycleStore.getState().deserialized === true, 'deserialize was called and the life cycle event was triggered'); + const initialSnapshot = alt.takeSnapshot() + assert(lifecycleStore.getState().snapshotted === true, 'takeSnapshot was called and the life cycle event was triggered') + + const bootstrapReturnValue = alt.bootstrap(initialSnapshot) + assert(bootstrapReturnValue === undefined, 'bootstrap returns nothing') + assert(lifecycleStore.getState().bootstrapped === true, 'bootstrap was called and the life cycle event was triggered') + assert(lifecycleStore.getState().snapshotted === true, 'snapshot was called and the life cycle event was triggered') + assert(lifecycleStore.getState().serialized === true, 'takeSnapshot has not been called yet') + assert(lifecycleStore.getState().deserialized === true, 'deserialize was called and the life cycle event was triggered') }, 'existence of actions': () => { - assert.isFunction(myActions.anotherAction, 'shorthand function created with createAction exists'); - assert.isFunction(myActions.callInternalMethod, 'shorthand function created with createActions exists'); - assert.isFunction(myActions.updateName, 'prototype defined actions exist'); - assert.isFunction(myActions.updateTwo, 'prototype defined actions exist'); - assert.isFunction(myActions.updateThree, 'prototype defined actions exist'); - assert.isFunction(myShorthandActions.actionOne, 'action created with shorthand createActions exists'); - assert.isFunction(myShorthandActions.actionTwo, 'other action created with shorthand createActions exists'); - assert.isFunction(objActions.hello, 'actions created by obj are functions'); - assert.isFunction(objActions.world, 'actions created by obj are functions'); - assert.isFunction(myActions.actionOnThis, 'actions defined in `this` are functions'); + assert.isFunction(myActions.anotherAction, 'shorthand function created with createAction exists') + assert.isFunction(myActions.callInternalMethod, 'shorthand function created with createActions exists') + assert.isFunction(myActions.updateName, 'prototype defined actions exist') + assert.isFunction(myActions.updateTwo, 'prototype defined actions exist') + assert.isFunction(myActions.updateThree, 'prototype defined actions exist') + assert.isFunction(myShorthandActions.actionOne, 'action created with shorthand createActions exists') + assert.isFunction(myShorthandActions.actionTwo, 'other action created with shorthand createActions exists') + assert.isFunction(objActions.hello, 'actions created by obj are functions') + assert.isFunction(objActions.world, 'actions created by obj are functions') + assert.isFunction(myActions.actionOnThis, 'actions defined in `this` are functions') }, 'existence of constants': () => { - assert.isDefined(myActions.UPDATE_NAME, 'a constant is created for each action'); - assert.isDefined(myActions.UPDATE_TWO, 'a constant is created for each action'); - assert.isDefined(myActions.CALL_INTERNAL_METHOD, 'a constant is created for each action'); + assert.isDefined(myActions.UPDATE_NAME, 'a constant is created for each action') + assert.isDefined(myActions.UPDATE_TWO, 'a constant is created for each action') + assert.isDefined(myActions.CALL_INTERNAL_METHOD, 'a constant is created for each action') }, 'helper functions': () => { - assert.isFunction(myActions.updateName.defer, 'actions have a defer method for async flow'); + assert.isFunction(myActions.updateName.defer, 'actions have a defer method for async flow') }, 'internal actions': () => { - const internalActions = myActions.justTestingInternalActions(); - assert.isFunction(internalActions.updateThree, 'actions (below) are available internally through this.actions'); - assert.isFunction(internalActions.updateName, 'actions (above) are available internally through this.actions'); - assert.isFunction(internalActions.updateName.defer, 'making sure internal actions has a defer as well'); - assert.isFunction(internalActions.updateThree.defer, 'making sure internal actions has a defer as well'); + const internalActions = myActions.justTestingInternalActions() + assert.isFunction(internalActions.updateThree, 'actions (below) are available internally through this.actions') + assert.isFunction(internalActions.updateName, 'actions (above) are available internally through this.actions') + assert.isFunction(internalActions.updateName.defer, 'making sure internal actions has a defer as well') + assert.isFunction(internalActions.updateThree.defer, 'making sure internal actions has a defer as well') - assert.isFunction(myStore.getState, 'the store has a getState method exposed'); - assert.isUndefined(myStore.internalOnly, 'internal only method isnt available'); + assert.isFunction(myStore.getState, 'the store has a getState method exposed') + assert.isUndefined(myStore.internalOnly, 'internal only method isnt available') - assert(myStore.getState().name === 'first', 'store has been initialized properly'); - assert(myStore.getState().calledInternal === false, 'store has been initialized properly'); + assert(myStore.getState().name === 'first', 'store has been initialized properly') + assert(myStore.getState().calledInternal === false, 'store has been initialized properly') }, 'calling actions': () => { - const actionReturnType = myActions.updateName('bear'); - assert(actionReturnType === 'bear', 'action returns what is dispatched'); + const actionReturnType = myActions.updateName('bear') + assert(actionReturnType === 'bear', 'action returns what is dispatched') - assert(myStore.getState().name === 'bear', 'action was called, state was updated properly'); - assert(myStore.getState().calledInternal === false, 'internal method has not been called'); - assert(secondStore.getState().name === 'bear', 'second store gets its value from myStore'); - assert(thirdStore.getState().name === 'bear3', 'third store gets its value from secondStore, adds 3'); + assert(myStore.getState().name === 'bear', 'action was called, state was updated properly') + assert(myStore.getState().calledInternal === false, 'internal method has not been called') + assert(secondStore.getState().name === 'bear', 'second store gets its value from myStore') + assert(thirdStore.getState().name === 'bear3', 'third store gets its value from secondStore, adds 3') }, 'calling internal methods': () => { - myActions.callInternalMethod(); - assert(myStore.getState().calledInternal === true, 'internal method has been called successfully by an action'); + myActions.callInternalMethod() + assert(myStore.getState().calledInternal === true, 'internal method has been called successfully by an action') }, snapshotting() { - myActions.updateName('bear'); - const snapshot = alt.takeSnapshot(); - assert.isString(snapshot, 'a snapshot json is returned'); - assert(JSON.parse(snapshot).MyStore.name === 'bear', 'the state is current'); - assert.isObject(JSON.parse(snapshot).AltSecondStore, 'the custom identifier name works'); - - myActions.updateName('blossom'); - assert(myStore.getState().name === 'blossom', 'action was called, state was updated properly'); - assert(JSON.parse(snapshot).MyStore.name === 'bear', 'the snapshot is not affected by action'); + myActions.updateName('bear') + const snapshot = alt.takeSnapshot() + assert.isString(snapshot, 'a snapshot json is returned') + assert(JSON.parse(snapshot).MyStore.name === 'bear', 'the state is current') + assert.isObject(JSON.parse(snapshot).AltSecondStore, 'the custom identifier name works') + + myActions.updateName('blossom') + assert(myStore.getState().name === 'blossom', 'action was called, state was updated properly') + assert(JSON.parse(snapshot).MyStore.name === 'bear', 'the snapshot is not affected by action') }, 'specifying stores to snapshot': () => { - const snapshot = alt.takeSnapshot('MyStore', 'AltSecondStore'); - assert.deepEqual(Object.keys(JSON.parse(snapshot)), ['MyStore', 'AltSecondStore'], 'the snapshot includes specified stores'); - assert(Object.keys(JSON.parse(snapshot)).indexOf('LifeCycleStore') === -1, 'the snapshot does not include unspecified stores'); + const snapshot = alt.takeSnapshot('MyStore', 'AltSecondStore') + assert.deepEqual(Object.keys(JSON.parse(snapshot)), ['MyStore', 'AltSecondStore'], 'the snapshot includes specified stores') + assert(Object.keys(JSON.parse(snapshot)).indexOf('LifeCycleStore') === -1, 'the snapshot does not include unspecified stores') - const snapshot2 = alt.takeSnapshot(myStore, secondStore); - assert.deepEqual(Object.keys(JSON.parse(snapshot2)), ['MyStore', 'AltSecondStore'], 'the snapshot includes specified stores'); - assert(Object.keys(JSON.parse(snapshot2)).indexOf('LifeCycleStore') === -1, 'the snapshot does not include unspecified stores'); + const snapshot2 = alt.takeSnapshot(myStore, secondStore) + assert.deepEqual(Object.keys(JSON.parse(snapshot2)), ['MyStore', 'AltSecondStore'], 'the snapshot includes specified stores') + assert(Object.keys(JSON.parse(snapshot2)).indexOf('LifeCycleStore') === -1, 'the snapshot does not include unspecified stores') }, 'serializing/deserializing snapshot/bootstrap data': () => { - myActions.updateAnotherVal(11); - const snapshot = alt.takeSnapshot(); + myActions.updateAnotherVal(11) + const snapshot = alt.takeSnapshot() const expectedSerializedData = { modelData: { x: 2, @@ -511,146 +511,146 @@ const tests = { product: 6 }, anotherVal: 11 - }; + } // serializes snapshot data correctly - assert.deepEqual(JSON.parse(snapshot).InterceptSnapshotStore, expectedSerializedData, 'interceptSnapshotStore was serialized correctly'); - alt.rollback(); + assert.deepEqual(JSON.parse(snapshot).InterceptSnapshotStore, expectedSerializedData, 'interceptSnapshotStore was serialized correctly') + alt.rollback() // deserializes data correctly - assert.deepEqual(interceptSnapshotStore.getModelData(), expectedSerializedData.modelData); + assert.deepEqual(interceptSnapshotStore.getModelData(), expectedSerializedData.modelData) }, mutation() { - const state = myStore.getState(); - state.name = 'foobar'; - assert(state.name === 'foobar', 'mutated returned state'); - assert(myStore.getState().name === 'first', 'store state was not mutated'); + const state = myStore.getState() + state.name = 'foobar' + assert(state.name === 'foobar', 'mutated returned state') + assert(myStore.getState().name === 'first', 'store state was not mutated') }, 'rolling back': () => { - const rollbackValue = alt.rollback(); - assert(rollbackValue === undefined, 'rollback returns nothing'); + const rollbackValue = alt.rollback() + assert(rollbackValue === undefined, 'rollback returns nothing') - assert(myStore.getState().name === 'first', 'state has been rolledback to last snapshot'); - assert(lifecycleStore.getState().rollback === true, 'rollback lifecycle method was called'); + assert(myStore.getState().name === 'first', 'state has been rolledback to last snapshot') + assert(lifecycleStore.getState().rollback === true, 'rollback lifecycle method was called') - myActions.updateName('blossom'); + myActions.updateName('blossom') // check that subsequent snapshots overwrite the LAST_SNAPSHOT such that // they can be rolled back to - alt.takeSnapshot(); - alt.rollback(); - assert(myStore.getState().name === 'blossom', 'rolled back to second snapshot'); + alt.takeSnapshot() + alt.rollback() + assert(myStore.getState().name === 'blossom', 'rolled back to second snapshot') }, 'store listening': () => { const mooseChecker = (x) => { - assert(x.name === 'moose', 'listener for store works'); - assert(myStore.getState().name === 'moose', 'new store state present'); - }; - const dispose = myStore.listen(mooseChecker); - myActions.updateName('moose'); + assert(x.name === 'moose', 'listener for store works') + assert(myStore.getState().name === 'moose', 'new store state present') + } + const dispose = myStore.listen(mooseChecker) + myActions.updateName('moose') - assert(myStore.getState().name === 'moose', 'new store state present'); + assert(myStore.getState().name === 'moose', 'new store state present') - dispose(); - myActions.updateName('badger'); + dispose() + myActions.updateName('badger') - assert(myStore.getState().name === 'badger', 'new store state present'); + assert(myStore.getState().name === 'badger', 'new store state present') }, unlistening() { - assert(myStore.getState().name !== 'moose', 'state has not been updated'); + assert(myStore.getState().name !== 'moose', 'state has not been updated') - const mooseChecker = sinon.spy(); - const unlisten = myStore.listen(mooseChecker); - myActions.updateName('moose'); + const mooseChecker = sinon.spy() + const unlisten = myStore.listen(mooseChecker) + myActions.updateName('moose') - assert(myStore.getState().name === 'moose', 'new store state present'); + assert(myStore.getState().name === 'moose', 'new store state present') - unlisten(); + unlisten() - myActions.updateName('badger'); + myActions.updateName('badger') - assert(myStore.getState().name === 'badger', 'new store state present'); - assert.ok(mooseChecker.calledOnce); + assert(myStore.getState().name === 'badger', 'new store state present') + assert.ok(mooseChecker.calledOnce) }, 'unlisten lifecycle hook': () => { - const unlistener = sinon.spy(); + const unlistener = sinon.spy() class XStore { constructor() { - this.on('unlisten', unlistener); + this.on('unlisten', unlistener) } } - const store = alt.createStore(XStore); + const store = alt.createStore(XStore) // unlisten directly - store.listen(() => { })(); + store.listen(() => { })() - assert.ok(unlistener.calledOnce, 'unlisten lifecycle hook called'); + assert.ok(unlistener.calledOnce, 'unlisten lifecycle hook called') }, bootstrapping() { - alt.bootstrap('{"MyStore":{"name":"bee"}}'); - assert(myStore.getState().name === 'bee', 'I can bootstrap many times'); + alt.bootstrap('{"MyStore":{"name":"bee"}}') + assert(myStore.getState().name === 'bee', 'I can bootstrap many times') - alt.bootstrap('{}'); + alt.bootstrap('{}') - alt.bootstrap('{"MyStore":{"name":"monkey"}}'); - assert(myStore.getState().name === 'monkey', 'I can bootstrap many times'); + alt.bootstrap('{"MyStore":{"name":"monkey"}}') + assert(myStore.getState().name === 'monkey', 'I can bootstrap many times') }, 'variadic actions': (done) => { - myActions.updateTwo(4, 2); - assert(secondStore.getState().foo === 6, 'im able to pass two params into an action'); + myActions.updateTwo(4, 2) + assert(secondStore.getState().foo === 6, 'im able to pass two params into an action') - myActions.updateThree(4, 2, 1); - assert(secondStore.getState().foo === 7, 'the store method updateThree works'); + myActions.updateThree(4, 2, 1) + assert(secondStore.getState().foo === 7, 'the store method updateThree works') - myActions.shortHandBinary(1, 0); - assert(Array.isArray(secondStore.getState().foo) === true, 'shorthand for multiple elements pass through goes as array'); - assert(secondStore.getState().foo[0] === 1, 'shorthand for multiple elements pass through goes as array'); - assert(secondStore.getState().foo[1] === 0, 'shorthand for multiple elements pass through goes as array'); + myActions.shortHandBinary(1, 0) + assert(Array.isArray(secondStore.getState().foo) === true, 'shorthand for multiple elements pass through goes as array') + assert(secondStore.getState().foo[0] === 1, 'shorthand for multiple elements pass through goes as array') + assert(secondStore.getState().foo[1] === 0, 'shorthand for multiple elements pass through goes as array') - myActions.shortHandBinary.defer(2, 1); + myActions.shortHandBinary.defer(2, 1) setTimeout(() => { - assert(secondStore.getState().foo[0] === 2, 'shorthand for defer multiple elements pass through goes as array'); - assert(secondStore.getState().foo[1] === 1, 'shorthand for defer multiple elements pass through goes as array'); - done(); - }); + assert(secondStore.getState().foo[0] === 2, 'shorthand for defer multiple elements pass through goes as array') + assert(secondStore.getState().foo[1] === 1, 'shorthand for defer multiple elements pass through goes as array') + done() + }) }, 'access of stores': () => { - assert(secondStore.foo === undefined, 'cant access state properties that live inside store'); - assert(secondStore.bindAction === undefined, 'cant access action listeners from outside store'); - assert(secondStore.bindActions === undefined, 'cant access action listeners from outside store'); + assert(secondStore.foo === undefined, 'cant access state properties that live inside store') + assert(secondStore.bindAction === undefined, 'cant access action listeners from outside store') + assert(secondStore.bindActions === undefined, 'cant access action listeners from outside store') }, 'deferral of actions': (done) => { - myActions.updateName('gerenuk'); - assert(myStore.getState().name === 'gerenuk', 'store state was updated properly'); - myActions.updateName.defer('marmot'); - assert(myStore.getState().name === 'gerenuk', 'store state has same name (for now)'); + myActions.updateName('gerenuk') + assert(myStore.getState().name === 'gerenuk', 'store state was updated properly') + myActions.updateName.defer('marmot') + assert(myStore.getState().name === 'gerenuk', 'store state has same name (for now)') setTimeout(() => { - assert(myStore.getState().name === 'marmot', 'store state was updated with defer'); - done(); - }); + assert(myStore.getState().name === 'marmot', 'store state was updated with defer') + done() + }) }, 'getting instance': () => { - assert.isFunction(myActions.getInstanceInside, 'action for getting the instance inside'); - assert(secondStore.getState().instance === null, 'instance is null because it has not been set'); - myActions.getInstanceInside(); - assert.isObject(secondStore.getState().instance, 'instance has been now set'); - assert.isFunction(secondStore.getState().instance.getState, 'instance is a pointer to secondStore'); - assert.isFunction(secondStore.getState().instance.externalMethod, 'instance has the static methods available'); - assert(secondStore.getState().instance.externalMethod() === 'bar', 'calling a static method from instance and able to use this inside'); + assert.isFunction(myActions.getInstanceInside, 'action for getting the instance inside') + assert(secondStore.getState().instance === null, 'instance is null because it has not been set') + myActions.getInstanceInside() + assert.isObject(secondStore.getState().instance, 'instance has been now set') + assert.isFunction(secondStore.getState().instance.getState, 'instance is a pointer to secondStore') + assert.isFunction(secondStore.getState().instance.externalMethod, 'instance has the static methods available') + assert(secondStore.getState().instance.externalMethod() === 'bar', 'calling a static method from instance and able to use this inside') }, 'conflicting listeners on a store': () => { class StoreWithManyListeners { constructor() { - this.bindActions(myActions); + this.bindActions(myActions) } // listeners with same action @@ -658,7 +658,7 @@ const tests = { onUpdateName() { } } - assert.throw(() => { return alt.createStore(StoreWithManyListeners); }, ReferenceError, 'You have multiple action handlers bound to an action: updateName and onUpdateName'); + assert.throw(() => { return alt.createStore(StoreWithManyListeners) }, ReferenceError, 'You have multiple action handlers bound to an action: updateName and onUpdateName') class EvilStore { updateName() { } @@ -666,357 +666,357 @@ const tests = { class InnocentStore extends EvilStore { constructor() { - super(); - this.bindActions(myActions); + super() + this.bindActions(myActions) } onUpdateName() { } } - assert.throw(() => { return alt.createStore(InnocentStore); }, ReferenceError, 'You have multiple action handlers bound to an action: updateName and onUpdateName'); + assert.throw(() => { return alt.createStore(InnocentStore) }, ReferenceError, 'You have multiple action handlers bound to an action: updateName and onUpdateName') }, 'registering invalid action handlers': () => { class StoreWithInvalidActionHandlers { constructor() { - this.bindAction(myActions.THIS_DOES_NOT_EXIST, this.trololol); + this.bindAction(myActions.THIS_DOES_NOT_EXIST, this.trololol) } trololol() { } } - assert.throw(() => { return alt.createStore(StoreWithInvalidActionHandlers); }, ReferenceError, 'Invalid action reference passed in'); + assert.throw(() => { return alt.createStore(StoreWithInvalidActionHandlers) }, ReferenceError, 'Invalid action reference passed in') class StoreWithInvalidActionHandlers2 { constructor() { - this.bindAction(myActions.UPDATE_NAME, this.invisibleFunction); + this.bindAction(myActions.UPDATE_NAME, this.invisibleFunction) } } - assert.throw(() => { return alt.createStore(StoreWithInvalidActionHandlers2); }, TypeError, 'bindAction expects a function'); + assert.throw(() => { return alt.createStore(StoreWithInvalidActionHandlers2) }, TypeError, 'bindAction expects a function') }, 'exporting invalid store methods': () => { class StoreWithInvalidExportType { constructor() { - this.foo = 'bar'; - this.exportPublicMethods({ foo: 'foo' }); + this.foo = 'bar' + this.exportPublicMethods({ foo: 'foo' }) } } - assert.throw(() => { return alt.createStore(StoreWithInvalidExportType); }, TypeError, 'exportPublicMethods expects a function'); + assert.throw(() => { return alt.createStore(StoreWithInvalidExportType) }, TypeError, 'exportPublicMethods expects a function') }, 'waiting for nothing': () => { class WaitPlease { constructor() { - this.generateActions('pleaseWait'); + this.generateActions('pleaseWait') } } - const waiter = alt.createActions(WaitPlease); + const waiter = alt.createActions(WaitPlease) alt.createStore(class WaitsForNobody { constructor() { - this.bindActions(waiter); + this.bindActions(waiter) } pleaseWait() { - this.waitFor(); + this.waitFor() } - }); + }) - assert.throw(() => { return waiter.pleaseWait(); }, ReferenceError, 'Dispatch tokens not provided'); + assert.throw(() => { return waiter.pleaseWait() }, ReferenceError, 'Dispatch tokens not provided') }, 'cancelling emit': () => { function eventEmittedFail() { - assert(true === false, 'event was emitted but I did not want it to be'); + assert(true === false, 'event was emitted but I did not want it to be') } - const dispose = myStore.listen(eventEmittedFail); - myActions.dontEmit(); - dispose(); - assert(myStore.getState().dontEmitEventCalled === true, 'dont emit event was called successfully and event was not emitted'); + const dispose = myStore.listen(eventEmittedFail) + myActions.dontEmit() + dispose() + assert(myStore.getState().dontEmitEventCalled === true, 'dont emit event was called successfully and event was not emitted') }, 'multiple deferrals': (done) => { - myActions.moreActions(); - assert(secondStore.getState().deferrals === 1, 'deferrals is initially set to 1'); + myActions.moreActions() + assert(secondStore.getState().deferrals === 1, 'deferrals is initially set to 1') setTimeout(() => { - assert(secondStore.getState().deferrals === 3, 'but deferrals ends up being set to 3 after all actions complete'); - done(); - }); + assert(secondStore.getState().deferrals === 3, 'but deferrals ends up being set to 3 after all actions complete') + done() + }) }, recycling() { - alt.recycle(); - assert(myStore.getState().name === 'first', 'recycle sets the state back to its origin'); + alt.recycle() + assert(myStore.getState().name === 'first', 'recycle sets the state back to its origin') - myActions.resetRecycled(); - assert(secondStore.getState().recycled === false, 'recycle const was reset due to action'); - alt.recycle(); - assert(secondStore.getState().recycled === true, 'init lifecycle method was called by recycling'); + myActions.resetRecycled() + assert(secondStore.getState().recycled === false, 'recycle const was reset due to action') + alt.recycle() + assert(secondStore.getState().recycled === true, 'init lifecycle method was called by recycling') }, flushing() { - myActions.updateName('goat'); - const flushed = JSON.parse(alt.flush()); - assert(myStore.getState().name === 'first', 'flush is a lot like recycle'); - assert(flushed.MyStore.name === 'goat', 'except that flush returns the state before recycling'); - - myActions.updateName('butterfly'); - assert(myStore.getState().name === 'butterfly', 'I can update the state again after a flush'); - assert(secondStore.getState().name === 'butterfly', 'I can update the state again after a flush'); + myActions.updateName('goat') + const flushed = JSON.parse(alt.flush()) + assert(myStore.getState().name === 'first', 'flush is a lot like recycle') + assert(flushed.MyStore.name === 'goat', 'except that flush returns the state before recycling') + + myActions.updateName('butterfly') + assert(myStore.getState().name === 'butterfly', 'I can update the state again after a flush') + assert(secondStore.getState().name === 'butterfly', 'I can update the state again after a flush') }, 'recycling single store': () => { - myActions.updateName('butterfly'); - alt.recycle('MyStore'); - assert(myStore.getState().name === 'first', 'I can recycle specific stores'); - assert(secondStore.getState().name === 'butterfly', 'and other stores will not be recycled'); - - myActions.updateName('butterfly'); - alt.recycle(myStore); - assert(myStore.getState().name === 'first', 'I can recycle specific stores'); + myActions.updateName('butterfly') + alt.recycle('MyStore') + assert(myStore.getState().name === 'first', 'I can recycle specific stores') + assert(secondStore.getState().name === 'butterfly', 'and other stores will not be recycled') + + myActions.updateName('butterfly') + alt.recycle(myStore) + assert(myStore.getState().name === 'first', 'I can recycle specific stores') }, 'recycling invalid stores': () => { - assert.throw(() => { return alt.recycle('StoreThatDoesNotExist'); }, ReferenceError, 'StoreThatDoesNotExist is not a valid store'); + assert.throw(() => { return alt.recycle('StoreThatDoesNotExist') }, ReferenceError, 'StoreThatDoesNotExist is not a valid store') }, 'alt single instances': () => { - assert.instanceOf(altInstance, Alt, 'altInstance is an instance of alt'); - assert.isObject(altInstance.dispatcher, 'it has a dispatcher'); - assert.isFunction(altInstance.bootstrap, 'bootstrap function exists'); - assert.isFunction(altInstance.createActions, 'createActions function'); - assert.isFunction(altInstance.createStore, 'createStore function'); + assert.instanceOf(altInstance, Alt, 'altInstance is an instance of alt') + assert.isObject(altInstance.dispatcher, 'it has a dispatcher') + assert.isFunction(altInstance.bootstrap, 'bootstrap function exists') + assert.isFunction(altInstance.createActions, 'createActions function') + assert.isFunction(altInstance.createStore, 'createStore function') - const myActionsFromInst = altInstance.getActions('myActions'); - assert.isObject(myActionsFromInst, 'the actions exist'); + const myActionsFromInst = altInstance.getActions('myActions') + assert.isObject(myActionsFromInst, 'the actions exist') - const fauxActions = altInstance.getActions('fauxActions'); - assert.isFunction(fauxActions.one, 'faux actions were generated'); + const fauxActions = altInstance.getActions('fauxActions') + assert.isFunction(fauxActions.one, 'faux actions were generated') - const myActionsFail = altInstance.getActions('ActionsThatDontExist'); - assert.isUndefined(myActionsFail, 'undefined actions'); + const myActionsFail = altInstance.getActions('ActionsThatDontExist') + assert.isUndefined(myActionsFail, 'undefined actions') - myActionsFromInst.updateName('lion'); - assert(altInstance.getStore('myStore').getState().name === 'lion', 'state was updated'); - assert(myStore.getState().name === 'first', 'and other singleton store was not affected'); + myActionsFromInst.updateName('lion') + assert(altInstance.getStore('myStore').getState().name === 'lion', 'state was updated') + assert(myStore.getState().name === 'first', 'and other singleton store was not affected') }, 'multiple alt instances': () => { - nameActions1.updateName('bar'); - nameActions2.updateName('baz'); + nameActions1.updateName('bar') + nameActions2.updateName('baz') - assert(nameStore1.getState().name === 'bar', 'store 1 state is set'); - assert(nameStore2.getState().name === 'baz', 'this store has different state'); - assert(altInstance.getStore('myStore').getState().name === 'first', 'other stores not affected'); - assert(myStore.getState().name === 'first', 'other singleton store not affected'); + assert(nameStore1.getState().name === 'bar', 'store 1 state is set') + assert(nameStore2.getState().name === 'baz', 'this store has different state') + assert(altInstance.getStore('myStore').getState().name === 'first', 'other stores not affected') + assert(myStore.getState().name === 'first', 'other singleton store not affected') }, 'actions with the same name': () => { - const newAlt = new Alt(); + const newAlt = new Alt() function UserActions() { - this.generateActions('update'); + this.generateActions('update') } - const ua = newAlt.createActions(UserActions); + const ua = newAlt.createActions(UserActions) function LinkActions() { - this.generateActions('update'); + this.generateActions('update') } - const la = newAlt.createActions(LinkActions); + const la = newAlt.createActions(LinkActions) function Store() { - this.bindAction(ua.UPDATE, this.ua); - this.bindAction(la.UPDATE, this.la); + this.bindAction(ua.UPDATE, this.ua) + this.bindAction(la.UPDATE, this.la) - this.a = 0; - this.b = 0; + this.a = 0 + this.b = 0 } Store.prototype.ua = function protoUa() { - this.a = 1; - }; + this.a = 1 + } Store.prototype.la = function protoLa() { - this.b = 1; - }; + this.b = 1 + } - const store = newAlt.createStore(Store); + const store = newAlt.createStore(Store) - ua.update(); - la.update(); + ua.update() + la.update() - const state = store.getState(); + const state = store.getState() - assert(state.a === 1, 'both actions were called'); - assert(state.b === 1, 'both actions were called'); + assert(state.a === 1, 'both actions were called') + assert(state.b === 1, 'both actions were called') }, 'actions with the same name and same class name': () => { - const newAlt = new Alt(); + const newAlt = new Alt() const ua = (function ua() { - function a() { this.generateActions('update'); } - return newAlt.createActions(a); - }()); + function a() { this.generateActions('update') } + return newAlt.createActions(a) + }()) const la = (function la() { - function a() { this.generateActions('update'); } - return newAlt.createActions(a); - }()); + function a() { this.generateActions('update') } + return newAlt.createActions(a) + }()) - let uaOnce = 0; - let laOnce = 0; + let uaOnce = 0 + let laOnce = 0 class Store { constructor() { - this.bindAction(ua.UPDATE, this.ua); - this.bindAction(la.UPDATE, this.la); + this.bindAction(ua.UPDATE, this.ua) + this.bindAction(la.UPDATE, this.la) - this.a = 0; - this.b = 0; + this.a = 0 + this.b = 0 } ua() { - this.a = 1; - uaOnce += 1; + this.a = 1 + uaOnce += 1 } la() { - this.b = 1; - laOnce += 1; + this.b = 1 + laOnce += 1 } } - const store = newAlt.createStore(Store); + const store = newAlt.createStore(Store) - ua.update(); - la.update(); + ua.update() + la.update() - const state = store.getState(); + const state = store.getState() - assert(state.a === 1, 'both actions were called'); - assert(state.b === 1, 'both actions were called'); - assert.equal(uaOnce, 1, 'actions only called once'); - assert.equal(laOnce, 1, 'actions only called once'); + assert(state.a === 1, 'both actions were called') + assert(state.b === 1, 'both actions were called') + assert.equal(uaOnce, 1, 'actions only called once') + assert.equal(laOnce, 1, 'actions only called once') }, 'dispatching from alt instance': () => { - const inst = new AltInstance(); - let called = false; + const inst = new AltInstance() + let called = false const listen = (x) => { - assert(x.action === inst.getActions('myActions').updateName, 'the action provided is correct'); - assert(x.data === 'yo', 'i can dispatch instances on my own'); - called = true; - }; + assert(x.action === inst.getActions('myActions').updateName, 'the action provided is correct') + assert(x.data === 'yo', 'i can dispatch instances on my own') + called = true + } - const id = inst.dispatcher.register(listen); - inst.dispatch(inst.getActions('myActions').updateName, 'yo'); - inst.dispatcher.unregister(id); + const id = inst.dispatcher.register(listen) + inst.dispatch(inst.getActions('myActions').updateName, 'yo') + inst.dispatcher.unregister(id) - assert(called === true, 'listener was called'); + assert(called === true, 'listener was called') }, 'emit change method works from the store': (done) => { - assert(myStore.getState().async === false, 'store async is false'); + assert(myStore.getState().async === false, 'store async is false') - let dispose; + let dispose const listener = () => { - assert(myStore.getState().async === true, 'store async is true'); - dispose(); - done(); - }; + assert(myStore.getState().async === true, 'store async is true') + dispose() + done() + } - dispose = myStore.listen(listener); - myActions.asyncStoreAction(); + dispose = myStore.listen(listener) + myActions.asyncStoreAction() }, 'emit change method works with an isolated store': (done) => { - const newAlt = new Alt(); + const newAlt = new Alt() function Actions() { - this.generateActions('test'); + this.generateActions('test') } - const actions = newAlt.createActions(Actions); + const actions = newAlt.createActions(Actions) class Store { constructor() { - this.bindActions(actions); - this.test = false; + this.bindActions(actions) + this.test = false } onTest() { setTimeout(() => { - this.test = true; - this.emitChange(); - }); - return false; + this.test = true + this.emitChange() + }) + return false } } - const store = newAlt.createStore(Store); + const store = newAlt.createStore(Store) - assert(store.getState().test === false, 'test is false'); + assert(store.getState().test === false, 'test is false') - let dispose; + let dispose const listener = () => { - assert(store.getState().test === true, 'test is true'); - dispose(); - done(); - }; + assert(store.getState().test === true, 'test is true') + dispose() + done() + } - dispose = store.listen(listener); - actions.test(); + dispose = store.listen(listener) + actions.test() }, 'extending stores': () => { - const newAlt = new Alt(); + const newAlt = new Alt() class Other { constructor() { - this.foo = true; + this.foo = true } - test() { return true; } + test() { return true } } class Store extends Other { constructor() { - super(); - this.bar = true; - this.baz = super.test(); + super() + this.bar = true + this.baz = super.test() } } - const store = newAlt.createStore(Store); + const store = newAlt.createStore(Store) - assert(store.getState().foo === true, 'store inherits properties'); - assert(store.getState().bar === true, 'store properties are available'); - assert(store.getState().baz === true, 'inherited methods can be called'); + assert(store.getState().foo === true, 'store inherits properties') + assert(store.getState().bar === true, 'store properties are available') + assert(store.getState().baz === true, 'inherited methods can be called') }, 'exporting public method of ancestor': () => { class StoreBase { baseMethod() { - return true; + return true } } class Store extends StoreBase { constructor() { - super(); + super() this.exportPublicMethods({ baseMethod: this.baseMethod - }); + }) } } - const store = alt.createStore(Store); + const store = alt.createStore(Store) - assert.isFunction(store.baseMethod, 'ancestor methods via export mixin are made available'); + assert.isFunction(store.baseMethod, 'ancestor methods via export mixin are made available') }, 'binding a listener that does not exist': () => { @@ -1024,11 +1024,11 @@ const tests = { constructor() { this.bindListeners({ methodThatDoesNotExist: myActions.updateName - }); + }) } } - assert.throw(() => { return alt.createStore(BadListenerStore); }, ReferenceError, 'methodThatDoesNotExist defined but does not exist in BadListenerStore'); + assert.throw(() => { return alt.createStore(BadListenerStore) }, ReferenceError, 'methodThatDoesNotExist defined but does not exist in BadListenerStore') }, 'binding listeners to action that does not exist': () => { @@ -1036,53 +1036,53 @@ const tests = { constructor() { this.bindListeners({ foo: myActions.trolololololol - }); + }) } foo() { } } - assert.throw(() => { return alt.createStore(BadListenerStore); }, ReferenceError, 'Invalid action reference passed in'); + assert.throw(() => { return alt.createStore(BadListenerStore) }, ReferenceError, 'Invalid action reference passed in') }, 'do not include store in snapshots': () => { function NoBootstrap() { } - alt.createUnsavedStore(NoBootstrap, 'NoBootstrap'); + alt.createUnsavedStore(NoBootstrap, 'NoBootstrap') - let snapshot = JSON.parse(alt.takeSnapshot()); + let snapshot = JSON.parse(alt.takeSnapshot()) - assert.isUndefined(snapshot.NoBootstrap, 'Store does not exist in snapshots'); - assert.isObject(snapshot.AltSecondStore, 'AltSecondStore exists'); + assert.isUndefined(snapshot.NoBootstrap, 'Store does not exist in snapshots') + assert.isObject(snapshot.AltSecondStore, 'AltSecondStore exists') alt.createUnsavedStore({ displayName: 'NoBootstrapObject' - }); + }) - snapshot = JSON.parse(alt.takeSnapshot()); + snapshot = JSON.parse(alt.takeSnapshot()) - assert.isUndefined(snapshot.NoBootstrapObject, 'Store does not exist in snapshots'); - assert.isObject(snapshot.AltSecondStore, 'AltSecondStore exists'); + assert.isUndefined(snapshot.NoBootstrapObject, 'Store does not exist in snapshots') + assert.isObject(snapshot.AltSecondStore, 'AltSecondStore exists') }, 'actions with no name are still ok': () => { const actions = alt.createActions(function createActionsTest() { - this.generateActions('foo'); - }); + this.generateActions('foo') + }) - assert.isFunction(actions.foo, 'action still exists'); + assert.isFunction(actions.foo, 'action still exists') }, 'recycle store that does not exist': () => { assert.doesNotThrow(() => { - alt.bootstrap('{"AStoreThatIJustMadeUpButDoesNotReallyExist": {}}'); - }); + alt.bootstrap('{"AStoreThatIJustMadeUpButDoesNotReallyExist": {}}') + }) }, 'creating one off actions': () => { const action = alt.createAction('hello', (x) => { - return x; - }); + return x + }) const store = alt.createStore({ displayName: 'just testing', @@ -1090,61 +1090,61 @@ const tests = { bindListeners: { hello: action }, - hello(x) { this.state.x = x; } - }); + hello(x) { this.state.x = x } + }) - assert.isFunction(action, 'action was created'); + assert.isFunction(action, 'action was created') - action(1); + action(1) - assert(store.getState().x === 1, 'action fires correctly'); + assert(store.getState().x === 1, 'action fires correctly') }, 'setState emits a change if not dispatching': (done) => { - const newAlt = new Alt(); + const newAlt = new Alt() - const actions = newAlt.generateActions('fire'); + const actions = newAlt.generateActions('fire') const store = newAlt.createStore(class Store { constructor() { - this.bindActions(actions); - this.test = false; + this.bindActions(actions) + this.test = false } fire() { setTimeout(() => { this.setState({ test: true - }); - }); - return false; + }) + }) + return false } - }); + }) - assert(store.getState().test === false); + assert(store.getState().test === false) const unlisten = store.listen((state) => { - assert(state.test === true); - unlisten(); - done(); - }); + assert(state.test === true) + unlisten() + done() + }) - actions.fire(); + actions.fire() }, 'prepare a payload for bootstrap': () => { - const serialized = alt.prepare(myStore, { a: 1, b: 2 }); - const parsed = JSON.parse(serialized); + const serialized = alt.prepare(myStore, { a: 1, b: 2 }) + const parsed = JSON.parse(serialized) - assert.isString(serialized); - assert.isObject(parsed.MyStore); - assert(parsed.MyStore.a === 1); - assert(parsed.MyStore.b === 2); - assert.isUndefined(parsed.MyStore.c); + assert.isString(serialized) + assert.isObject(parsed.MyStore) + assert(parsed.MyStore.a === 1) + assert(parsed.MyStore.b === 2) + assert.isUndefined(parsed.MyStore.c) assert.throws(() => { - alt.prepare({}, { x: 0 }); - }, ReferenceError); + alt.prepare({}, { x: 0 }) + }, ReferenceError) }, 'async dispatches': (done) => { @@ -1152,31 +1152,31 @@ const tests = { displayName: 'AsyncAction', fire(x) { return (dispatch) => { - dispatch(x); - }; + dispatch(x) + } } - }); + }) const token = alt.dispatcher.register((payload) => { - assert(payload.action === 'AsyncAction.fire'); - assert(payload.data === 2); - alt.dispatcher.unregister(token); - done(); - }); + assert(payload.action === 'AsyncAction.fire') + assert(payload.data === 2) + alt.dispatcher.unregister(token) + done() + }) - AsyncAction.fire(2); + AsyncAction.fire(2) }, 'listen expects function': () => { assert.throws(() => { - myStore.listen(null); - }, TypeError, 'listen expects a function'); + myStore.listen(null) + }, TypeError, 'listen expects a function') }, 'lots of listens': () => { - const ImportKeysActions = alt.generateActions('change', 'saved'); + const ImportKeysActions = alt.generateActions('change', 'saved') - const call = sinon.spy(); + const call = sinon.spy() const BalanceClaimStore = alt.createStore(class { //eslint-disable-line constructor() { @@ -1185,117 +1185,117 @@ const tests = { onLoadMyAccounts: [ ImportKeysActions.change, ImportKeysActions.saved ] - }); + }) } onRefreshBalanceClaims() { - call(); + call() } onLoadMyAccounts() { - call(); + call() } - }); + }) - ImportKeysActions.saved(); + ImportKeysActions.saved() - assert(call.calledTwice, 'multiple action handlers are ok'); + assert(call.calledTwice, 'multiple action handlers are ok') }, 'dispatching action creators': () => { const action = { id: 'hello', dispatch(data) { - return data; + return data } - }; + } - const newAlt = new Alt(); + const newAlt = new Alt() class Store { constructor() { - this.bindAction(action, this.hello.bind(this)); - this.state = { x: null }; + this.bindAction(action, this.hello.bind(this)) + this.state = { x: null } } hello(data) { - this.setState({ x: data }); + this.setState({ x: data }) } } - const store = newAlt.createStore(Store); + const store = newAlt.createStore(Store) - assert(store.getState().x === null, 'x is null'); + assert(store.getState().x === null, 'x is null') - newAlt.dispatch(action, 3); + newAlt.dispatch(action, 3) - assert(store.getState().x === 3, '3 was dispatched'); + assert(store.getState().x === 3, '3 was dispatched') - newAlt.dispatch(action, 4); + newAlt.dispatch(action, 4) - assert(store.getState().x === 4, '4 was dispatched'); + assert(store.getState().x === 4, '4 was dispatched') - newAlt.dispatch(action, undefined); + newAlt.dispatch(action, undefined) - assert(store.getState().x === 4, 'undefined means it wont dispatch'); + assert(store.getState().x === 4, 'undefined means it wont dispatch') }, 'dispatching async action creators': (done) => { const action = { id: 'hello', dispatch() { - return (dispatch) => { return dispatch(done); }; + return (dispatch) => { return dispatch(done) } } - }; + } - const newAlt = new Alt(); + const newAlt = new Alt() class Store { constructor() { - this.bindAction(action, this.hello); + this.bindAction(action, this.hello) } hello(cb) { - cb(); + cb() } } - newAlt.createStore(Store); - newAlt.dispatch(action); + newAlt.createStore(Store) + newAlt.dispatch(action) }, 'is fsa': (done) => { const res = alt.dispatcher.register((x) => { - assert.isDefined(x.type, 'there is a type'); - assert.isDefined(x.payload, 'there is a payload'); - assert.isDefined(x.meta, 'meta exists'); - assert.isString(x.meta.dispatchId, 'meta contains a unique dispatch id'); + assert.isDefined(x.type, 'there is a type') + assert.isDefined(x.payload, 'there is a payload') + assert.isDefined(x.meta, 'meta exists') + assert.isString(x.meta.dispatchId, 'meta contains a unique dispatch id') - assert(x.payload === 'Jane', 'the payload is correct'); + assert(x.payload === 'Jane', 'the payload is correct') - alt.dispatcher.unregister(res); + alt.dispatcher.unregister(res) - done(); - }); + done() + }) - myActions.updateName('Jane'); + myActions.updateName('Jane') }, 'can dispatch fsa': (done) => { const res = alt.dispatcher.register((x) => { - assert.isDefined(x.type, 'there is a type'); - assert(x.type === 'owl'); - assert.isDefined(x.payload, 'there is a payload'); - assert(x.payload === 'Tawny'); - assert.isString(x.meta.dispatchId, 'meta contains a unique dispatch id'); + assert.isDefined(x.type, 'there is a type') + assert(x.type === 'owl') + assert.isDefined(x.payload, 'there is a payload') + assert(x.payload === 'Tawny') + assert.isString(x.meta.dispatchId, 'meta contains a unique dispatch id') - alt.dispatcher.unregister(res); + alt.dispatcher.unregister(res) - done(); - }); + done() + }) - alt.dispatch({ type: 'owl', payload: 'Tawny' }); + alt.dispatch({ type: 'owl', payload: 'Tawny' }) } -}; +} -export default tests; +export default tests diff --git a/test/setting-state.js b/test/setting-state.js index 9da57f60..28222169 100644 --- a/test/setting-state.js +++ b/test/setting-state.js @@ -1,151 +1,151 @@ -import { assert } from 'chai'; -import sinon from 'sinon'; -import Alt from '../dist/alt-with-runtime'; +import { assert } from 'chai' +import sinon from 'sinon' +import Alt from '../dist/alt-with-runtime' -const alt = new Alt(); +const alt = new Alt() -const actions = alt.generateActions('fire', 'nothing'); +const actions = alt.generateActions('fire', 'nothing') class MyStore { constructor() { - this.foo = 1; - this.bindListeners({ increment: actions.FIRE, nothing: actions.NOTHING }); + this.foo = 1 + this.bindListeners({ increment: actions.FIRE, nothing: actions.NOTHING }) } increment() { - this.retVal = this.setState({ foo: this.foo + 1 }); - return this.retVal; + this.retVal = this.setState({ foo: this.foo + 1 }) + return this.retVal } nothing() { - this.setState(); + this.setState() } } -const myStore = alt.createStore(MyStore); +const myStore = alt.createStore(MyStore) export default { setState: { beforeEach() { - alt.recycle(); + alt.recycle() }, 'using setState to set the state': function () { - const spy = sinon.spy(); - const dispose = myStore.listen(spy); + const spy = sinon.spy() + const dispose = myStore.listen(spy) - actions.fire(); + actions.fire() - assert(myStore.getState().foo === 2, 'foo was incremented'); - assert.isUndefined(myStore.getState().retVal, 'return value of setState is undefined'); + assert(myStore.getState().foo === 2, 'foo was incremented') + assert.isUndefined(myStore.getState().retVal, 'return value of setState is undefined') - dispose(); + dispose() // calling set state without anything doesn't make things crash and burn - actions.nothing(); + actions.nothing() - assert.ok(spy.calledOnce, 'spy was only called once'); + assert.ok(spy.calledOnce, 'spy was only called once') }, 'by using setState a change event is not emitted twice': function () { - const spy = sinon.spy(); - const dispose = myStore.listen(spy); + const spy = sinon.spy() + const dispose = myStore.listen(spy) - actions.nothing(); + actions.nothing() - assert(myStore.getState().foo === 1, 'foo remains the same'); + assert(myStore.getState().foo === 1, 'foo remains the same') - assert.ok(spy.calledOnce, 'spy was only called once'); + assert.ok(spy.calledOnce, 'spy was only called once') - dispose(); + dispose() }, 'transactional setState': function () { - const newAlt = new Alt(); + const newAlt = new Alt() - const newActions = newAlt.generateActions('fire'); + const newActions = newAlt.generateActions('fire') class SetState { constructor() { - this.bindActions(actions); - this.x = 0; + this.bindActions(actions) + this.x = 0 } fire() { this.setState(() => { return { x: 1 - }; - }); + } + }) } } - const store = newAlt.createStore(SetState); + const store = newAlt.createStore(SetState) - assert(store.getState().x === 0, 'x is initially 0'); - newActions.fire(); - assert(store.getState().x === 1, 'x is 1'); + assert(store.getState().x === 0, 'x is initially 0') + newActions.fire() + assert(store.getState().x === 1, 'x is 1') }, 'transactional setState with failure': function () { - const newAlt = new Alt(); + const newAlt = new Alt() - const newActions = newAlt.generateActions('fire'); + const newActions = newAlt.generateActions('fire') class SetState { constructor() { - this.bindActions(actions); - this.x = 0; + this.bindActions(actions) + this.x = 0 } fire() { this.setState(() => { - throw new Error('error'); - }); + throw new Error('error') + }) } } - const store = newAlt.createStore(SetState); + const store = newAlt.createStore(SetState) - assert(store.getState().x === 0, 'x is initially 0'); - assert.throws(() => { return newActions.fire(); }); - assert(store.getState().x === 0, 'x remains 0'); + assert(store.getState().x === 0, 'x is initially 0') + assert.throws(() => { return newActions.fire() }) + assert(store.getState().x === 0, 'x remains 0') }, 'setState no dispatch': function () { - const newAlt = new Alt(); + const newAlt = new Alt() - newAlt.generateActions('fire'); + newAlt.generateActions('fire') class BrokenSetState { constructor() { - this.x = 0; - this.setState({ x: 1 }); + this.x = 0 + this.setState({ x: 1 }) } } assert.throws(() => { - newAlt.createStore(BrokenSetState); - }); + newAlt.createStore(BrokenSetState) + }) }, 'state is set not replaced': function () { - const newAlt = new Alt(); - const newActions = newAlt.generateActions('fire'); + const newAlt = new Alt() + const newActions = newAlt.generateActions('fire') class SetState { constructor() { - this.bindActions(newActions); - this.x = 0; - this.y = 0; + this.bindActions(newActions) + this.x = 0 + this.y = 0 } fire() { - this.setState({ x: 1 }); + this.setState({ x: 1 }) } } - const store = newAlt.createStore(SetState); + const store = newAlt.createStore(SetState) - assert(store.getState().x === 0, 'x is initially 0'); - newActions.fire(); - assert(store.getState().x === 1, 'x is now 1'); - assert(store.getState().y === 0, 'y was untouched'); + assert(store.getState().x === 0, 'x is initially 0') + newActions.fire() + assert(store.getState().x === 1, 'x is now 1') + assert(store.getState().y === 0, 'y was untouched') } } -}; +} diff --git a/test/store-as-a-module.js b/test/store-as-a-module.js index 3f12d003..11f0e2c7 100644 --- a/test/store-as-a-module.js +++ b/test/store-as-a-module.js @@ -1,23 +1,23 @@ -import assert from 'assert'; -import Alt from '../'; -import * as StoreModel from './helpers/SaaM'; +import assert from 'assert' +import Alt from '../' +import * as StoreModel from './helpers/SaaM' -const alt = new Alt(); -const actions = alt.generateActions('increment'); -const store = alt.createStore(StoreModel); +const alt = new Alt() +const actions = alt.generateActions('increment') +const store = alt.createStore(StoreModel) export default { 'Stores as a Module': { 'store state is there': function () { - assert.equal(store.getState(), 1, 'store data is initialized to 1'); + assert.equal(store.getState(), 1, 'store data is initialized to 1') - actions.increment(); + actions.increment() - assert.equal(store.getState(), 2, 'store data was updated'); + assert.equal(store.getState(), 2, 'store data was updated') - actions.increment(); + actions.increment() - assert.equal(store.getState(), 3, 'incremented again'); + assert.equal(store.getState(), 3, 'incremented again') } } -}; +} diff --git a/test/store-model-test.js b/test/store-model-test.js index 34e29b5b..d5c9a53d 100644 --- a/test/store-model-test.js +++ b/test/store-model-test.js @@ -1,15 +1,15 @@ -import { assert } from 'chai'; -import Alt from '../dist/alt-with-runtime'; +import { assert } from 'chai' +import Alt from '../dist/alt-with-runtime' -const alt = new Alt(); -const Actions = alt.generateActions('hello'); +const alt = new Alt() +const Actions = alt.generateActions('hello') function MyStoreModel() { - this.bindActions(Actions); + this.bindActions(Actions) - this.test = 2; + this.test = 2 } -MyStoreModel.prototype.onHello = function () { this.test = 1; }; +MyStoreModel.prototype.onHello = function () { this.test = 1 } const MyStoreModelObj = { displayName: 'MyStoreAsObject', @@ -21,44 +21,44 @@ const MyStoreModelObj = { }, onHello() { - this.state.test = 1; + this.state.test = 1 } -}; +} export default { 'Exposing the StoreModel': { beforeEach() { - alt.recycle(); + alt.recycle() }, 'as an object': function () { - const MyStore = alt.createStore(MyStoreModelObj); + const MyStore = alt.createStore(MyStoreModelObj) - assert(MyStore.getState().test === 2, 'store state is initially set'); + assert(MyStore.getState().test === 2, 'store state is initially set') - assert.isDefined(MyStore.StoreModel, 'store model is available'); - assert.isObject(MyStore.StoreModel, 'store model is an object'); + assert.isDefined(MyStore.StoreModel, 'store model is available') + assert.isObject(MyStore.StoreModel, 'store model is an object') - assert(MyStore.StoreModel === MyStoreModelObj, 'the store model is the same as the original object'); + assert(MyStore.StoreModel === MyStoreModelObj, 'the store model is the same as the original object') - Actions.hello(); + Actions.hello() - assert(MyStore.getState().test === 1, 'i can change state through actions'); + assert(MyStore.getState().test === 1, 'i can change state through actions') }, 'as a class': function () { - const MyStore = alt.createStore(MyStoreModel, 'MyStore'); + const MyStore = alt.createStore(MyStoreModel, 'MyStore') - assert(MyStore.getState().test === 2, 'store state is initially set'); + assert(MyStore.getState().test === 2, 'store state is initially set') - assert.isDefined(MyStore.StoreModel, 'store model is available'); - assert.isFunction(MyStore.StoreModel, 'store model is a function'); + assert.isDefined(MyStore.StoreModel, 'store model is available') + assert.isFunction(MyStore.StoreModel, 'store model is a function') - assert(MyStore.StoreModel === MyStoreModel, 'the store model is the same as the original object'); + assert(MyStore.StoreModel === MyStoreModel, 'the store model is the same as the original object') - Actions.hello(); + Actions.hello() - assert(MyStore.getState().test === 1, 'i can change state through actions'); + assert(MyStore.getState().test === 1, 'i can change state through actions') } } -}; +} diff --git a/test/store-transforms-test.js b/test/store-transforms-test.js index ff5a0f2b..34b95294 100644 --- a/test/store-transforms-test.js +++ b/test/store-transforms-test.js @@ -1,31 +1,31 @@ -import { assert } from 'chai'; -import Alt from '../dist/alt-with-runtime'; +import { assert } from 'chai' +import Alt from '../dist/alt-with-runtime' -const alt = new Alt(); +const alt = new Alt() alt.storeTransforms.push((Store) => { - Store.test = 'hello'; - return Store; -}); + Store.test = 'hello' + return Store +}) class Store { constructor() { - this.x = 0; + this.x = 0 } } export default { 'store transforms': { 'when creating stores alt goes through its series of transforms': function () { - const store = alt.createStore(Store); - assert(alt.storeTransforms.length === 1); - assert.isDefined(store.test); - assert(store.test === 'hello', 'store that adds hello to instance transform'); + const store = alt.createStore(Store) + assert(alt.storeTransforms.length === 1) + assert.isDefined(store.test) + assert(store.test === 'hello', 'store that adds hello to instance transform') }, 'unsaved stores get the same treatment': function () { - const store2 = alt.createUnsavedStore(Store); - assert.isDefined(store2.test); + const store2 = alt.createUnsavedStore(Store) + assert.isDefined(store2.test) } } -}; +} diff --git a/test/stores-get-alt.js b/test/stores-get-alt.js index 8637fe0f..5d6c83b9 100644 --- a/test/stores-get-alt.js +++ b/test/stores-get-alt.js @@ -1,26 +1,26 @@ -import { assert } from 'chai'; -import Alt from '../dist/alt-with-runtime'; +import { assert } from 'chai' +import Alt from '../dist/alt-with-runtime' -const alt = new Alt(); +const alt = new Alt() export default { 'the stores get the alt instance': function () { class MyStore { constructor(altInstace) { - assert.instanceOf(altInstace, Alt, 'alt is an instance of Alt'); + assert.instanceOf(altInstace, Alt, 'alt is an instance of Alt') } } - alt.createStore(MyStore, 'MyStore', alt); + alt.createStore(MyStore, 'MyStore', alt) }, 'the actions get the alt instance': function () { class MyActions { constructor(altInstace) { - assert.instanceOf(altInstace, Alt, 'alt is an instance of Alt'); + assert.instanceOf(altInstace, Alt, 'alt is an instance of Alt') } } - alt.createActions(MyActions, undefined, alt); + alt.createActions(MyActions, undefined, alt) } -}; +} diff --git a/test/stores-with-colliding-names.js b/test/stores-with-colliding-names.js index 2dcd4eb0..6f45382a 100644 --- a/test/stores-with-colliding-names.js +++ b/test/stores-with-colliding-names.js @@ -1,43 +1,43 @@ -import { assert } from 'chai'; -import sinon from 'sinon'; -import Alt from '../dist/alt-with-runtime'; +import { assert } from 'chai' +import sinon from 'sinon' +import Alt from '../dist/alt-with-runtime' -const alt = new Alt(); +const alt = new Alt() alt.createStore(function MyStore() {}); //eslint-disable-line export default { 'console warn for missing identifier': { beforeEach() { - console.warn = sinon.stub(); - console.warn.returnsArg(0); + console.warn = sinon.stub() + console.warn.returnsArg(0) }, 'stores with colliding names': function () { const myStore = (function () { - return function MyStore() { }; - }()); - alt.createStore(myStore); + return function MyStore() { } + }()) + alt.createStore(myStore) - assert.isObject(alt.stores.MyStore1, 'a store was still created'); + assert.isObject(alt.stores.MyStore1, 'a store was still created') }, 'colliding names via identifier': function () { class auniquestore { } - alt.createStore(auniquestore, 'MyStore'); + alt.createStore(auniquestore, 'MyStore') - assert.isObject(alt.stores.MyStore1, 'a store was still created'); + assert.isObject(alt.stores.MyStore1, 'a store was still created') }, 'not providing a store name via anonymous function': function () { - alt.createStore(() => { }); + alt.createStore(() => { }) - assert.isObject(alt.stores[''], 'a store with no name was still created'); + assert.isObject(alt.stores[''], 'a store with no name was still created') }, afterEach() { - assert.ok(console.warn.calledOnce, 'the warning was called'); - assert.instanceOf(console.warn.returnValues[0], ReferenceError, 'value returned is an instanceof referenceerror'); + assert.ok(console.warn.calledOnce, 'the warning was called') + assert.instanceOf(console.warn.returnValues[0], ReferenceError, 'value returned is an instanceof referenceerror') } } -}; +} diff --git a/test/value-stores-test.js b/test/value-stores-test.js index b70e0a77..43d81cf8 100644 --- a/test/value-stores-test.js +++ b/test/value-stores-test.js @@ -1,25 +1,25 @@ -import { assert } from 'chai'; -import Alt from '../'; +import { assert } from 'chai' +import Alt from '../' -const alt = new Alt(); +const alt = new Alt() -const actions = alt.generateActions('fire'); +const actions = alt.generateActions('fire') const store = alt.createStore({ state: 21, displayName: 'ValueStore', reduce(state, payload) { - return state + 1; + return state + 1 } -}); +}) const store2 = alt.createStore({ state: [1, 2, 3], displayName: 'Value2Store', reduce(state, payload) { - return state.concat(state[state.length - 1] + 1); + return state.concat(state[state.length - 1] + 1) } -}); +}) const store3 = alt.createStore({ state: 21, @@ -28,50 +28,50 @@ const store3 = alt.createStore({ fire: actions.fire }, fire() { - this.setState(this.state + 1); + this.setState(this.state + 1) } -}); +}) export default { 'value stores': { beforeEach() { - alt.recycle(); + alt.recycle() }, 'stores can contain state as any value': function (done) { - assert(store.state === 21, 'store state is value'); - assert(store.getState() === 21, 'getState returns value too'); + assert(store.state === 21, 'store state is value') + assert(store.getState() === 21, 'getState returns value too') const unlisten = store.listen((state) => { - assert(state === 22, 'incremented store state'); - unlisten(); - done(); - }); + assert(state === 22, 'incremented store state') + unlisten() + done() + }) - assert(JSON.parse(alt.takeSnapshot()).ValueStore === 21, 'snapshot ok'); + assert(JSON.parse(alt.takeSnapshot()).ValueStore === 21, 'snapshot ok') - actions.fire(); + actions.fire() }, 'stores can contain state as any value (non reduce)': function (done) { - assert(store3.state === 21, 'store state is value'); - assert(store3.getState() === 21, 'getState returns value too'); + assert(store3.state === 21, 'store state is value') + assert(store3.getState() === 21, 'getState returns value too') const unlisten = store3.listen((state) => { - assert(state === 22, 'incremented store state'); - unlisten(); - done(); - }); + assert(state === 22, 'incremented store state') + unlisten() + done() + }) - assert(JSON.parse(alt.takeSnapshot()).ValueStore3 === 21, 'snapshot ok'); + assert(JSON.parse(alt.takeSnapshot()).ValueStore3 === 21, 'snapshot ok') - actions.fire(); + actions.fire() }, 'store with array works too': function () { - assert.deepEqual(store2.state, [1, 2, 3]); - actions.fire(); - assert.deepEqual(store2.state, [1, 2, 3, 4]); + assert.deepEqual(store2.state, [1, 2, 3]) + actions.fire() + assert.deepEqual(store2.state, [1, 2, 3, 4]) } } -}; +} From 2535c959f30695eed18fabd1b7ae311fbfa27a2c Mon Sep 17 00:00:00 2001 From: Ryan Date: Fri, 10 Nov 2017 14:28:55 -0500 Subject: [PATCH 17/21] Update to fix some non-linted files --- dist/alt.js | 1445 +++++++++++++++++------------------ src/index.js | 12 +- src/store/StoreMixin.js | 2 +- src/store/index.js | 4 +- src/utils/AltUtils.js | 2 +- src/utils/StateFunctions.js | 8 +- test/babel/index.js | 719 ++++++++--------- test/browser/index.js | 95 ++- 8 files changed, 1144 insertions(+), 1143 deletions(-) diff --git a/dist/alt.js b/dist/alt.js index ed00090f..cb535ab9 100644 --- a/dist/alt.js +++ b/dist/alt.js @@ -81,38 +81,38 @@ return /******/ (function(modules) { // webpackBootstrap Object.defineProperty(exports, "__esModule", { - value: true + value: true }); exports.isMutableObject = isMutableObject; exports.eachObject = eachObject; exports.assign = assign; var isFunction = exports.isFunction = function isFunction(x) { - return typeof x === 'function'; + return typeof x === 'function'; }; function isMutableObject(target) { - var Ctor = target.constructor; + var Ctor = target.constructor; - return !!target && Object.prototype.toString.call(target) === '[object Object]' && isFunction(Ctor) && !Object.isFrozen(target) && (Ctor instanceof Ctor || target.type === 'AltStore'); + return !!target && Object.prototype.toString.call(target) === '[object Object]' && isFunction(Ctor) && !Object.isFrozen(target) && (Ctor instanceof Ctor || target.type === 'AltStore'); } function eachObject(f, o) { - o.forEach(function (from) { - Object.keys(Object(from)).forEach(function (key) { - f(key, from[key]); - }); + o.forEach(function (from) { + Object.keys(Object(from)).forEach(function (key) { + f(key, from[key]); }); + }); } function assign(target) { - for (var _len = arguments.length, source = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - source[_key - 1] = arguments[_key]; - } + for (var _len = arguments.length, source = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + source[_key - 1] = arguments[_key]; + } - eachObject(function (key, value) { - target[key] = value; //eslint-disable-line - }, source); - return target; + eachObject(function (key, value) { + target[key] = value; //eslint-disable-line + }, source); + return target; } /***/ }), @@ -123,7 +123,7 @@ function assign(target) { Object.defineProperty(exports, "__esModule", { - value: true + value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; @@ -149,91 +149,91 @@ var builtInProto = Object.getOwnPropertyNames(NoopClass.prototype); /* eslint-enable */ function getInternalMethods(Obj, isProto) { - var excluded = isProto ? builtInProto : builtIns; - var obj = isProto ? Obj.prototype : Obj; - return Object.getOwnPropertyNames(obj).reduce(function (value, m) { - if (excluded.indexOf(m) !== -1) { - return value; - } + var excluded = isProto ? builtInProto : builtIns; + var obj = isProto ? Obj.prototype : Obj; + return Object.getOwnPropertyNames(obj).reduce(function (value, m) { + if (excluded.indexOf(m) !== -1) { + return value; + } - value[m] = obj[m]; //eslint-disable-line - return value; - }, {}); + value[m] = obj[m]; //eslint-disable-line + return value; + }, {}); } function getPrototypeChain(Obj) { - var methods = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var methods = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - return Obj === Function.prototype ? methods : getPrototypeChain(Object.getPrototypeOf(Obj), fn.assign(getInternalMethods(Obj, true), methods)); + return Obj === Function.prototype ? methods : getPrototypeChain(Object.getPrototypeOf(Obj), fn.assign(getInternalMethods(Obj, true), methods)); } function warn(msg) { - /* istanbul ignore else */ - /*eslint-disable*/ - if (typeof console !== 'undefined') { - console.warn(new ReferenceError(msg)); - } - /* eslint-enable */ + /* istanbul ignore else */ + /*eslint-disable*/ + if (typeof console !== 'undefined') { + console.warn(new ReferenceError(msg)); + } + /* eslint-enable */ } function uid(container, name) { - var count = 0; - var key = name; - while (Object.hasOwnProperty.call(container, key)) { - count += 1; - key = name + String(count); - } - return key; + var count = 0; + var key = name; + while (Object.hasOwnProperty.call(container, key)) { + count += 1; + key = name + String(count); + } + return key; } function formatAsConstant(name) { - return name.replace(/[a-z]([A-Z])/g, function (i) { - return i[0] + '_' + i[1].toLowerCase(); - }).toUpperCase(); + return name.replace(/[a-z]([A-Z])/g, function (i) { + return i[0] + '_' + i[1].toLowerCase(); + }).toUpperCase(); } function dispatchIdentity(x) { - if (x === undefined) return null; + if (x === undefined) return null; - for (var _len = arguments.length, a = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - a[_key - 1] = arguments[_key]; - } + for (var _len = arguments.length, a = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + a[_key - 1] = arguments[_key]; + } - return a.length ? [x].concat(a) : x; + return a.length ? [x].concat(a) : x; } function fsa(id, type, payload, details) { - return { - type: type, - payload: payload, - meta: _extends({ - dispatchId: id - }, details), - - id: id, - action: type, - data: payload, - details: details - }; + return { + type: type, + payload: payload, + meta: _extends({ + dispatchId: id + }, details), + + id: id, + action: type, + data: payload, + details: details + }; } function dispatch(id, actionObj, payload, alt) { - var data = actionObj.dispatch(payload); - if (data === undefined) return null; + var data = actionObj.dispatch(payload); + if (data === undefined) return null; - var type = actionObj.id; - var namespace = type; - var name = type; - var details = { id: type, namespace: namespace, name: name }; + var type = actionObj.id; + var namespace = type; + var name = type; + var details = { id: type, namespace: namespace, name: name }; - var dispatchLater = function dispatchLater(x) { - return alt.dispatch(type, x, details); - }; + var dispatchLater = function dispatchLater(x) { + return alt.dispatch(type, x, details); + }; - if (fn.isFunction(data)) return data(dispatchLater, alt); + if (fn.isFunction(data)) return data(dispatchLater, alt); - // XXX standardize this - return alt.dispatcher.dispatch(fsa(id, type, data, details)); + // XXX standardize this + return alt.dispatcher.dispatch(fsa(id, type, data, details)); } /* istanbul ignore next */ @@ -502,7 +502,7 @@ module.exports = __webpack_require__(5); Object.defineProperty(exports, "__esModule", { - value: true + value: true }); var _flux = __webpack_require__(6); @@ -539,266 +539,265 @@ function _classCallCheck(instance, Constructor) { if (!(instance instanceof Cons var Alt = function () { - function Alt() { - var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + function Alt() { + var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; - _classCallCheck(this, Alt); + _classCallCheck(this, Alt); - this.config = config; - this.serialize = config.serialize || JSON.stringify; - this.deserialize = config.deserialize || JSON.parse; - this.dispatcher = config.dispatcher || new _flux.Dispatcher(); - this.batchingFunction = config.batchingFunction || function (callback) { - return callback(); - }; - this.actions = { global: {} }; - this.stores = {}; - this.storeTransforms = config.storeTransforms || []; - this.trapAsync = false; - this._actionsRegistry = {}; - this._initSnapshot = {}; - this._lastSnapshot = {}; - } + this.config = config; + this.serialize = config.serialize || JSON.stringify; + this.deserialize = config.deserialize || JSON.parse; + this.dispatcher = config.dispatcher || new _flux.Dispatcher(); + this.batchingFunction = config.batchingFunction || function (callback) { + return callback(); + }; + this.actions = { global: {} }; + this.stores = {}; + this.storeTransforms = config.storeTransforms || []; + this.trapAsync = false; + this._actionsRegistry = {}; + this._initSnapshot = {}; + this._lastSnapshot = {}; + } - Alt.prototype.dispatch = function dispatch(action, data, details) { - var _this = this; + Alt.prototype.dispatch = function dispatch(action, data, details) { + var _this = this; - this.batchingFunction(function () { - var id = Math.random().toString(18).substr(2, 16); + this.batchingFunction(function () { + var id = Math.random().toString(18).substr(2, 16); - // support straight dispatching of FSA-style actions - if (action.hasOwnProperty('type') && action.hasOwnProperty('payload')) { - var fsaDetails = { - id: action.type, - namespace: action.type, - name: action.type - }; - return _this.dispatcher.dispatch(utils.fsa(id, action.type, action.payload, fsaDetails)); - } + // support straight dispatching of FSA-style actions + if (action.hasOwnProperty('type') && action.hasOwnProperty('payload')) { + var fsaDetails = { + id: action.type, + namespace: action.type, + name: action.type + }; + return _this.dispatcher.dispatch(utils.fsa(id, action.type, action.payload, fsaDetails)); + } - if (action.id && action.dispatch) { - return utils.dispatch(id, action, data, _this); - } + if (action.id && action.dispatch) { + return utils.dispatch(id, action, data, _this); + } - return _this.dispatcher.dispatch(utils.fsa(id, action, data, details)); - }); - }; + return _this.dispatcher.dispatch(utils.fsa(id, action, data, details)); + }); + }; - Alt.prototype.createUnsavedStore = function createUnsavedStore(StoreModel) { - var key = StoreModel.displayName || ''; - store.createStoreConfig(this.config, StoreModel); - var Store = store.transformStore(this.storeTransforms, StoreModel); + Alt.prototype.createUnsavedStore = function createUnsavedStore(StoreModel) { + var key = StoreModel.displayName || ''; + store.createStoreConfig(this.config, StoreModel); + var Store = store.transformStore(this.storeTransforms, StoreModel); - for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } + for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + args[_key - 1] = arguments[_key]; + } - return fn.isFunction(Store) ? store.createStoreFromClass.apply(store, [this, Store, key].concat(args)) : store.createStoreFromObject(this, Store, key); - }; + return fn.isFunction(Store) ? store.createStoreFromClass.apply(store, [this, Store, key].concat(args)) : store.createStoreFromObject(this, Store, key); + }; - Alt.prototype.createStore = function createStore(StoreModel, iden) { - var key = iden || StoreModel.displayName || StoreModel.name || ''; - store.createStoreConfig(this.config, StoreModel); - var Store = store.transformStore(this.storeTransforms, StoreModel); + Alt.prototype.createStore = function createStore(StoreModel, iden) { + var key = iden || StoreModel.displayName || StoreModel.name || ''; + store.createStoreConfig(this.config, StoreModel); + var Store = store.transformStore(this.storeTransforms, StoreModel); - /* istanbul ignore next */ - if (false) delete this.stores[key]; + /* istanbul ignore next */ + if (false) delete this.stores[key]; - if (this.stores[key] || !key) { - if (this.stores[key]) { - utils.warn('A store named ' + key + ' already exists, double check your store ' + 'names or pass in your own custom identifier for each store'); - } else { - utils.warn('Store name was not specified'); - } + if (this.stores[key] || !key) { + if (this.stores[key]) { + utils.warn('A store named ' + key + ' already exists, double check your store ' + 'names or pass in your own custom identifier for each store'); + } else { + utils.warn('Store name was not specified'); + } - key = utils.uid(this.stores, key); - } + key = utils.uid(this.stores, key); + } - for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { - args[_key2 - 2] = arguments[_key2]; - } + for (var _len2 = arguments.length, args = Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) { + args[_key2 - 2] = arguments[_key2]; + } - var storeInstance = fn.isFunction(Store) ? store.createStoreFromClass.apply(store, [this, Store, key].concat(args)) : store.createStoreFromObject(this, Store, key); + var storeInstance = fn.isFunction(Store) ? store.createStoreFromClass.apply(store, [this, Store, key].concat(args)) : store.createStoreFromObject(this, Store, key); - this.stores[key] = storeInstance; - StateFunctions.saveInitialSnapshot(this, key); + this.stores[key] = storeInstance; + StateFunctions.saveInitialSnapshot(this, key); - return storeInstance; - }; + return storeInstance; + }; - Alt.prototype.generateActions = function generateActions() { - var actions = { name: 'global' }; + Alt.prototype.generateActions = function generateActions() { + var actions = { name: 'global' }; - for (var _len3 = arguments.length, actionNames = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - actionNames[_key3] = arguments[_key3]; - } + for (var _len3 = arguments.length, actionNames = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { + actionNames[_key3] = arguments[_key3]; + } - return this.createActions(actionNames.reduce(function (obj, action) { - obj[action] = utils.dispatchIdentity; //eslint-disable-line - return obj; - }, actions)); - }; + return this.createActions(actionNames.reduce(function (obj, action) { + obj[action] = utils.dispatchIdentity; //eslint-disable-line + return obj; + }, actions)); + }; - Alt.prototype.createAction = function createAction(name, implementation, obj) { - return (0, _actions2.default)(this, 'global', name, implementation, obj); - }; + Alt.prototype.createAction = function createAction(name, implementation, obj) { + return (0, _actions2.default)(this, 'global', name, implementation, obj); + }; - Alt.prototype.createActions = function createActions(ActionsClass) { - var //eslint-disable-line - _this3 = this; + Alt.prototype.createActions = function createActions(ActionsClass) { + var //eslint-disable-line + _this3 = this; - var exportObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var exportObj = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var actions = {}; - var key = utils.uid(this._actionsRegistry, ActionsClass.displayName || ActionsClass.name || 'Unknown'); + var actions = {}; + var key = utils.uid(this._actionsRegistry, ActionsClass.displayName || ActionsClass.name || 'Unknown'); - if (fn.isFunction(ActionsClass)) { - fn.assign(actions, utils.getPrototypeChain(ActionsClass)); + if (fn.isFunction(ActionsClass)) { + fn.assign(actions, utils.getPrototypeChain(ActionsClass)); - var ActionsGenerator = function (_ActionsClass) { - _inherits(ActionsGenerator, _ActionsClass); + var ActionsGenerator = function (_ActionsClass) { + _inherits(ActionsGenerator, _ActionsClass); - function ActionsGenerator() { - _classCallCheck(this, ActionsGenerator); + function ActionsGenerator() { + _classCallCheck(this, ActionsGenerator); - return _possibleConstructorReturn(this, _ActionsClass.apply(this, arguments)); - } + return _possibleConstructorReturn(this, _ActionsClass.apply(this, arguments)); + } - ActionsGenerator.prototype.generateActions = function generateActions() { - for (var _len5 = arguments.length, actionNames = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { - actionNames[_key5] = arguments[_key5]; - } + ActionsGenerator.prototype.generateActions = function generateActions() { + for (var _len5 = arguments.length, actionNames = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { + actionNames[_key5] = arguments[_key5]; + } - //eslint-disable-line - actionNames.forEach(function (actionName) { - actions[actionName] = utils.dispatchIdentity; - }); - }; + actionNames.forEach(function (actionName) { + actions[actionName] = utils.dispatchIdentity; + }); + }; - return ActionsGenerator; - }(ActionsClass); + return ActionsGenerator; + }(ActionsClass); - for (var _len4 = arguments.length, argsForConstructor = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) { - argsForConstructor[_key4 - 2] = arguments[_key4]; - } + for (var _len4 = arguments.length, argsForConstructor = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) { + argsForConstructor[_key4 - 2] = arguments[_key4]; + } - fn.assign(actions, new (Function.prototype.bind.apply(ActionsGenerator, [null].concat(argsForConstructor)))()); - } else { - fn.assign(actions, ActionsClass); - } + fn.assign(actions, new (Function.prototype.bind.apply(ActionsGenerator, [null].concat(argsForConstructor)))()); + } else { + fn.assign(actions, ActionsClass); + } - this.actions[key] = this.actions[key] || {}; + this.actions[key] = this.actions[key] || {}; - fn.eachObject(function (actionName, action) { - if (!fn.isFunction(action)) { - exportObj[actionName] = action; //eslint-disable-line - return; - } + fn.eachObject(function (actionName, action) { + if (!fn.isFunction(action)) { + exportObj[actionName] = action; //eslint-disable-line + return; + } - // create the action - exportObj[actionName] = (0, _actions2.default)(_this3, key, actionName, action, exportObj); + // create the action + exportObj[actionName] = (0, _actions2.default)(_this3, key, actionName, action, exportObj); - // generate a constant - var constant = utils.formatAsConstant(actionName); - exportObj[constant] = exportObj[actionName].id; //eslint-disable-line - }, [actions]); + // generate a constant + var constant = utils.formatAsConstant(actionName); + exportObj[constant] = exportObj[actionName].id; //eslint-disable-line + }, [actions]); - return exportObj; - }; + return exportObj; + }; - Alt.prototype.takeSnapshot = function takeSnapshot() { - for (var _len6 = arguments.length, storeNames = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { - storeNames[_key6] = arguments[_key6]; - } + Alt.prototype.takeSnapshot = function takeSnapshot() { + for (var _len6 = arguments.length, storeNames = Array(_len6), _key6 = 0; _key6 < _len6; _key6++) { + storeNames[_key6] = arguments[_key6]; + } - var state = StateFunctions.snapshot(this, storeNames); - fn.assign(this._lastSnapshot, state); - return this.serialize(state); - }; + var state = StateFunctions.snapshot(this, storeNames); + fn.assign(this._lastSnapshot, state); + return this.serialize(state); + }; - Alt.prototype.rollback = function rollback() { - StateFunctions.setAppState(this, this.serialize(this._lastSnapshot), function (storeInst) { - storeInst.lifecycle('rollback'); - storeInst.emitChange(); - }); - }; + Alt.prototype.rollback = function rollback() { + StateFunctions.setAppState(this, this.serialize(this._lastSnapshot), function (storeInst) { + storeInst.lifecycle('rollback'); + storeInst.emitChange(); + }); + }; - Alt.prototype.recycle = function recycle() { - for (var _len7 = arguments.length, storeNames = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { - storeNames[_key7] = arguments[_key7]; - } + Alt.prototype.recycle = function recycle() { + for (var _len7 = arguments.length, storeNames = Array(_len7), _key7 = 0; _key7 < _len7; _key7++) { + storeNames[_key7] = arguments[_key7]; + } - var initialSnapshot = storeNames.length ? StateFunctions.filterSnapshots(this, this._initSnapshot, storeNames) : this._initSnapshot; + var initialSnapshot = storeNames.length ? StateFunctions.filterSnapshots(this, this._initSnapshot, storeNames) : this._initSnapshot; - StateFunctions.setAppState(this, this.serialize(initialSnapshot), function (storeInst) { - storeInst.lifecycle('init'); - storeInst.emitChange(); - }); - }; + StateFunctions.setAppState(this, this.serialize(initialSnapshot), function (storeInst) { + storeInst.lifecycle('init'); + storeInst.emitChange(); + }); + }; - Alt.prototype.flush = function flush() { - var state = this.serialize(StateFunctions.snapshot(this)); - this.recycle(); - return state; - }; + Alt.prototype.flush = function flush() { + var state = this.serialize(StateFunctions.snapshot(this)); + this.recycle(); + return state; + }; - Alt.prototype.bootstrap = function bootstrap(data) { - StateFunctions.setAppState(this, data, function (storeInst, state) { - storeInst.lifecycle('bootstrap', state); - storeInst.emitChange(); - }); - }; + Alt.prototype.bootstrap = function bootstrap(data) { + StateFunctions.setAppState(this, data, function (storeInst, state) { + storeInst.lifecycle('bootstrap', state); + storeInst.emitChange(); + }); + }; - Alt.prototype.prepare = function prepare(storeInst, payload) { - var data = {}; - if (!storeInst.displayName) { - throw new ReferenceError('Store provided does not have a name'); - } - data[storeInst.displayName] = payload; - return this.serialize(data); - }; + Alt.prototype.prepare = function prepare(storeInst, payload) { + var data = {}; + if (!storeInst.displayName) { + throw new ReferenceError('Store provided does not have a name'); + } + data[storeInst.displayName] = payload; + return this.serialize(data); + }; - // Instance type methods for injecting alt into your application as context + // Instance type methods for injecting alt into your application as context - Alt.prototype.addActions = function addActions(name, ActionsClass) { - for (var _len8 = arguments.length, args = Array(_len8 > 2 ? _len8 - 2 : 0), _key8 = 2; _key8 < _len8; _key8++) { - args[_key8 - 2] = arguments[_key8]; - } + Alt.prototype.addActions = function addActions(name, ActionsClass) { + for (var _len8 = arguments.length, args = Array(_len8 > 2 ? _len8 - 2 : 0), _key8 = 2; _key8 < _len8; _key8++) { + args[_key8 - 2] = arguments[_key8]; + } - this.actions[name] = Array.isArray(ActionsClass) ? this.generateActions.apply(this, ActionsClass) //eslint-disable-line - : this.createActions.apply(this, [ActionsClass].concat(args)); - }; + this.actions[name] = Array.isArray(ActionsClass) ? this.generateActions.apply(this, ActionsClass) //eslint-disable-line + : this.createActions.apply(this, [ActionsClass].concat(args)); + }; - Alt.prototype.addStore = function addStore(name, StoreModel) { - for (var _len9 = arguments.length, args = Array(_len9 > 2 ? _len9 - 2 : 0), _key9 = 2; _key9 < _len9; _key9++) { - args[_key9 - 2] = arguments[_key9]; - } + Alt.prototype.addStore = function addStore(name, StoreModel) { + for (var _len9 = arguments.length, args = Array(_len9 > 2 ? _len9 - 2 : 0), _key9 = 2; _key9 < _len9; _key9++) { + args[_key9 - 2] = arguments[_key9]; + } - this.createStore.apply(this, [StoreModel, name].concat(args)); - }; + this.createStore.apply(this, [StoreModel, name].concat(args)); + }; - Alt.prototype.getActions = function getActions(name) { - return this.actions[name]; - }; + Alt.prototype.getActions = function getActions(name) { + return this.actions[name]; + }; - Alt.prototype.getStore = function getStore(name) { - return this.stores[name]; - }; + Alt.prototype.getStore = function getStore(name) { + return this.stores[name]; + }; - Alt.debug = function debug(name, alt, win) { - var key = 'alt.js.org'; - var context = win; - if (!context && typeof window !== 'undefined') { - context = window; - } - if (typeof context !== 'undefined') { - context[key] = context[key] || []; - context[key].push({ name: name, alt: alt }); - } - return alt; - }; + Alt.debug = function debug(name, alt, win) { + var key = 'alt.js.org'; + var context = win; + if (!context && typeof window !== 'undefined') { + context = window; + } + if (typeof context !== 'undefined') { + context[key] = context[key] || []; + context[key].push({ name: name, alt: alt }); + } + return alt; + }; - return Alt; + return Alt; }(); exports.default = Alt; @@ -1126,7 +1125,7 @@ module.exports = invariant; Object.defineProperty(exports, "__esModule", { - value: true + value: true }); exports.setAppState = setAppState; exports.snapshot = snapshot; @@ -1140,58 +1139,58 @@ var fn = _interopRequireWildcard(_functions); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; } } newObj.default = obj; return newObj; } } function setAppState(instance, data, onStore) { - var obj = instance.deserialize(data); - fn.eachObject(function (key, value) { - var store = instance.stores[key]; - if (store) { - var config = store.StoreModel.config; - - var state = store.state; - if (config.onDeserialize) obj[key] = config.onDeserialize(value) || value; - if (fn.isMutableObject(state)) { - fn.eachObject(function (k) { - return delete state[k]; - }, [state]); - fn.assign(state, obj[key]); - } else { - store.state = obj[key]; - } - onStore(store, store.state); - } - }, [obj]); + var obj = instance.deserialize(data); + fn.eachObject(function (key, value) { + var store = instance.stores[key]; + if (store) { + var config = store.StoreModel.config; + + var state = store.state; + if (config.onDeserialize) obj[key] = config.onDeserialize(value) || value; + if (fn.isMutableObject(state)) { + fn.eachObject(function (k) { + return delete state[k]; + }, [state]); + fn.assign(state, obj[key]); + } else { + store.state = obj[key]; + } + onStore(store, store.state); + } + }, [obj]); } function snapshot(instance) { - var storeNames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; - - var stores = storeNames.length ? storeNames : Object.keys(instance.stores); - return stores.reduce(function (obj, storeHandle) { - var storeName = storeHandle.displayName || storeHandle; - var store = instance.stores[storeName]; - var config = store.StoreModel.config; - - store.lifecycle('snapshot'); - var customSnapshot = config.onSerialize && config.onSerialize(store.state); - obj[storeName] = customSnapshot || store.getState(); //eslint-disable-line - return obj; - }, {}); + var storeNames = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + + var stores = storeNames.length ? storeNames : Object.keys(instance.stores); + return stores.reduce(function (obj, storeHandle) { + var storeName = storeHandle.displayName || storeHandle; + var store = instance.stores[storeName]; + var config = store.StoreModel.config; + + store.lifecycle('snapshot'); + var customSnapshot = config.onSerialize && config.onSerialize(store.state); + obj[storeName] = customSnapshot || store.getState(); //eslint-disable-line + return obj; + }, {}); } function saveInitialSnapshot(instance, key) { - var state = instance.deserialize(instance.serialize(instance.stores[key].state)); - instance._initSnapshot[key] = state; //eslint-disable-line - instance._lastSnapshot[key] = state; //eslint-disable-line + var state = instance.deserialize(instance.serialize(instance.stores[key].state)); + instance._initSnapshot[key] = state; //eslint-disable-line + instance._lastSnapshot[key] = state; //eslint-disable-line } function filterSnapshots(instance, state, stores) { - return stores.reduce(function (obj, store) { - var storeName = store.displayName || store; - if (!state[storeName]) { - throw new ReferenceError(storeName + ' is not a valid store'); - } - obj[storeName] = state[storeName]; //eslint-disable-line - return obj; - }, {}); + return stores.reduce(function (obj, store) { + var storeName = store.displayName || store; + if (!state[storeName]) { + throw new ReferenceError(storeName + ' is not a valid store'); + } + obj[storeName] = state[storeName]; //eslint-disable-line + return obj; + }, {}); } /***/ }), @@ -1202,7 +1201,7 @@ function filterSnapshots(instance, state, stores) { Object.defineProperty(exports, "__esModule", { - value: true + value: true }); exports.createStoreConfig = createStoreConfig; exports.transformStore = transformStore; @@ -1236,149 +1235,149 @@ function _possibleConstructorReturn(self, call) { if (!self) { throw new Referen function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } function doSetState(store, storeInstance, state) { - if (!state) { - return; - } + if (!state) { + return; + } - var config = storeInstance.StoreModel.config; + var config = storeInstance.StoreModel.config; - var nextState = fn.isFunction(state) ? state(storeInstance.state) : state; + var nextState = fn.isFunction(state) ? state(storeInstance.state) : state; - storeInstance.state = config.setState.call( //eslint-disable-line - store, storeInstance.state, nextState); + storeInstance.state = config.setState.call( //eslint-disable-line + store, storeInstance.state, nextState); - if (!store.alt.dispatcher.isDispatching()) { - store.emitChange(); - } + if (!store.alt.dispatcher.isDispatching()) { + store.emitChange(); + } } function createPrototype(proto, alt, key, extras) { - return fn.assign(proto, _StoreMixin2.default, { - displayName: key, - alt: alt, - dispatcher: alt.dispatcher, - preventDefault: function preventDefault() { - this.getInstance().preventDefault = true; - }, - - boundListeners: [], - lifecycleEvents: {}, - actionListeners: {}, - publicMethods: {}, - handlesOwnErrors: false - }, extras); + return fn.assign(proto, _StoreMixin2.default, { + displayName: key, + alt: alt, + dispatcher: alt.dispatcher, + preventDefault: function preventDefault() { + this.getInstance().preventDefault = true; + }, + + boundListeners: [], + lifecycleEvents: {}, + actionListeners: {}, + publicMethods: {}, + handlesOwnErrors: false + }, extras); } function createStoreConfig(globalConfig, StoreModel) { - StoreModel.config = fn.assign({ - //eslint-disable-line - getState: function getState(state) { - if (Array.isArray(state)) { - return state.slice(); - } else if (fn.isMutableObject(state)) { - return fn.assign({}, state); - } - return state; - }, - setState: function setState(currentState, nextState) { - if (fn.isMutableObject(nextState)) { - return fn.assign(currentState, nextState); - } - return nextState; - } - }, globalConfig, StoreModel.config); + StoreModel.config = fn.assign({ + //eslint-disable-line + getState: function getState(state) { + if (Array.isArray(state)) { + return state.slice(); + } else if (fn.isMutableObject(state)) { + return fn.assign({}, state); + } + return state; + }, + setState: function setState(currentState, nextState) { + if (fn.isMutableObject(nextState)) { + return fn.assign(currentState, nextState); + } + return nextState; + } + }, globalConfig, StoreModel.config); } function transformStore(transforms, StoreModel) { - return transforms.reduce(function (Store, transform) { - return transform(Store); - }, StoreModel); + return transforms.reduce(function (Store, transform) { + return transform(Store); + }, StoreModel); } function createStoreFromObject(alt, StoreModel, key) { - var storeInstance = void 0; - - var StoreProto = createPrototype({}, alt, key, fn.assign({ - getInstance: function getInstance() { - return storeInstance; - }, - setState: function setState(nextState) { - doSetState(this, storeInstance, nextState); - } - }, StoreModel)); + var storeInstance = void 0; - // bind the store listeners - /* istanbul ignore else */ - if (StoreProto.bindListeners) { - _StoreMixin2.default.bindListeners.call(StoreProto, StoreProto.bindListeners); - } - /* istanbul ignore else */ - if (StoreProto.observe) { - _StoreMixin2.default.bindListeners.call(StoreProto, StoreProto.observe(alt)); + var StoreProto = createPrototype({}, alt, key, fn.assign({ + getInstance: function getInstance() { + return storeInstance; + }, + setState: function setState(nextState) { + doSetState(this, storeInstance, nextState); } + }, StoreModel)); - // bind the lifecycle events - /* istanbul ignore else */ - if (StoreProto.lifecycle) { - fn.eachObject(function (eventName, event) { - _StoreMixin2.default.on.call(StoreProto, eventName, event); - }, [StoreProto.lifecycle]); - } + // bind the store listeners + /* istanbul ignore else */ + if (StoreProto.bindListeners) { + _StoreMixin2.default.bindListeners.call(StoreProto, StoreProto.bindListeners); + } + /* istanbul ignore else */ + if (StoreProto.observe) { + _StoreMixin2.default.bindListeners.call(StoreProto, StoreProto.observe(alt)); + } - // create the instance and fn.assign the public methods to the instance - storeInstance = fn.assign(new _AltStore2.default(alt, StoreProto, StoreProto.state !== undefined ? StoreProto.state : {}, StoreModel), StoreProto.publicMethods, { - displayName: key, - config: StoreModel.config - }); + // bind the lifecycle events + /* istanbul ignore else */ + if (StoreProto.lifecycle) { + fn.eachObject(function (eventName, event) { + _StoreMixin2.default.on.call(StoreProto, eventName, event); + }, [StoreProto.lifecycle]); + } - return storeInstance; + // create the instance and fn.assign the public methods to the instance + storeInstance = fn.assign(new _AltStore2.default(alt, StoreProto, StoreProto.state !== undefined ? StoreProto.state : {}, StoreModel), StoreProto.publicMethods, { + displayName: key, + config: StoreModel.config + }); + + return storeInstance; } function createStoreFromClass(alt, StoreModel, key) { - var storeInstance = void 0; - var config = StoreModel.config; + var storeInstance = void 0; + var config = StoreModel.config; - // Creating a class here so we don't overload the provided store's - // prototype with the mixin behaviour and I'm extending from StoreModel - // so we can inherit any extensions from the provided store. + // Creating a class here so we don't overload the provided store's + // prototype with the mixin behaviour and I'm extending from StoreModel + // so we can inherit any extensions from the provided store. - var Store = function (_StoreModel) { - _inherits(Store, _StoreModel); + var Store = function (_StoreModel) { + _inherits(Store, _StoreModel); - function Store() { - _classCallCheck(this, Store); + function Store() { + _classCallCheck(this, Store); - return _possibleConstructorReturn(this, _StoreModel.apply(this, arguments)); - } - - return Store; - }(StoreModel); + return _possibleConstructorReturn(this, _StoreModel.apply(this, arguments)); + } - createPrototype(Store.prototype, alt, key, { - type: 'AltStore', - getInstance: function getInstance() { - return storeInstance; - }, - setState: function setState(nextState) { - doSetState(this, storeInstance, nextState); - } - }); + return Store; + }(StoreModel); - for (var _len = arguments.length, argsForClass = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { - argsForClass[_key - 3] = arguments[_key]; + createPrototype(Store.prototype, alt, key, { + type: 'AltStore', + getInstance: function getInstance() { + return storeInstance; + }, + setState: function setState(nextState) { + doSetState(this, storeInstance, nextState); } + }); - var store = new (Function.prototype.bind.apply(Store, [null].concat(argsForClass)))(); + for (var _len = arguments.length, argsForClass = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { + argsForClass[_key - 3] = arguments[_key]; + } - /* istanbul ignore next */ - if (config.bindListeners) store.bindListeners(config.bindListeners); - /* istanbul ignore next */ - if (config.datasource) store.registerAsync(config.datasource); + var store = new (Function.prototype.bind.apply(Store, [null].concat(argsForClass)))(); - storeInstance = fn.assign(new _AltStore2.default(alt, store, store.state !== undefined ? store.state : store, StoreModel), utils.getInternalMethods(StoreModel), config.publicMethods, { displayName: key }); + /* istanbul ignore next */ + if (config.bindListeners) store.bindListeners(config.bindListeners); + /* istanbul ignore next */ + if (config.datasource) store.registerAsync(config.datasource); - return storeInstance; + storeInstance = fn.assign(new _AltStore2.default(alt, store, store.state !== undefined ? store.state : store, StoreModel), utils.getInternalMethods(StoreModel), config.publicMethods, { displayName: key }); + + return storeInstance; } /***/ }), @@ -1389,7 +1388,7 @@ function createStoreFromClass(alt, StoreModel, key) { Object.defineProperty(exports, "__esModule", { - value: true + value: true }); var _transmitter = __webpack_require__(3); @@ -1407,129 +1406,129 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { de function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } var AltStore = function () { - function AltStore(alt, model, state, StoreModel) { - var _this = this; + function AltStore(alt, model, state, StoreModel) { + var _this = this; - _classCallCheck(this, AltStore); + _classCallCheck(this, AltStore); - var lifecycleEvents = model.lifecycleEvents; - this.transmitter = (0, _transmitter2.default)(); - this.lifecycle = function (event, x) { - if (lifecycleEvents[event]) lifecycleEvents[event].publish(x); - }; - this.state = state; - - this.alt = alt; - this.preventDefault = false; - this.displayName = model.displayName; - this.boundListeners = model.boundListeners; - this.StoreModel = StoreModel; - this.reduce = model.reduce || function (x) { - return x; - }; - this.subscriptions = []; + var lifecycleEvents = model.lifecycleEvents; + this.transmitter = (0, _transmitter2.default)(); + this.lifecycle = function (event, x) { + if (lifecycleEvents[event]) lifecycleEvents[event].publish(x); + }; + this.state = state; + + this.alt = alt; + this.preventDefault = false; + this.displayName = model.displayName; + this.boundListeners = model.boundListeners; + this.StoreModel = StoreModel; + this.reduce = model.reduce || function (x) { + return x; + }; + this.subscriptions = []; - var output = model.output || function (x) { - return x; - }; + var output = model.output || function (x) { + return x; + }; - this.emitChange = function () { - return _this.transmitter.publish(output(_this.state)); - }; + this.emitChange = function () { + return _this.transmitter.publish(output(_this.state)); + }; - var handleDispatch = function handleDispatch(f, payload) { - try { - return f(); - } catch (e) { - if (model.handlesOwnErrors) { - _this.lifecycle('error', { - error: e, - payload: payload, - state: _this.state - }); - return false; - } - - throw e; - } - }; + var handleDispatch = function handleDispatch(f, payload) { + try { + return f(); + } catch (e) { + if (model.handlesOwnErrors) { + _this.lifecycle('error', { + error: e, + payload: payload, + state: _this.state + }); + return false; + } - fn.assign(this, model.publicMethods); + throw e; + } + }; - // Register dispatcher - this.dispatchToken = alt.dispatcher.register(function (payload) { - _this.preventDefault = false; + fn.assign(this, model.publicMethods); - _this.lifecycle('beforeEach', { - payload: payload, - state: _this.state - }); + // Register dispatcher + this.dispatchToken = alt.dispatcher.register(function (payload) { + _this.preventDefault = false; - var actionHandlers = model.actionListeners[payload.action]; - - if (actionHandlers || model.otherwise) { - var result = void 0; - - if (actionHandlers) { - result = handleDispatch(function () { - return actionHandlers.filter(Boolean).every(function (handler) { - return handler.call(model, payload.data, payload.action) !== false; - }); - }, payload); - } else { - result = handleDispatch(function () { - model.otherwise(payload.data, payload.action); - }, payload); - } - if (result !== false && !_this.preventDefault) _this.emitChange(); - } + _this.lifecycle('beforeEach', { + payload: payload, + state: _this.state + }); - if (model.reduce) { - handleDispatch(function () { - var value = model.reduce(_this.state, payload); - if (value !== undefined) _this.state = value; - }, payload); - if (!_this.preventDefault) _this.emitChange(); - } + var actionHandlers = model.actionListeners[payload.action]; + + if (actionHandlers || model.otherwise) { + var result = void 0; - _this.lifecycle('afterEach', { - payload: payload, - state: _this.state + if (actionHandlers) { + result = handleDispatch(function () { + return actionHandlers.filter(Boolean).every(function (handler) { + return handler.call(model, payload.data, payload.action) !== false; }); - }); + }, payload); + } else { + result = handleDispatch(function () { + model.otherwise(payload.data, payload.action); + }, payload); + } + if (result !== false && !_this.preventDefault) _this.emitChange(); + } - this.lifecycle('init'); - } + if (model.reduce) { + handleDispatch(function () { + var value = model.reduce(_this.state, payload); + if (value !== undefined) _this.state = value; + }, payload); + if (!_this.preventDefault) _this.emitChange(); + } - AltStore.prototype.listen = function listen(cb) { - var _this2 = this; + _this.lifecycle('afterEach', { + payload: payload, + state: _this.state + }); + }); - if (!fn.isFunction(cb)) throw new TypeError('listen expects a function'); + this.lifecycle('init'); + } - var _transmitter$subscrib = this.transmitter.subscribe(cb), - dispose = _transmitter$subscrib.dispose; + AltStore.prototype.listen = function listen(cb) { + var _this2 = this; - this.subscriptions.push({ cb: cb, dispose: dispose }); - return function () { - _this2.lifecycle('unlisten'); - dispose(); - }; - }; + if (!fn.isFunction(cb)) throw new TypeError('listen expects a function'); - AltStore.prototype.unlisten = function unlisten(cb) { - this.lifecycle('unlisten'); - this.subscriptions.filter(function (subscription) { - return subscription.cb === cb; - }).forEach(function (subscription) { - return subscription.dispose(); - }); - }; + var _transmitter$subscrib = this.transmitter.subscribe(cb), + dispose = _transmitter$subscrib.dispose; - AltStore.prototype.getState = function getState() { - return this.StoreModel.config.getState.call(this, this.state); + this.subscriptions.push({ cb: cb, dispose: dispose }); + return function () { + _this2.lifecycle('unlisten'); + dispose(); }; + }; + + AltStore.prototype.unlisten = function unlisten(cb) { + this.lifecycle('unlisten'); + this.subscriptions.filter(function (subscription) { + return subscription.cb === cb; + }).forEach(function (subscription) { + return subscription.dispose(); + }); + }; + + AltStore.prototype.getState = function getState() { + return this.StoreModel.config.getState.call(this, this.state); + }; - return AltStore; + return AltStore; }(); exports.default = AltStore; @@ -1543,7 +1542,7 @@ module.exports = exports['default']; Object.defineProperty(exports, "__esModule", { - value: true + value: true }); var _transmitter = __webpack_require__(3); @@ -1559,172 +1558,172 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var StoreMixin = { - waitFor: function waitFor() { - for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) { - sources[_key] = arguments[_key]; - } + waitFor: function waitFor() { + for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) { + sources[_key] = arguments[_key]; + } - if (!sources.length) { - throw new ReferenceError('Dispatch tokens not provided'); - } + if (!sources.length) { + throw new ReferenceError('Dispatch tokens not provided'); + } - var sourcesArray = sources; - if (sources.length === 1) { - sourcesArray = Array.isArray(sources[0]) ? sources[0] : sources; - } + var sourcesArray = sources; + if (sources.length === 1) { + sourcesArray = Array.isArray(sources[0]) ? sources[0] : sources; + } - var tokens = sourcesArray.map(function (source) { - return source.dispatchToken || source; - }); + var tokens = sourcesArray.map(function (source) { + return source.dispatchToken || source; + }); - this.dispatcher.waitFor(tokens); - }, - exportAsync: function exportAsync(asyncMethods) { - this.registerAsync(asyncMethods); - }, - registerAsync: function registerAsync(asyncDef) { - var _this = this; + this.dispatcher.waitFor(tokens); + }, + exportAsync: function exportAsync(asyncMethods) { + this.registerAsync(asyncMethods); + }, + registerAsync: function registerAsync(asyncDef) { + var _this = this; - var loadCounter = 0; + var loadCounter = 0; - var asyncMethods = fn.isFunction(asyncDef) ? asyncDef(this.alt) : asyncDef; + var asyncMethods = fn.isFunction(asyncDef) ? asyncDef(this.alt) : asyncDef; - var toExport = Object.keys(asyncMethods).reduce(function (publicMethods, methodName) { - var desc = asyncMethods[methodName]; - var spec = fn.isFunction(desc) ? desc(_this) : desc; + var toExport = Object.keys(asyncMethods).reduce(function (publicMethods, methodName) { + var desc = asyncMethods[methodName]; + var spec = fn.isFunction(desc) ? desc(_this) : desc; - var validHandlers = ['success', 'error', 'loading']; - validHandlers.forEach(function (handler) { - if (spec[handler] && !spec[handler].id) { - throw new Error(handler + ' handler must be an action function'); - } - }); + var validHandlers = ['success', 'error', 'loading']; + validHandlers.forEach(function (handler) { + if (spec[handler] && !spec[handler].id) { + throw new Error(handler + ' handler must be an action function'); + } + }); - publicMethods[methodName] = function () { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - //eslint-disable-line - var state = _this.getInstance().getState(); - var value = spec.local && spec.local.apply(spec, [state].concat(args)); - var shouldFetch = spec.shouldFetch ? spec.shouldFetch.apply(spec, [state].concat(args)) - /*eslint-disable*/ - : value == null; - /* eslint-enable */ - var intercept = spec.interceptResponse || function (x) { - return x; - }; - var makeActionHandler = function makeActionHandler(action, isError) { - return function (x) { - var fire = function fire() { - loadCounter -= 1; - action(intercept(x, action, args)); - if (isError) throw x; - return x; - }; - return _this.alt.trapAsync ? function () { - return fire(); - } : fire(); - }; - }; - - // if we don't have it in cache then fetch it - if (shouldFetch) { - loadCounter += 1; - /* istanbul ignore else */ - if (spec.loading) spec.loading(intercept(null, spec.loading, args)); - return spec.remote.apply(spec, [state].concat(args)).then(makeActionHandler(spec.success), makeActionHandler(spec.error, 1)); - } - - // otherwise emit the change now - _this.emitChange(); - return value; + publicMethods[methodName] = function () { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } + + //eslint-disable-line + var state = _this.getInstance().getState(); + var value = spec.local && spec.local.apply(spec, [state].concat(args)); + var shouldFetch = spec.shouldFetch ? spec.shouldFetch.apply(spec, [state].concat(args)) + /*eslint-disable*/ + : value == null; + /* eslint-enable */ + var intercept = spec.interceptResponse || function (x) { + return x; + }; + var makeActionHandler = function makeActionHandler(action, isError) { + return function (x) { + var fire = function fire() { + loadCounter -= 1; + action(intercept(x, action, args)); + if (isError) throw x; + return x; }; + return _this.alt.trapAsync ? function () { + return fire(); + } : fire(); + }; + }; - return publicMethods; - }, {}); + // if we don't have it in cache then fetch it + if (shouldFetch) { + loadCounter += 1; + /* istanbul ignore else */ + if (spec.loading) spec.loading(intercept(null, spec.loading, args)); + return spec.remote.apply(spec, [state].concat(args)).then(makeActionHandler(spec.success), makeActionHandler(spec.error, 1)); + } - this.exportPublicMethods(toExport); - this.exportPublicMethods({ - isLoading: function isLoading() { - return loadCounter > 0; - } - }); - }, - exportPublicMethods: function exportPublicMethods(methods) { - var _this2 = this; + // otherwise emit the change now + _this.emitChange(); + return value; + }; - fn.eachObject(function (methodName, value) { - if (!fn.isFunction(value)) { - throw new TypeError('exportPublicMethods expects a function'); - } + return publicMethods; + }, {}); - _this2.publicMethods[methodName] = value; - }, [methods]); - }, - emitChange: function emitChange() { - this.getInstance().emitChange(); - }, - on: function on(lifecycleEvent, handler) { - if (lifecycleEvent === 'error') this.handlesOwnErrors = true; - var bus = this.lifecycleEvents[lifecycleEvent] || (0, _transmitter2.default)(); - this.lifecycleEvents[lifecycleEvent] = bus; - return bus.subscribe(handler.bind(this)); - }, - bindAction: function bindAction(symbol, handler) { - if (!symbol) { - throw new ReferenceError('Invalid action reference passed in'); - } - if (!fn.isFunction(handler)) { - throw new TypeError('bindAction expects a function'); - } + this.exportPublicMethods(toExport); + this.exportPublicMethods({ + isLoading: function isLoading() { + return loadCounter > 0; + } + }); + }, + exportPublicMethods: function exportPublicMethods(methods) { + var _this2 = this; - // You can pass in the constant or the function itself - var key = symbol.id ? symbol.id : symbol; - this.actionListeners[key] = this.actionListeners[key] || []; - this.actionListeners[key].push(handler.bind(this)); - this.boundListeners.push(key); - }, - bindActions: function bindActions(actions) { - var _this3 = this; + fn.eachObject(function (methodName, value) { + if (!fn.isFunction(value)) { + throw new TypeError('exportPublicMethods expects a function'); + } - fn.eachObject(function (action, symbol) { - var matchFirstCharacter = /./; - var assumedEventHandler = action.replace(matchFirstCharacter, function (x) { - return 'on' + x[0].toUpperCase(); - }); + _this2.publicMethods[methodName] = value; + }, [methods]); + }, + emitChange: function emitChange() { + this.getInstance().emitChange(); + }, + on: function on(lifecycleEvent, handler) { + if (lifecycleEvent === 'error') this.handlesOwnErrors = true; + var bus = this.lifecycleEvents[lifecycleEvent] || (0, _transmitter2.default)(); + this.lifecycleEvents[lifecycleEvent] = bus; + return bus.subscribe(handler.bind(this)); + }, + bindAction: function bindAction(symbol, handler) { + if (!symbol) { + throw new ReferenceError('Invalid action reference passed in'); + } + if (!fn.isFunction(handler)) { + throw new TypeError('bindAction expects a function'); + } - if (_this3[action] && _this3[assumedEventHandler]) { - // If you have both action and onAction - throw new ReferenceError('You have multiple action handlers bound to an action: ' + (action + ' and ' + assumedEventHandler)); - } + // You can pass in the constant or the function itself + var key = symbol.id ? symbol.id : symbol; + this.actionListeners[key] = this.actionListeners[key] || []; + this.actionListeners[key].push(handler.bind(this)); + this.boundListeners.push(key); + }, + bindActions: function bindActions(actions) { + var _this3 = this; + + fn.eachObject(function (action, symbol) { + var matchFirstCharacter = /./; + var assumedEventHandler = action.replace(matchFirstCharacter, function (x) { + return 'on' + x[0].toUpperCase(); + }); - var handler = _this3[action] || _this3[assumedEventHandler]; - if (handler) { - _this3.bindAction(symbol, handler); - } - }, [actions]); - }, - bindListeners: function bindListeners(obj) { - var _this4 = this; + if (_this3[action] && _this3[assumedEventHandler]) { + // If you have both action and onAction + throw new ReferenceError('You have multiple action handlers bound to an action: ' + (action + ' and ' + assumedEventHandler)); + } - fn.eachObject(function (methodName, symbol) { - var listener = _this4[methodName]; + var handler = _this3[action] || _this3[assumedEventHandler]; + if (handler) { + _this3.bindAction(symbol, handler); + } + }, [actions]); + }, + bindListeners: function bindListeners(obj) { + var _this4 = this; - if (!listener) { - throw new ReferenceError(methodName + ' defined but does not exist in ' + _this4.displayName); - } + fn.eachObject(function (methodName, symbol) { + var listener = _this4[methodName]; - if (Array.isArray(symbol)) { - symbol.forEach(function (action) { - _this4.bindAction(action, listener); - }); - } else { - _this4.bindAction(symbol, listener); - } - }, [obj]); - } + if (!listener) { + throw new ReferenceError(methodName + ' defined but does not exist in ' + _this4.displayName); + } + + if (Array.isArray(symbol)) { + symbol.forEach(function (action) { + _this4.bindAction(action, listener); + }); + } else { + _this4.bindAction(symbol, listener); + } + }, [obj]); + } }; exports.default = StoreMixin; @@ -1738,7 +1737,7 @@ module.exports = exports['default']; Object.defineProperty(exports, "__esModule", { - value: true + value: true }); exports.default = makeAction; @@ -1759,62 +1758,62 @@ function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function makeAction(alt, namespace, name, implementation, obj) { - var id = utils.uid(alt._actionsRegistry, namespace + '.' + name); - alt._actionsRegistry[id] = 1; //eslint-disable-line + var id = utils.uid(alt._actionsRegistry, namespace + '.' + name); + alt._actionsRegistry[id] = 1; //eslint-disable-line - var data = { id: id, namespace: namespace, name: name }; + var data = { id: id, namespace: namespace, name: name }; - var dispatch = function dispatch(payload) { - return alt.dispatch(id, payload, data); - }; + var dispatch = function dispatch(payload) { + return alt.dispatch(id, payload, data); + }; - // the action itself - var action = function action() { - for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } + // the action itself + var action = function action() { + for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { + args[_key] = arguments[_key]; + } - var invocationResult = implementation.apply(obj, args); - var actionResult = invocationResult; + var invocationResult = implementation.apply(obj, args); + var actionResult = invocationResult; - // async functions that return promises should not be dispatched - if (invocationResult !== undefined && !(0, _isPromise2.default)(invocationResult)) { - if (fn.isFunction(invocationResult)) { - // inner function result should be returned as an action result - actionResult = invocationResult(dispatch, alt); - } else { - dispatch(invocationResult); - } - } + // async functions that return promises should not be dispatched + if (invocationResult !== undefined && !(0, _isPromise2.default)(invocationResult)) { + if (fn.isFunction(invocationResult)) { + // inner function result should be returned as an action result + actionResult = invocationResult(dispatch, alt); + } else { + dispatch(invocationResult); + } + } - if (invocationResult === undefined) { - utils.warn('An action was called but nothing was dispatched'); - } + if (invocationResult === undefined) { + utils.warn('An action was called but nothing was dispatched'); + } - return actionResult; - }; - action.defer = function () { - for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } + return actionResult; + }; + action.defer = function () { + for (var _len2 = arguments.length, args = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { + args[_key2] = arguments[_key2]; + } - return setTimeout(function () { - return action.apply(undefined, args); - }); - }; - action.id = id; - action.data = data; + return setTimeout(function () { + return action.apply(undefined, args); + }); + }; + action.id = id; + action.data = data; - // ensure each reference is unique in the namespace - var container = alt.actions[namespace]; - var namespaceId = utils.uid(container, name); - container[namespaceId] = action; + // ensure each reference is unique in the namespace + var container = alt.actions[namespace]; + var namespaceId = utils.uid(container, name); + container[namespaceId] = action; - // generate a constant - var constant = utils.formatAsConstant(namespaceId); - container[constant] = id; + // generate a constant + var constant = utils.formatAsConstant(namespaceId); + container[constant] = id; - return action; + return action; } module.exports = exports['default']; diff --git a/src/index.js b/src/index.js index c20f1010..6117f8ce 100644 --- a/src/index.js +++ b/src/index.js @@ -91,7 +91,7 @@ class Alt { generateActions(...actionNames) { const actions = { name: 'global' } return this.createActions(actionNames.reduce((obj, action) => { - obj[action] = utils.dispatchIdentity; //eslint-disable-line + obj[action] = utils.dispatchIdentity; //eslint-disable-line return obj }, actions)) } @@ -110,7 +110,7 @@ class Alt { if (fn.isFunction(ActionsClass)) { fn.assign(actions, utils.getPrototypeChain(ActionsClass)) class ActionsGenerator extends ActionsClass { - generateActions(...actionNames) { //eslint-disable-line + generateActions(...actionNames) { actionNames.forEach((actionName) => { actions[actionName] = utils.dispatchIdentity }) @@ -125,12 +125,12 @@ class Alt { fn.eachObject((actionName, action) => { if (!fn.isFunction(action)) { - exportObj[actionName] = action; //eslint-disable-line + exportObj[actionName] = action; //eslint-disable-line return } // create the action - exportObj[actionName] = makeAction( //eslint-disable-line + exportObj[actionName] = makeAction( //eslint-disable-line this, key, actionName, @@ -140,7 +140,7 @@ class Alt { // generate a constant const constant = utils.formatAsConstant(actionName) - exportObj[constant] = exportObj[actionName].id; //eslint-disable-line + exportObj[constant] = exportObj[actionName].id; //eslint-disable-line }, [actions]) return exportObj @@ -208,7 +208,7 @@ class Alt { addActions(name, ActionsClass, ...args) { this.actions[name] = Array.isArray(ActionsClass) - ? this.generateActions.apply(this, ActionsClass) //eslint-disable-line + ? this.generateActions.apply(this, ActionsClass) //eslint-disable-line : this.createActions(ActionsClass, ...args) } diff --git a/src/store/StoreMixin.js b/src/store/StoreMixin.js index f2dc82d5..daf982f7 100644 --- a/src/store/StoreMixin.js +++ b/src/store/StoreMixin.js @@ -39,7 +39,7 @@ const StoreMixin = { } }) - publicMethods[methodName] = (...args) => { //eslint-disable-line + publicMethods[methodName] = (...args) => { //eslint-disable-line const state = this.getInstance().getState() const value = spec.local && spec.local(state, ...args) const shouldFetch = spec.shouldFetch diff --git a/src/store/index.js b/src/store/index.js index ade2e143..37ab368a 100644 --- a/src/store/index.js +++ b/src/store/index.js @@ -14,7 +14,7 @@ function doSetState(store, storeInstance, state) { ? state(storeInstance.state) : state - storeInstance.state = config.setState.call( //eslint-disable-line + storeInstance.state = config.setState.call( //eslint-disable-line store, storeInstance.state, nextState, @@ -42,7 +42,7 @@ function createPrototype(proto, alt, key, extras) { } export function createStoreConfig(globalConfig, StoreModel) { - StoreModel.config = fn.assign({ //eslint-disable-line + StoreModel.config = fn.assign({ //eslint-disable-line getState(state) { if (Array.isArray(state)) { return state.slice() diff --git a/src/utils/AltUtils.js b/src/utils/AltUtils.js index 7a5cf996..bb1c763a 100644 --- a/src/utils/AltUtils.js +++ b/src/utils/AltUtils.js @@ -13,7 +13,7 @@ export function getInternalMethods(Obj, isProto) { return value } - value[m] = obj[m]; //eslint-disable-line + value[m] = obj[m]; //eslint-disable-line return value }, {}) } diff --git a/src/utils/StateFunctions.js b/src/utils/StateFunctions.js index b54e68cf..9c589ae9 100644 --- a/src/utils/StateFunctions.js +++ b/src/utils/StateFunctions.js @@ -28,7 +28,7 @@ export function snapshot(instance, storeNames = []) { store.lifecycle('snapshot') const customSnapshot = config.onSerialize && config.onSerialize(store.state) - obj[storeName] = customSnapshot || store.getState(); //eslint-disable-line + obj[storeName] = customSnapshot || store.getState() //eslint-disable-line return obj }, {}) } @@ -37,8 +37,8 @@ export function saveInitialSnapshot(instance, key) { const state = instance.deserialize( instance.serialize(instance.stores[key].state), ) - instance._initSnapshot[key] = state; //eslint-disable-line - instance._lastSnapshot[key] = state; //eslint-disable-line + instance._initSnapshot[key] = state //eslint-disable-line + instance._lastSnapshot[key] = state //eslint-disable-line } export function filterSnapshots(instance, state, stores) { @@ -47,7 +47,7 @@ export function filterSnapshots(instance, state, stores) { if (!state[storeName]) { throw new ReferenceError(`${storeName} is not a valid store`) } - obj[storeName] = state[storeName]; //eslint-disable-line + obj[storeName] = state[storeName] //eslint-disable-line return obj }, {}) } diff --git a/test/babel/index.js b/test/babel/index.js index 04eb1f83..9449ede8 100644 --- a/test/babel/index.js +++ b/test/babel/index.js @@ -1,370 +1,373 @@ -/* eslint-disable */ (function (global) { - const babelHelpers = global.babelHelpers = {}; - - babelHelpers.jsx = (function () { - const REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol.for && Symbol.for('react.element') || 0xeac7; - return function createRawReactElement(type, props, key, children) { - const defaultProps = type && type.defaultProps; - const childrenLength = arguments.length - 3; - - if (!props && childrenLength !== 0) { - props = {}; - } - - if (props && defaultProps) { - for (const propName in defaultProps) { - if (props[propName] === void 0) { - props[propName] = defaultProps[propName]; - } - } - } else if (!props) { - props = defaultProps || {}; - } - - if (childrenLength === 1) { - props.children = children; - } else if (childrenLength > 1) { - const childArray = Array(childrenLength); - - for (let i = 0; i < childrenLength; i++) { - childArray[i] = arguments[i + 3]; - } - - props.children = childArray; - } - - return { - $$typeof: REACT_ELEMENT_TYPE, - type, - key: key === undefined ? null : `${key}`, - ref: null, - props, - _owner: null, - }; - }; - }()); - - babelHelpers.asyncToGenerator = function (fn) { - return function () { - const gen = fn.apply(this, arguments); - return new Promise(((resolve, reject) => { - function step(key, arg) { - let info = null; - let value = null; - try { - info = gen[key](arg); - value = info.value; - } catch (error) { - reject(error); - return; - } - - if (info.done) { - resolve(value); - } else { - Promise.resolve(value).then((value) => { - step('next', value); - }, (err) => { - step('throw', err); - }); - } - } - - step('next'); - })); - }; - }; - - babelHelpers.classCallCheck = function (instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError('Cannot call a class as a function'); + const babelHelpers = global.babelHelpers = {} //eslint-disable-line + + babelHelpers.jsx = (function () { + const REACT_ELEMENT_TYPE = typeof Symbol === 'function' && Symbol.for && Symbol.for('react.element') || 0xeac7 //eslint-disable-line + return function createRawReactElement(type, props, key, children) { + const defaultProps = type && type.defaultProps + const childrenLength = arguments.length - 3 + + if (!props && childrenLength !== 0) { + props = {} + } + + if (props && defaultProps) { + for (const propName in defaultProps) { + if (props[propName] === void 0) { //eslint-disable-line + props[propName] = defaultProps[propName] + } } - }; - - babelHelpers.createClass = (function () { - function defineProperties(target, props) { - for (let i = 0; i < props.length; i++) { - const descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ('value' in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; - }()); - - babelHelpers.defineEnumerableProperties = function (obj, descs) { - for (const key in descs) { - if (!descs.hasOwnProperty(key)) continue; - const desc = descs[key]; - desc.configurable = desc.enumerable = true; - if ('value' in desc) desc.writable = true; - Object.defineProperty(obj, key, desc); - } - - return obj; - }; + } else if (!props) { + props = defaultProps || {} + } - babelHelpers.defaults = function (obj, defaults) { - const keys = Object.getOwnPropertyNames(defaults); + if (childrenLength === 1) { + props.children = children + } else if (childrenLength > 1) { + const childArray = Array(childrenLength) - for (let i = 0; i < keys.length; i++) { - const key = keys[i]; - const value = Object.getOwnPropertyDescriptor(defaults, key); - - if (value && value.configurable && obj[key] === undefined) { - Object.defineProperty(obj, key, value); - } + for (let i = 0; i < childrenLength; i++) { + childArray[i] = arguments[i + 3] } - return obj; - }; - - babelHelpers.defineProperty = function (obj, key, value) { - if (key in obj) { - Object.defineProperty(obj, key, { - value, - enumerable: true, - configurable: true, - writable: true, - }); - } else { - obj[key] = value; + props.children = childArray + } + + return { + $$typeof: REACT_ELEMENT_TYPE, + type, + key: key === undefined ? null : `${key}`, + ref: null, + props, + _owner: null + } + } + }()) + + babelHelpers.asyncToGenerator = function (fn) { + return function () { + const gen = fn.apply(this, arguments) + return new Promise(((resolve, reject) => { + function step(key, arg) { + let info = null + let value = null + try { + info = gen[key](arg) + value = info.value + } catch (error) { + reject(error) + return + } + + if (info.done) { + resolve(value) + } else { + Promise.resolve(value).then((promiseValue) => { + step('next', promiseValue) + }, (err) => { + step('throw', err) + }) + } } - - return obj; - }; - - babelHelpers.extends = Object.assign || function (target) { - for (let i = 1; i < arguments.length; i++) { - const source = arguments[i]; - - for (const key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } + step('next') + })) + } + } + + babelHelpers.classCallCheck = function (instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError('Cannot call a class as a function') + } + } + + babelHelpers.createClass = (function () { + function defineProperties(target, props) { + for (let i = 0; i < props.length; i++) { + const descriptor = props[i] + descriptor.enumerable = descriptor.enumerable || false + descriptor.configurable = true + if ('value' in descriptor) descriptor.writable = true + Object.defineProperty(target, descriptor.key, descriptor) + } + } + + return function (Constructor, protoProps, staticProps) { + if (protoProps) defineProperties(Constructor.prototype, protoProps) + if (staticProps) defineProperties(Constructor, staticProps) + return Constructor + } + }()) + + babelHelpers.defineEnumerableProperties = function (obj, descs) { + for (const key in descs) { + if (!descs.hasOwnProperty(key)) continue + const desc = descs[key] + desc.configurable = desc.enumerable = true //eslint-disable-line + if ('value' in desc) desc.writable = true + Object.defineProperty(obj, key, desc) + } + + return obj + } + + babelHelpers.defaults = function (obj, defaults) { + const keys = Object.getOwnPropertyNames(defaults) + + for (let i = 0; i < keys.length; i++) { + const key = keys[i] + const value = Object.getOwnPropertyDescriptor(defaults, key) + + if (value && value.configurable && obj[key] === undefined) { + Object.defineProperty(obj, key, value) + } + } + + return obj + } + + babelHelpers.defineProperty = function (obj, key, value) { + if (key in obj) { + Object.defineProperty(obj, key, { + value, + enumerable: true, + configurable: true, + writable: true + }) + } else { + obj[key] = value + } + + return obj + } + + babelHelpers.extends = Object.assign || function (target) { + for (let i = 1; i < arguments.length; i++) { + const source = arguments[i] + + for (const key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key] } - - return target; - }; - - babelHelpers.get = function get(object, property, receiver) { - if (object === null) object = Function.prototype; - const desc = Object.getOwnPropertyDescriptor(object, property); - - if (desc === undefined) { - const parent = Object.getPrototypeOf(object); - - if (parent === null) { - return undefined; - } - return get(parent, property, receiver); - } else if ('value' in desc) { - return desc.value; - } - const getter = desc.get; - - if (getter === undefined) { - return undefined; - } - - return getter.call(receiver); - }; - - babelHelpers.inherits = function (subClass, superClass) { - if (typeof superClass !== 'function' && superClass !== null) { - throw new TypeError(`Super expression must either be null or a function, not ${typeof superClass}`); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: false, - writable: true, - configurable: true, - }, - }); - if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; - }; - - babelHelpers.instanceof = function (left, right) { - if (right != null && typeof Symbol !== 'undefined' && right[Symbol.hasInstance]) { - return right[Symbol.hasInstance](left); - } - return left instanceof right; - }; - - babelHelpers.interopRequireDefault = function (obj) { - return obj && obj.__esModule ? obj : { - default: obj, - }; - }; - - babelHelpers.interopRequireWildcard = function (obj) { - if (obj && obj.__esModule) { - return obj; - } - const newObj = {}; - - if (obj != null) { - for (const key in obj) { - if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key]; - } - } - - newObj.default = obj; - return newObj; - }; - - babelHelpers.newArrowCheck = function (innerThis, boundThis) { - if (innerThis !== boundThis) { - throw new TypeError('Cannot instantiate an arrow function'); - } - }; - - babelHelpers.objectDestructuringEmpty = function (obj) { - if (obj == null) throw new TypeError('Cannot destructure undefined'); - }; - - babelHelpers.objectWithoutProperties = function (obj, keys) { - const target = {}; - - for (const i in obj) { - if (keys.indexOf(i) >= 0) continue; - if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; - target[i] = obj[i]; - } - - return target; - }; - - babelHelpers.possibleConstructorReturn = function (self, call) { - if (!self) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return call && (typeof call === 'object' || typeof call === 'function') ? call : self; - }; - - babelHelpers.selfGlobal = typeof global === 'undefined' ? self : global; - - babelHelpers.set = function set(object, property, value, receiver) { - const desc = Object.getOwnPropertyDescriptor(object, property); - - if (desc === undefined) { - const parent = Object.getPrototypeOf(object); - - if (parent !== null) { - set(parent, property, value, receiver); - } - } else if ('value' in desc && desc.writable) { - desc.value = value; + } + } + + return target + } + + babelHelpers.get = function get(object, property, receiver) { + if (object === null) object = Function.prototype + const desc = Object.getOwnPropertyDescriptor(object, property) + + if (desc === undefined) { + const parent = Object.getPrototypeOf(object) + + if (parent === null) { + return undefined + } + return get(parent, property, receiver) + } else if ('value' in desc) { + return desc.value + } + const getter = desc.get + + if (getter === undefined) { + return undefined + } + + return getter.call(receiver) + } + + babelHelpers.inherits = function (subClass, superClass) { + if (typeof superClass !== 'function' && superClass !== null) { + throw new TypeError(`Super expression must either be null or a function, not ${typeof superClass}`) + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + enumerable: false, + writable: true, + configurable: true + } + }) + if (superClass) { + if (Object.setPrototypeOf) { + Object.setPrototypeOf(subClass, superClass) } else { - const setter = desc.set; - - if (setter !== undefined) { - setter.call(receiver, value); - } - } - - return value; - }; - - babelHelpers.slicedToArray = (function () { - function sliceIterator(arr, i) { - const _arr = []; - let _n = true; - let _d = false; - let _e; - - try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { - _arr.push(_s.value); - - if (i && _arr.length === i) break; - } - } catch (err) { - _d = true; - _e = err; - } finally { - try { - if (!_n && _i.return) _i.return(); - } finally { - if (_d) throw _e; - } - } - - return _arr; - } - - return function (arr, i) { - if (Array.isArray(arr)) { - return arr; - } else if (Symbol.iterator in Object(arr)) { - return sliceIterator(arr, i); - } - throw new TypeError('Invalid attempt to destructure non-iterable instance'); - }; - }()); - - babelHelpers.slicedToArrayLoose = function (arr, i) { - if (Array.isArray(arr)) { - return arr; - } else if (Symbol.iterator in Object(arr)) { - const _arr = []; - - for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { - _arr.push(_step.value); - - if (i && _arr.length === i) break; - } - - return _arr; + subClass.__proto__ = superClass } - throw new TypeError('Invalid attempt to destructure non-iterable instance'); - }; - - babelHelpers.taggedTemplateLiteral = function (strings, raw) { - return Object.freeze(Object.defineProperties(strings, { - raw: { - value: Object.freeze(raw), - }, - })); - }; - - babelHelpers.taggedTemplateLiteralLoose = function (strings, raw) { - strings.raw = raw; - return strings; - }; - - babelHelpers.temporalRef = function (val, name, undef) { - if (val === undef) { - throw new ReferenceError(`${name} is not defined - temporal dead zone`); - } else { - return val; + } + + babelHelpers.instanceof = function (left, right) { + if (right != null && typeof Symbol !== 'undefined' && right[Symbol.hasInstance]) { + return right[Symbol.hasInstance](left) + } + return left instanceof right + } + + babelHelpers.interopRequireDefault = function (obj) { + return obj && obj.__esModule ? obj : { + default: obj + } + } + + babelHelpers.interopRequireWildcard = function (obj) { + if (obj && obj.__esModule) { + return obj + } + const newObj = {} + + if (obj != null) { + for (const key in obj) { + if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key] + } + } + + newObj.default = obj + return newObj + } + + babelHelpers.newArrowCheck = function (innerThis, boundThis) { + if (innerThis !== boundThis) { + throw new TypeError('Cannot instantiate an arrow function') + } + } + + babelHelpers.objectDestructuringEmpty = function (obj) { + if (obj == null) throw new TypeError('Cannot destructure undefined') + } + + babelHelpers.objectWithoutProperties = function (obj, keys) { + const target = {} + + for (const i in obj) { + if (keys.indexOf(i) >= 0) continue + if (!Object.prototype.hasOwnProperty.call(obj, i)) continue + target[i] = obj[i] + } + + return target + } + + babelHelpers.possibleConstructorReturn = function (self, call) { + if (!self) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called") + } + + return call && (typeof call === 'object' || typeof call === 'function') ? call : self + } + + babelHelpers.selfGlobal = typeof global === 'undefined' ? self : global + + babelHelpers.set = function set(object, property, value, receiver) { + const desc = Object.getOwnPropertyDescriptor(object, property) + + if (desc === undefined) { + const parent = Object.getPrototypeOf(object) + + if (parent !== null) { + set(parent, property, value, receiver) + } + } else if ('value' in desc && desc.writable) { + desc.value = value + } else { + const setter = desc.set + + if (setter !== undefined) { + setter.call(receiver, value) + } + } + + return value + } + + babelHelpers.slicedToArray = (function () { + function sliceIterator(arr, i) { + const _arr = [] + let _n = true + let _d = false + let _e + + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value) + + if (i && _arr.length === i) break } - }; - - babelHelpers.temporalUndefined = {}; - - babelHelpers.toArray = function (arr) { - return Array.isArray(arr) ? arr : Array.from(arr); - }; - - babelHelpers.toConsumableArray = function (arr) { - if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; - - return arr2; + } catch (err) { + _d = true + _e = err + } finally { + try { + if (!_n && _i.return) _i.return() + } finally { + if (_d) throw _e } - return Array.from(arr); - }; -}(typeof global === 'undefined' ? self : global)); + } + + return _arr + } + + return function (arr, i) { + if (Array.isArray(arr)) { + return arr + } else if (Symbol.iterator in Object(arr)) { + return sliceIterator(arr, i) + } + throw new TypeError('Invalid attempt to destructure non-iterable instance') + } + }()) + + babelHelpers.slicedToArrayLoose = function (arr, i) { + if (Array.isArray(arr)) { + return arr + } else if (Symbol.iterator in Object(arr)) { + const _arr = [] + + for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { + _arr.push(_step.value) + + if (i && _arr.length === i) break + } + + return _arr + } + throw new TypeError('Invalid attempt to destructure non-iterable instance') + } + + babelHelpers.taggedTemplateLiteral = function (strings, raw) { + return Object.freeze(Object.defineProperties(strings, { + raw: { + value: Object.freeze(raw) + } + })) + } + + babelHelpers.taggedTemplateLiteralLoose = function (strings, raw) { + strings.raw = raw + return strings + } + + babelHelpers.temporalRef = function (val, name, undef) { + if (val === undef) { + throw new ReferenceError(`${name} is not defined - temporal dead zone`) + } else { + return val + } + } + + babelHelpers.temporalUndefined = {} + + babelHelpers.toArray = function (arr) { + return Array.isArray(arr) ? arr : Array.from(arr) + } + + babelHelpers.toConsumableArray = function (arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i] + + return arr2 + } + return Array.from(arr) + } +}(typeof global === 'undefined' ? self : global)) //eslint-disable-line diff --git a/test/browser/index.js b/test/browser/index.js index 9b8ecde2..f8fe4058 100644 --- a/test/browser/index.js +++ b/test/browser/index.js @@ -1,61 +1,60 @@ -/* eslint-disable */ -const assign = require('object-assign'); +const assign = require('object-assign') const tests = assign( - {}, - require('../index'), - require('../listen-to-actions'), - require('../final-store'), - require('../recorder'), - require('../setting-state'), - require('../stores-get-alt'), - require('../stores-with-colliding-names'), - require('../testing-utils'), - require('../use-event-emitter'), - require('../store-as-a-module'), - require('../es3-module-pattern') -); + {}, + require('../index'), + require('../listen-to-actions'), + require('../final-store'), + require('../recorder'), + require('../setting-state'), + require('../stores-get-alt'), + require('../stores-with-colliding-names'), + require('../testing-utils'), + require('../use-event-emitter'), + require('../store-as-a-module'), + require('../es3-module-pattern') +) // This code is directly from mocha/lib/interfaces/exports.js // with a few modifications function manualExports(exports, suite) { - const suites = [suite]; + const suites = [suite] - visit(exports); + visit(exports) - function visit(obj) { - var suite; - for (const key in obj) { - if (typeof obj[key] === 'function') { - const fn = obj[key]; - switch (key) { - case 'before': - suites[0].beforeAll(fn); - break; - case 'after': - suites[0].afterAll(fn); - break; - case 'beforeEach': - suites[0].beforeEach(fn); - break; - case 'afterEach': - suites[0].afterEach(fn); - break; - default: - suites[0].addTest(new Mocha.Test(key, fn)); - } - } else { - var suite = Mocha.Suite.create(suites[0], key); - suites.unshift(suite); - visit(obj[key]); - suites.shift(); - } + function visit(obj) { + var suite + for (const key in obj) { + if (typeof obj[key] === 'function') { + const fn = obj[key] + switch (key) { + case 'before': + suites[0].beforeAll(fn) + break + case 'after': + suites[0].afterAll(fn) + break + case 'beforeEach': + suites[0].beforeEach(fn) + break + case 'afterEach': + suites[0].afterEach(fn) + break + default: + suites[0].addTest(new Mocha.Test(key, fn)) } + } else { + var suite = Mocha.Suite.create(suites[0], key) + suites.unshift(suite) + visit(obj[key]) + suites.shift() + } } + } } -manualExports(tests, mocha.suite); +manualExports(tests, mocha.suite) -mocha.setup('exports'); -mocha.checkLeaks(); -mocha.run(); +mocha.setup('exports') +mocha.checkLeaks() +mocha.run() From ea92aca4f0d4c62b66ad997ebcf830a8f22fda17 Mon Sep 17 00:00:00 2001 From: Ryan Date: Fri, 10 Nov 2017 14:30:47 -0500 Subject: [PATCH 18/21] Fix a few missed files --- web/scripts/createIndex.js | 54 +++++++++++++++++++------------------- web/scripts/search.js | 12 ++++----- 2 files changed, 33 insertions(+), 33 deletions(-) diff --git a/web/scripts/createIndex.js b/web/scripts/createIndex.js index c37b3503..fc574077 100644 --- a/web/scripts/createIndex.js +++ b/web/scripts/createIndex.js @@ -1,32 +1,32 @@ -const fs = require('fs'); -const path = require('path'); +const fs = require('fs') +const path = require('path') const lunr = require('lunr'); //eslint-disable-line const index = lunr(function () { - this.field('title', { boost: 10 }); - this.field('description', { boost: 5 }); - this.field('body'); - this.field('layout'); - this.field('permalink'); -}); + this.field('title', { boost: 10 }) + this.field('description', { boost: 5 }) + this.field('body') + this.field('layout') + this.field('permalink') +}) function addDocument(name, idx) { - const markdown = String(fs.readFileSync(name)).split('---'); + const markdown = String(fs.readFileSync(name)).split('---') - const topdoc = markdown[1]; + const topdoc = markdown[1] - const body = markdown.slice(2, markdown.length).join(''); + const body = markdown.slice(2, markdown.length).join('') const doc = topdoc .split('\n') .filter(Boolean) .reduce((obj, prop) => { - const keyVal = prop.split(':'); - obj[keyVal[0]] = keyVal[1].trim(); - return obj; - }, { id: idx, body }); + const keyVal = prop.split(':') + obj[keyVal[0]] = keyVal[1].trim() + return obj + }, { id: idx, body }) - index.add(doc); + index.add(doc) return { id: doc.id, @@ -34,36 +34,36 @@ function addDocument(name, idx) { description: doc.description, body: doc.body, permalink: doc.permalink - }; + } } function isDir(fullpath) { try { - return fs.statSync(fullpath).isDirectory(); + return fs.statSync(fullpath).isDirectory() } catch (err) { - return null; + return null } } function fromDirectory(dir) { return fs.readdirSync(dir).reduce((dirs, file) => { - const fullpath = path.join(dir, file); + const fullpath = path.join(dir, file) if (isDir(fullpath)) { - dirs.push(...fromDirectory(path.join(fullpath))); + dirs.push(...fromDirectory(path.join(fullpath))) } else if (/.md$/.test(file)) { - dirs.push(fullpath); + dirs.push(fullpath) } - return dirs; - }, []); + return dirs + }, []) } const documents = fromDirectory('../docs') .concat(fromDirectory('../guides')) - .map(addDocument); + .map(addDocument) const searchData = { docs: documents, index: index.toJSON() -}; +} -fs.writeFileSync('./assets/search.json', JSON.stringify(searchData)); +fs.writeFileSync('./assets/search.json', JSON.stringify(searchData)) diff --git a/web/scripts/search.js b/web/scripts/search.js index 5a38b637..6413849d 100644 --- a/web/scripts/search.js +++ b/web/scripts/search.js @@ -1,14 +1,14 @@ -import SearchApp from 'alt-search-docs'; //eslint-disable-line -import React from 'react'; //eslint-disable-line -import ReactDOM from 'react-dom'; //eslint-disable-line +import SearchApp from 'alt-search-docs' //eslint-disable-line +import React from 'react' //eslint-disable-line +import ReactDOM from 'react-dom' //eslint-disable-line -const github = /goatslacker.github.io\/alt/; +const github = /goatslacker.github.io\/alt/ if (github.test(location.href)) { - location.href = location.href.replace(github, 'alt.js.org'); + location.href = location.href.replace(github, 'alt.js.org') } ReactDOM.render( , document.getElementById('alt-search-app') -); +) From f00268c1e4adbd47fcfeecfa0503da21974161dc Mon Sep 17 00:00:00 2001 From: Ryan Date: Fri, 10 Nov 2017 14:31:42 -0500 Subject: [PATCH 19/21] Fix lint on configs --- dist.config.js | 2 +- dist.min.config.js | 2 +- web/webpack.config.js | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/dist.config.js b/dist.config.js index c5e45d1a..a46abc7d 100644 --- a/dist.config.js +++ b/dist.config.js @@ -16,4 +16,4 @@ module.exports = { exclude: /node_modules/ }] } -}; +} diff --git a/dist.min.config.js b/dist.min.config.js index 73629fd8..ec01d424 100644 --- a/dist.min.config.js +++ b/dist.min.config.js @@ -16,4 +16,4 @@ module.exports = { exclude: /node_modules/ }] } -}; +} diff --git a/web/webpack.config.js b/web/webpack.config.js index 96ce6154..03fa60a6 100644 --- a/web/webpack.config.js +++ b/web/webpack.config.js @@ -1,4 +1,4 @@ -const path = require('path'); +const path = require('path') module.exports = { entry: path.join(__dirname, 'scripts', 'search.js'), @@ -20,4 +20,4 @@ module.exports = { } ] } -}; +} From 0fc08d47b3c39b05aac2be16598b86b00ee9adfd Mon Sep 17 00:00:00 2001 From: Ryan Date: Fri, 10 Nov 2017 17:08:50 -0500 Subject: [PATCH 20/21] Fix dependency warning, remove internal registry --- package.json | 2 +- yarn.lock | 1502 +++++++++++++++++++++++++------------------------- 2 files changed, 751 insertions(+), 753 deletions(-) diff --git a/package.json b/package.json index c0cf9a8f..310b2d19 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "babel-eslint": "^7.2.3", "babel-loader": "^7.1.1", "babel-plugin-add-module-exports": "^0.1.2", - "babel-plugin-external-helpers-2": "6.3.13", + "babel-plugin-external-helpers": "^6.22.0", "babel-plugin-transform-class-properties": "^6.24.1", "babel-plugin-transform-es2015-classes": "^6.24.1", "babel-preset-env": "^1.6.0", diff --git a/yarn.lock b/yarn.lock index e99a666d..cb7b2c96 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4,60 +4,60 @@ abbrev@1: version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" abbrev@1.0.x: version "1.0.9" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" acorn-dynamic-import@^2.0.0: version "2.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" dependencies: acorn "^4.0.3" acorn-globals@^1.0.4: version "1.0.9" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-1.0.9.tgz#55bb5e98691507b74579d0513413217c380c54cf" dependencies: acorn "^2.1.0" acorn-jsx@^3.0.0: version "3.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" dependencies: acorn "^3.0.4" acorn@^2.1.0, acorn@^2.4.0: version "2.7.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-2.7.0.tgz#ab6e7d9d886aaca8b085bc3312b79a198433f0e7" acorn@^3.0.4: version "3.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" acorn@^4.0.3: version "4.0.13" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" -acorn@^5.0.0, acorn@^5.1.1: +acorn@^5.0.0, acorn@^5.2.1: version "5.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.2.1.tgz#317ac7821826c22c702d66189ab8359675f135d7" ajv-keywords@^2.0.0, ajv-keywords@^2.1.0: version "2.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" ajv@^4.9.1: version "4.11.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.0, ajv@^5.2.3: +ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.3, ajv@^5.3.0: version "5.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.3.0.tgz#4414ff74a50879c208ee5fdc826e32c303549eda" dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" @@ -66,7 +66,7 @@ ajv@^5.0.0, ajv@^5.1.0, ajv@^5.1.5, ajv@^5.2.0, ajv@^5.2.3: align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" dependencies: kind-of "^3.0.2" longest "^1.0.1" @@ -74,7 +74,7 @@ align-text@^0.1.1, align-text@^0.1.3: alt-search-docs@1.0.6: version "1.0.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/alt-search-docs/-/alt-search-docs-1.0.6.tgz#adf03aa4fb231a730dca947542adfc5eb700ba51" + resolved "https://registry.yarnpkg.com/alt-search-docs/-/alt-search-docs-1.0.6.tgz#adf03aa4fb231a730dca947542adfc5eb700ba51" dependencies: alt "^0.16.5" axios "^0.5.4" @@ -87,7 +87,7 @@ alt-search-docs@1.0.6: alt@^0.16.5: version "0.16.10" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/alt/-/alt-0.16.10.tgz#56c622c14a1f4b784ad7422f4c8aaac659f2f09d" + resolved "https://registry.yarnpkg.com/alt/-/alt-0.16.10.tgz#56c622c14a1f4b784ad7422f4c8aaac659f2f09d" dependencies: es-symbol "1.1.2" eventemitter3 "0.1.6" @@ -95,109 +95,109 @@ alt@^0.16.5: amdefine@>=0.0.4: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" ansi-escapes@^3.0.0: version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" ansi-regex@^2.0.0: version "2.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" ansi-regex@^3.0.0: version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" ansi-styles@^2.2.1: version "2.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" ansi-styles@^3.1.0: version "3.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" dependencies: color-convert "^1.9.0" anymatch@^1.3.0: version "1.3.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" dependencies: micromatch "^2.1.5" normalize-path "^2.0.0" aproba@^1.0.3: version "1.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" are-we-there-yet@~1.1.2: version "1.1.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" dependencies: delegates "^1.0.0" readable-stream "^2.0.6" argparse@^1.0.7: version "1.0.9" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" dependencies: sprintf-js "~1.0.2" "argparse@~ 0.1.11": version "0.1.16" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-0.1.16.tgz#cfd01e0fbba3d6caed049fbd758d40f65196f57c" dependencies: underscore "~1.7.0" underscore.string "~2.4.0" aria-query@^0.7.0: version "0.7.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/aria-query/-/aria-query-0.7.0.tgz#4af10a1e61573ddea0cf3b99b51c52c05b424d24" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-0.7.0.tgz#4af10a1e61573ddea0cf3b99b51c52c05b424d24" dependencies: ast-types-flow "0.0.7" arr-diff@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" dependencies: arr-flatten "^1.0.1" arr-flatten@^1.0.1: version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" array-includes@^3.0.3: version "3.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" dependencies: define-properties "^1.1.2" es-abstract "^1.7.0" array-union@^1.0.1: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" array-unique@^0.2.1: version "0.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" arrify@^1.0.0: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" asap@~2.0.3: version "2.0.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" asn1.js@^4.0.0: version "4.9.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a" + resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.9.2.tgz#8117ef4f7ed87cd8f89044b5bff97ac243a16c9a" dependencies: bn.js "^4.0.0" inherits "^2.0.1" @@ -205,99 +205,99 @@ asn1.js@^4.0.0: asn1@0.1.11: version "0.1.11" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.1.11.tgz#559be18376d08a4ec4dbe80877d27818639b2df7" asn1@~0.2.3: version "0.2.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" assert-plus@^0.1.5: version "0.1.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160" assert-plus@^0.2.0: version "0.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" assert@^1.1.1: version "1.4.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" dependencies: util "0.10.3" assertion-error@1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.0.0.tgz#c7f85438fdd466bc7ca16ab90c81513797a5d23b" ast-types-flow@0.0.7: version "0.0.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" + resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" ast-types@0.9.6: version "0.9.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9" async-each@^1.0.0: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" async@1.x: version "1.5.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" async@^2.1.2: version "2.6.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" dependencies: lodash "^4.14.0" async@~0.2.6: version "0.2.10" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" + resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" async@~0.9.0: version "0.9.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" + resolved "https://registry.yarnpkg.com/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" asynckit@^0.4.0: version "0.4.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" aws-sign2@~0.5.0: version "0.5.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.5.0.tgz#c57103f7a17fc037f02d7c2e64b602ea223f7d63" aws-sign2@~0.6.0: version "0.6.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" aws-sign2@~0.7.0: version "0.7.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" axios@^0.5.4: version "0.5.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/axios/-/axios-0.5.4.tgz#e06f852257838133e69094d925ccb419de94fdfb" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.5.4.tgz#e06f852257838133e69094d925ccb419de94fdfb" dependencies: es6-promise "^2.0.1" axobject-query@^0.1.0: version "0.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" + resolved "https://registry.yarnpkg.com/axobject-query/-/axobject-query-0.1.0.tgz#62f59dbc59c9f9242759ca349960e7a2fe3c36c0" dependencies: ast-types-flow "0.0.7" babel-cli@^6.26.0: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" + resolved "https://registry.yarnpkg.com/babel-cli/-/babel-cli-6.26.0.tgz#502ab54874d7db88ad00b887a06383ce03d002f1" dependencies: babel-core "^6.26.0" babel-polyfill "^6.26.0" @@ -318,7 +318,7 @@ babel-cli@^6.26.0: babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" dependencies: chalk "^1.1.3" esutils "^2.0.2" @@ -326,7 +326,7 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: babel-core@^6.25.0, babel-core@^6.26.0: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" dependencies: babel-code-frame "^6.26.0" babel-generator "^6.26.0" @@ -350,7 +350,7 @@ babel-core@^6.25.0, babel-core@^6.26.0: babel-eslint@^7.2.3: version "7.2.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" dependencies: babel-code-frame "^6.22.0" babel-traverse "^6.23.1" @@ -359,7 +359,7 @@ babel-eslint@^7.2.3: babel-generator@^6.26.0: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.0.tgz#ac1ae20070b79f6e3ca1d3269613053774f20dc5" dependencies: babel-messages "^6.23.0" babel-runtime "^6.26.0" @@ -372,7 +372,7 @@ babel-generator@^6.26.0: babel-helper-bindify-decorators@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" @@ -380,7 +380,7 @@ babel-helper-bindify-decorators@^6.24.1: babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" dependencies: babel-helper-explode-assignable-expression "^6.24.1" babel-runtime "^6.22.0" @@ -388,7 +388,7 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: babel-helper-builder-react-jsx@^6.24.1: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -396,7 +396,7 @@ babel-helper-builder-react-jsx@^6.24.1: babel-helper-call-delegate@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -405,7 +405,7 @@ babel-helper-call-delegate@^6.24.1: babel-helper-define-map@^6.24.1: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.26.0" @@ -414,7 +414,7 @@ babel-helper-define-map@^6.24.1: babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" @@ -422,7 +422,7 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-helper-explode-class@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" dependencies: babel-helper-bindify-decorators "^6.24.1" babel-runtime "^6.22.0" @@ -431,7 +431,7 @@ babel-helper-explode-class@^6.24.1: babel-helper-function-name@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" dependencies: babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" @@ -441,28 +441,28 @@ babel-helper-function-name@^6.24.1: babel-helper-get-function-arity@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" babel-helper-hoist-variables@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" babel-helper-regex@^6.24.1: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -470,7 +470,7 @@ babel-helper-regex@^6.24.1: babel-helper-remap-async-to-generator@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -480,7 +480,7 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-helper-replace-supers@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" dependencies: babel-helper-optimise-call-expression "^6.24.1" babel-messages "^6.23.0" @@ -491,14 +491,14 @@ babel-helper-replace-supers@^6.24.1: babel-helpers@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" babel-loader@^7.1.1: version "7.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" + resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.2.tgz#f6cbe122710f1aa2af4d881c6d5b54358ca24126" dependencies: find-cache-dir "^1.0.0" loader-utils "^1.0.2" @@ -506,87 +506,87 @@ babel-loader@^7.1.1: babel-messages@^6.23.0: version "6.23.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" dependencies: babel-runtime "^6.22.0" babel-plugin-add-module-exports@^0.1.2: version "0.1.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.1.4.tgz#1a5b6d761ee1f663d845b4ea6878712de31c107a" + resolved "https://registry.yarnpkg.com/babel-plugin-add-module-exports/-/babel-plugin-add-module-exports-0.1.4.tgz#1a5b6d761ee1f663d845b4ea6878712de31c107a" dependencies: babel-template "^6.5.0" babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" dependencies: babel-runtime "^6.22.0" -babel-plugin-external-helpers-2@6.3.13: - version "6.3.13" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-external-helpers-2/-/babel-plugin-external-helpers-2-6.3.13.tgz#f680986ca5aed35c5844c42f7f07a6cd61a3a852" +babel-plugin-external-helpers@^6.22.0: + version "6.22.0" + resolved "https://registry.yarnpkg.com/babel-plugin-external-helpers/-/babel-plugin-external-helpers-6.22.0.tgz#2285f48b02bd5dede85175caf8c62e86adccefa1" dependencies: - babel-runtime "^5.0.0" + babel-runtime "^6.22.0" babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" babel-plugin-syntax-async-generators@^6.5.0: version "6.13.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" babel-plugin-syntax-class-constructor-call@^6.18.0: version "6.18.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" babel-plugin-syntax-class-properties@^6.8.0: version "6.13.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" babel-plugin-syntax-decorators@^6.13.0: version "6.13.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" babel-plugin-syntax-do-expressions@^6.8.0: version "6.13.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" babel-plugin-syntax-dynamic-import@^6.18.0: version "6.18.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" babel-plugin-syntax-export-extensions@^6.8.0: version "6.13.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" babel-plugin-syntax-flow@^6.18.0: version "6.18.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" babel-plugin-syntax-function-bind@^6.8.0: version "6.13.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: version "6.18.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" babel-plugin-transform-async-generator-functions@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-generators "^6.5.0" @@ -594,7 +594,7 @@ babel-plugin-transform-async-generator-functions@^6.24.1: babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-functions "^6.8.0" @@ -602,7 +602,7 @@ babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async- babel-plugin-transform-class-constructor-call@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" dependencies: babel-plugin-syntax-class-constructor-call "^6.18.0" babel-runtime "^6.22.0" @@ -610,7 +610,7 @@ babel-plugin-transform-class-constructor-call@^6.24.1: babel-plugin-transform-class-properties@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" dependencies: babel-helper-function-name "^6.24.1" babel-plugin-syntax-class-properties "^6.8.0" @@ -619,7 +619,7 @@ babel-plugin-transform-class-properties@^6.24.1: babel-plugin-transform-decorators@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" dependencies: babel-helper-explode-class "^6.24.1" babel-plugin-syntax-decorators "^6.13.0" @@ -629,26 +629,26 @@ babel-plugin-transform-decorators@^6.24.1: babel-plugin-transform-do-expressions@^6.22.0: version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" dependencies: babel-plugin-syntax-do-expressions "^6.8.0" babel-runtime "^6.22.0" babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoping@^6.23.0: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" dependencies: babel-runtime "^6.26.0" babel-template "^6.26.0" @@ -658,7 +658,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0: babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-classes@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" dependencies: babel-helper-define-map "^6.24.1" babel-helper-function-name "^6.24.1" @@ -672,33 +672,33 @@ babel-plugin-transform-es2015-classes@^6.23.0, babel-plugin-transform-es2015-cla babel-plugin-transform-es2015-computed-properties@^6.22.0: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" babel-plugin-transform-es2015-destructuring@^6.23.0: version "6.23.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-duplicate-keys@^6.22.0: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" babel-plugin-transform-es2015-for-of@^6.23.0: version "6.23.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-function-name@^6.22.0: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -706,13 +706,13 @@ babel-plugin-transform-es2015-function-name@^6.22.0: babel-plugin-transform-es2015-literals@^6.22.0: version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" dependencies: babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" @@ -720,7 +720,7 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015 babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" dependencies: babel-plugin-transform-strict-mode "^6.24.1" babel-runtime "^6.26.0" @@ -729,7 +729,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e babel-plugin-transform-es2015-modules-systemjs@^6.23.0: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -737,7 +737,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0: babel-plugin-transform-es2015-modules-umd@^6.23.0: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" dependencies: babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" @@ -745,14 +745,14 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0: babel-plugin-transform-es2015-object-super@^6.22.0: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" dependencies: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" babel-plugin-transform-es2015-parameters@^6.23.0: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" dependencies: babel-helper-call-delegate "^6.24.1" babel-helper-get-function-arity "^6.24.1" @@ -763,20 +763,20 @@ babel-plugin-transform-es2015-parameters@^6.23.0: babel-plugin-transform-es2015-shorthand-properties@^6.22.0: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" babel-plugin-transform-es2015-spread@^6.22.0: version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-sticky-regex@^6.22.0: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -784,19 +784,19 @@ babel-plugin-transform-es2015-sticky-regex@^6.22.0: babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-typeof-symbol@^6.23.0: version "6.23.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-unicode-regex@^6.22.0: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -804,7 +804,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0: babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" dependencies: babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" babel-plugin-syntax-exponentiation-operator "^6.8.0" @@ -812,55 +812,55 @@ babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-e babel-plugin-transform-export-extensions@^6.22.0: version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" dependencies: babel-plugin-syntax-export-extensions "^6.8.0" babel-runtime "^6.22.0" babel-plugin-transform-flow-strip-types@^6.22.0: version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" dependencies: babel-plugin-syntax-flow "^6.18.0" babel-runtime "^6.22.0" babel-plugin-transform-function-bind@^6.22.0: version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" dependencies: babel-plugin-syntax-function-bind "^6.8.0" babel-runtime "^6.22.0" babel-plugin-transform-object-rest-spread@^6.22.0: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.26.0" babel-plugin-transform-react-display-name@^6.23.0: version "6.25.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" dependencies: babel-runtime "^6.22.0" babel-plugin-transform-react-jsx-self@^6.22.0: version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" dependencies: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" babel-plugin-transform-react-jsx-source@^6.22.0: version "6.22.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" dependencies: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" babel-plugin-transform-react-jsx@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" dependencies: babel-helper-builder-react-jsx "^6.24.1" babel-plugin-syntax-jsx "^6.8.0" @@ -868,20 +868,20 @@ babel-plugin-transform-react-jsx@^6.24.1: babel-plugin-transform-regenerator@^6.22.0: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" dependencies: regenerator-transform "^0.10.0" babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" babel-polyfill@^6.26.0: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" + resolved "https://registry.yarnpkg.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz#379937abc67d7895970adc621f284cd966cf2153" dependencies: babel-runtime "^6.26.0" core-js "^2.5.0" @@ -889,7 +889,7 @@ babel-polyfill@^6.26.0: babel-preset-env@^1.6.0: version "1.6.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" + resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-syntax-trailing-function-commas "^6.22.0" @@ -924,13 +924,13 @@ babel-preset-env@^1.6.0: babel-preset-flow@^6.23.0: version "6.23.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" babel-preset-react@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" dependencies: babel-plugin-syntax-jsx "^6.3.13" babel-plugin-transform-react-display-name "^6.23.0" @@ -941,7 +941,7 @@ babel-preset-react@^6.24.1: babel-preset-stage-0@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a" + resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a" dependencies: babel-plugin-transform-do-expressions "^6.22.0" babel-plugin-transform-function-bind "^6.22.0" @@ -949,7 +949,7 @@ babel-preset-stage-0@^6.24.1: babel-preset-stage-1@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" + resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" dependencies: babel-plugin-transform-class-constructor-call "^6.24.1" babel-plugin-transform-export-extensions "^6.22.0" @@ -957,7 +957,7 @@ babel-preset-stage-1@^6.24.1: babel-preset-stage-2@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" dependencies: babel-plugin-syntax-dynamic-import "^6.18.0" babel-plugin-transform-class-properties "^6.24.1" @@ -966,7 +966,7 @@ babel-preset-stage-2@^6.24.1: babel-preset-stage-3@^6.24.1: version "6.24.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" dependencies: babel-plugin-syntax-trailing-function-commas "^6.22.0" babel-plugin-transform-async-generator-functions "^6.24.1" @@ -976,7 +976,7 @@ babel-preset-stage-3@^6.24.1: babel-register@^6.26.0: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" dependencies: babel-core "^6.26.0" babel-runtime "^6.26.0" @@ -986,22 +986,16 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^5.0.0: - version "5.8.38" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-runtime/-/babel-runtime-5.8.38.tgz#1c0b02eb63312f5f087ff20450827b425c9d4c19" - dependencies: - core-js "^1.0.0" - babel-runtime@^6.18.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.5.0: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" dependencies: babel-runtime "^6.26.0" babel-traverse "^6.26.0" @@ -1011,7 +1005,7 @@ babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.5.0: babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" dependencies: babel-code-frame "^6.26.0" babel-messages "^6.23.0" @@ -1025,7 +1019,7 @@ babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0: babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: babel-runtime "^6.26.0" esutils "^2.0.2" @@ -1034,78 +1028,78 @@ babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26 babylon@^6.17.0, babylon@^6.18.0: version "6.18.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" balanced-match@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" base62@^1.1.0: version "1.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/base62/-/base62-1.2.0.tgz#31e7e560dc846c9f44c1a531df6514da35474157" + resolved "https://registry.yarnpkg.com/base62/-/base62-1.2.0.tgz#31e7e560dc846c9f44c1a531df6514da35474157" base64-js@^1.0.2: version "1.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.1.tgz#a91947da1f4a516ea38e5b4ec0ec3773675e0886" bcrypt-pbkdf@^1.0.0: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" dependencies: tweetnacl "^0.14.3" big.js@^3.1.3: version "3.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" binary-extensions@^1.0.0: version "1.10.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" block-stream@*: version "0.0.9" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" dependencies: inherits "~2.0.0" bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" boom@0.4.x: version "0.4.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" + resolved "https://registry.yarnpkg.com/boom/-/boom-0.4.2.tgz#7a636e9ded4efcefb19cef4947a3c67dfaee911b" dependencies: hoek "0.9.x" boom@2.x.x: version "2.10.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" dependencies: hoek "2.x.x" boom@4.x.x: version "4.3.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" dependencies: hoek "4.x.x" boom@5.x.x: version "5.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" dependencies: hoek "4.x.x" brace-expansion@^1.0.0, brace-expansion@^1.1.7: version "1.1.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" dependencies: balanced-match "^1.0.0" concat-map "0.0.1" braces@^1.8.2: version "1.8.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" dependencies: expand-range "^1.8.1" preserve "^0.2.0" @@ -1113,19 +1107,19 @@ braces@^1.8.2: brorand@^1.0.1: version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" "browser-request@>= 0.3.1 < 0.4.0": version "0.3.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browser-request/-/browser-request-0.3.3.tgz#9ece5b5aca89a29932242e18bf933def9876cc17" + resolved "https://registry.yarnpkg.com/browser-request/-/browser-request-0.3.3.tgz#9ece5b5aca89a29932242e18bf933def9876cc17" browser-stdout@1.3.0: version "1.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" dependencies: buffer-xor "^1.0.3" cipher-base "^1.0.0" @@ -1136,7 +1130,7 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: browserify-cipher@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" @@ -1144,7 +1138,7 @@ browserify-cipher@^1.0.0: browserify-des@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" dependencies: cipher-base "^1.0.1" des.js "^1.0.0" @@ -1152,14 +1146,14 @@ browserify-des@^1.0.0: browserify-rsa@^4.0.0: version "4.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" dependencies: bn.js "^4.1.0" randombytes "^2.0.1" browserify-sign@^4.0.0: version "4.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" dependencies: bn.js "^4.1.1" browserify-rsa "^4.0.0" @@ -1171,24 +1165,24 @@ browserify-sign@^4.0.0: browserify-zlib@^0.1.4: version "0.1.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" dependencies: pako "~0.2.0" browserslist@^2.1.2: version "2.8.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/browserslist/-/browserslist-2.8.0.tgz#27d64028130a2e8585ca96f7c3b7730eff4de493" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.8.0.tgz#27d64028130a2e8585ca96f7c3b7730eff4de493" dependencies: caniuse-lite "^1.0.30000758" electron-to-chromium "^1.3.27" buffer-xor@^1.0.3: version "1.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" buffer@^4.3.0: version "4.9.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -1196,55 +1190,55 @@ buffer@^4.3.0: builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" builtin-status-codes@^3.0.0: version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" caller-path@^0.1.0: version "0.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" dependencies: callsites "^0.2.0" callsites@^0.2.0: version "0.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" camelcase@^1.0.2: version "1.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" camelcase@^4.1.0: version "4.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" caniuse-lite@^1.0.30000758: version "1.0.30000760" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/caniuse-lite/-/caniuse-lite-1.0.30000760.tgz#ec720395742f1c7ec8947fd6dd2604e77a8f98ff" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000760.tgz#ec720395742f1c7ec8947fd6dd2604e77a8f98ff" caseless@~0.12.0: version "0.12.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" center-align@^0.1.1: version "0.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" dependencies: align-text "^0.1.3" lazy-cache "^1.0.3" chai@^2.3.0: version "2.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/chai/-/chai-2.3.0.tgz#8a2f6a34748da801090fd73287b2aa739a4e909a" + resolved "https://registry.yarnpkg.com/chai/-/chai-2.3.0.tgz#8a2f6a34748da801090fd73287b2aa739a4e909a" dependencies: assertion-error "1.0.0" deep-eql "0.1.3" chalk@^1.1.3: version "1.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -1254,7 +1248,7 @@ chalk@^1.1.3: chalk@^2.0.0, chalk@^2.1.0: version "2.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" dependencies: ansi-styles "^3.1.0" escape-string-regexp "^1.0.5" @@ -1262,7 +1256,7 @@ chalk@^2.0.0, chalk@^2.1.0: chokidar@^1.6.1, chokidar@^1.7.0: version "1.7.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" dependencies: anymatch "^1.3.0" async-each "^1.0.0" @@ -1277,32 +1271,32 @@ chokidar@^1.6.1, chokidar@^1.7.0: cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" circular-json@^0.3.1: version "0.3.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" classnames@^2.1.1: version "2.2.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" cli-cursor@^2.1.0: version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" dependencies: restore-cursor "^2.0.0" cli-width@^2.0.0: version "2.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" cliui@^2.1.0: version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" dependencies: center-align "^0.1.1" right-align "^0.1.1" @@ -1310,7 +1304,7 @@ cliui@^2.1.0: cliui@^3.2.0: version "3.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -1318,45 +1312,45 @@ cliui@^3.2.0: co@^4.6.0: version "4.6.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" code-point-at@^1.0.0: version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" color-convert@^1.9.0: version "1.9.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" dependencies: color-name "^1.1.1" color-name@^1.1.1: version "1.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" dependencies: delayed-stream "~1.0.0" combined-stream@~0.0.4: version "0.0.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-0.0.7.tgz#0137e657baa5a7541c57ac37ac5fc07d73b4dc1f" dependencies: delayed-stream "0.0.5" commander@2.11.0, commander@^2.11.0, commander@^2.5.0: version "2.11.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563" commondir@^1.0.1: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" commoner@^0.10.1: version "0.10.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" + resolved "https://registry.yarnpkg.com/commoner/-/commoner-0.10.8.tgz#34fc3672cd24393e8bb47e70caa0293811f4f2c5" dependencies: commander "^2.5.0" detective "^4.3.1" @@ -1370,11 +1364,11 @@ commoner@^0.10.1: concat-map@0.0.1: version "0.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" concat-stream@^1.6.0: version "1.6.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" dependencies: inherits "^2.0.3" readable-stream "^2.2.2" @@ -1382,41 +1376,41 @@ concat-stream@^1.6.0: console-browserify@^1.1.0: version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" dependencies: date-now "^0.1.4" console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" constants-browserify@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" contains-path@^0.1.0: version "0.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" convert-source-map@^1.5.0: version "1.5.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.0.tgz#9acd70851c6d5dfdd93d9282e5edf94a03ff46b5" core-js@^1.0.0: version "1.2.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" core-js@^2.4.0, core-js@^2.5.0: version "2.5.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" coveralls@2.11.4: version "2.11.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/coveralls/-/coveralls-2.11.4.tgz#b42f4e156f6ba9419d27434a4289094f219267f7" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.11.4.tgz#b42f4e156f6ba9419d27434a4289094f219267f7" dependencies: js-yaml "3.0.1" lcov-parse "0.0.6" @@ -1425,14 +1419,14 @@ coveralls@2.11.4: create-ecdh@^4.0.0: version "4.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" dependencies: bn.js "^4.1.0" elliptic "^6.0.0" create-hash@^1.1.0, create-hash@^1.1.2: version "1.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" dependencies: cipher-base "^1.0.1" inherits "^2.0.1" @@ -1441,7 +1435,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: version "1.1.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" @@ -1452,7 +1446,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: create-react-class@^15.6.0: version "15.6.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a" dependencies: fbjs "^0.8.9" loose-envify "^1.3.1" @@ -1460,7 +1454,7 @@ create-react-class@^15.6.0: cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" @@ -1468,25 +1462,25 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0: cryptiles@0.2.x: version "0.2.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-0.2.2.tgz#ed91ff1f17ad13d3748288594f8a48a0d26f325c" dependencies: boom "0.4.x" cryptiles@2.x.x: version "2.0.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" dependencies: boom "2.x.x" cryptiles@3.x.x: version "3.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" dependencies: boom "5.x.x" crypto-browserify@^3.11.0: version "3.12.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -1502,82 +1496,82 @@ crypto-browserify@^3.11.0: cssom@0.3.x, "cssom@>= 0.3.0 < 0.4.0": version "0.3.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" "cssstyle@>= 0.2.29 < 0.3.0": version "0.2.37" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.2.37.tgz#541097234cb2513c83ceed3acddc27ff27987d54" dependencies: cssom "0.3.x" ctype@0.5.3: version "0.5.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" + resolved "https://registry.yarnpkg.com/ctype/-/ctype-0.5.3.tgz#82c18c2461f74114ef16c135224ad0b9144ca12f" d@1: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" dependencies: es5-ext "^0.10.9" damerau-levenshtein@^1.0.0: version "1.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" + resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz#03191c432cb6eea168bb77f3a55ffdccb8978514" dashdash@^1.12.0: version "1.14.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" dependencies: assert-plus "^1.0.0" date-now@^0.1.4: version "0.1.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" debug@3.1.0, debug@^3.0.1: version "3.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" debug@^2.2.0, debug@^2.6.8: version "2.6.9" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" dependencies: ms "2.0.0" decamelize@^1.0.0, decamelize@^1.1.1: version "1.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" deep-eql@0.1.3: version "0.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-0.1.3.tgz#ef558acab8de25206cd713906d74e56930eb69f2" dependencies: type-detect "0.1.1" deep-extend@~0.4.0: version "0.4.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" deep-is@~0.1.2, deep-is@~0.1.3: version "0.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" define-properties@^1.1.2: version "1.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" dependencies: foreach "^2.0.5" object-keys "^1.0.8" defined@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" del@^2.0.2: version "2.2.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" dependencies: globby "^5.0.0" is-path-cwd "^1.0.0" @@ -1589,47 +1583,47 @@ del@^2.0.2: delayed-stream@0.0.5: version "0.0.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-0.0.5.tgz#d4b1f43a93e8296dfe02694f4680bc37a313c73f" delayed-stream@~1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" delegates@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" des.js@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" detect-indent@^4.0.0: version "4.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" dependencies: repeating "^2.0.0" detect-libc@^1.0.2: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/detect-libc/-/detect-libc-1.0.2.tgz#71ad5d204bf17a6a6ca8f450c61454066ef461e1" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.2.tgz#71ad5d204bf17a6a6ca8f450c61454066ef461e1" detective@^4.3.1: version "4.5.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1" + resolved "https://registry.yarnpkg.com/detective/-/detective-4.5.0.tgz#6e5a8c6b26e6c7a254b1c6b6d7490d98ec91edd1" dependencies: acorn "^4.0.3" defined "^1.0.0" diff@3.3.1: version "3.3.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.3.1.tgz#aa8567a6eed03c531fc89d3f711cd0e5259dec75" diffie-hellman@^5.0.0: version "5.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" @@ -1637,63 +1631,63 @@ diffie-hellman@^5.0.0: doctrine@1.5.0: version "1.5.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" dependencies: esutils "^2.0.2" isarray "^1.0.0" doctrine@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" dependencies: esutils "^2.0.2" isarray "^1.0.0" dom-serializer@0: version "0.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" dependencies: domelementtype "~1.1.1" entities "~1.1.1" domain-browser@^1.1.1: version "1.1.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" domelementtype@1, domelementtype@^1.3.0: version "1.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" domelementtype@~1.1.1: version "1.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" domhandler@^2.3.0: version "2.4.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" dependencies: domelementtype "1" domutils@^1.5.1: version "1.6.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.6.2.tgz#1958cc0b4c9426e9ed367fb1c8e854891b0fa3ff" dependencies: dom-serializer "0" domelementtype "1" ecc-jsbn@~0.1.1: version "0.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" dependencies: jsbn "~0.1.0" electron-to-chromium@^1.3.27: version "1.3.27" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.27.tgz#78ecb8a399066187bb374eede35d9c70565a803d" elliptic@^6.0.0: version "6.4.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -1705,21 +1699,21 @@ elliptic@^6.0.0: emoji-regex@^6.1.0: version "6.5.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.5.1.tgz#9baea929b155565c11ea41c6626eaa65cef992c2" emojis-list@^2.0.0: version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" encoding@^0.1.11: version "0.1.12" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" dependencies: iconv-lite "~0.4.13" enhanced-resolve@^3.4.0: version "3.4.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" dependencies: graceful-fs "^4.1.2" memory-fs "^0.4.0" @@ -1728,30 +1722,30 @@ enhanced-resolve@^3.4.0: entities@^1.1.1, entities@~1.1.1: version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" envify@^3.0.0: version "3.4.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/envify/-/envify-3.4.1.tgz#d7122329e8df1688ba771b12501917c9ce5cbce8" + resolved "https://registry.yarnpkg.com/envify/-/envify-3.4.1.tgz#d7122329e8df1688ba771b12501917c9ce5cbce8" dependencies: jstransform "^11.0.3" through "~2.3.4" errno@^0.1.3: version "0.1.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" + resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" dependencies: prr "~0.0.0" error-ex@^1.2.0: version "1.3.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" dependencies: is-arrayish "^0.2.1" es-abstract@^1.7.0: version "1.9.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227" dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -1761,11 +1755,11 @@ es-abstract@^1.7.0: es-symbol@1.1.2: version "1.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es-symbol/-/es-symbol-1.1.2.tgz#dc346fbbf5ed1c52ad69b4ba5cb26008ae218ff5" + resolved "https://registry.yarnpkg.com/es-symbol/-/es-symbol-1.1.2.tgz#dc346fbbf5ed1c52ad69b4ba5cb26008ae218ff5" es-to-primitive@^1.1.1: version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" dependencies: is-callable "^1.1.1" is-date-object "^1.0.1" @@ -1773,14 +1767,14 @@ es-to-primitive@^1.1.1: es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: version "0.10.35" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es5-ext/-/es5-ext-0.10.35.tgz#18ee858ce6a3c45c7d79e91c15fcca9ec568494f" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.35.tgz#18ee858ce6a3c45c7d79e91c15fcca9ec568494f" dependencies: es6-iterator "~2.0.1" es6-symbol "~3.1.1" es6-iterator@^2.0.1, es6-iterator@~2.0.1: version "2.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" dependencies: d "1" es5-ext "^0.10.35" @@ -1788,7 +1782,7 @@ es6-iterator@^2.0.1, es6-iterator@~2.0.1: es6-map@^0.1.3: version "0.1.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" dependencies: d "1" es5-ext "~0.10.14" @@ -1799,11 +1793,11 @@ es6-map@^0.1.3: es6-promise@^2.0.1, es6-promise@^2.1.1: version "2.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es6-promise/-/es6-promise-2.3.0.tgz#96edb9f2fdb01995822b263dd8aadab6748181bc" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-2.3.0.tgz#96edb9f2fdb01995822b263dd8aadab6748181bc" es6-set@~0.1.5: version "0.1.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" dependencies: d "1" es5-ext "~0.10.14" @@ -1813,14 +1807,14 @@ es6-set@~0.1.5: es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: version "3.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" dependencies: d "1" es5-ext "~0.10.14" es6-weak-map@^2.0.1: version "2.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" dependencies: d "1" es5-ext "^0.10.14" @@ -1829,15 +1823,15 @@ es6-weak-map@^2.0.1: escape-html@1.0.2: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.2.tgz#d77d32fa98e38c2f41ae85e9278e0e0e6ba1022c" escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" escodegen@1.6.x: version "1.6.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escodegen/-/escodegen-1.6.1.tgz#367de17d8510540d12bc6dcb8b3f918391265815" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.6.1.tgz#367de17d8510540d12bc6dcb8b3f918391265815" dependencies: esprima "^1.2.2" estraverse "^1.9.1" @@ -1848,7 +1842,7 @@ escodegen@1.6.x: escodegen@^1.6.1: version "1.9.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" dependencies: esprima "^3.1.3" estraverse "^4.2.0" @@ -1859,7 +1853,7 @@ escodegen@^1.6.1: escope@^3.6.0: version "3.6.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" dependencies: es6-map "^0.1.3" es6-weak-map "^2.0.1" @@ -1868,26 +1862,26 @@ escope@^3.6.0: eslint-config-airbnb-base@^11.3.0: version "11.3.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz#8703b11abe3c88ac7ec2b745b7fdf52e00ae680a" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-11.3.2.tgz#8703b11abe3c88ac7ec2b745b7fdf52e00ae680a" dependencies: eslint-restricted-globals "^0.1.1" eslint-config-airbnb@^15.1.0: version "15.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz#fd432965a906e30139001ba830f58f73aeddae8e" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-15.1.0.tgz#fd432965a906e30139001ba830f58f73aeddae8e" dependencies: eslint-config-airbnb-base "^11.3.0" eslint-import-resolver-node@^0.3.1: version "0.3.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.1.tgz#4422574cde66a9a7b099938ee4d508a199e0e3cc" dependencies: debug "^2.6.8" resolve "^1.2.0" eslint-loader@^1.9.0: version "1.9.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-loader/-/eslint-loader-1.9.0.tgz#7e1be9feddca328d3dcfaef1ad49d5beffe83a13" + resolved "https://registry.yarnpkg.com/eslint-loader/-/eslint-loader-1.9.0.tgz#7e1be9feddca328d3dcfaef1ad49d5beffe83a13" dependencies: loader-fs-cache "^1.0.0" loader-utils "^1.0.2" @@ -1897,18 +1891,18 @@ eslint-loader@^1.9.0: eslint-module-utils@^2.1.1: version "2.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" dependencies: debug "^2.6.8" pkg-dir "^1.0.0" eslint-plugin-babel@^4.1.2: version "4.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz#79202a0e35757dd92780919b2336f1fa2fe53c1e" + resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-4.1.2.tgz#79202a0e35757dd92780919b2336f1fa2fe53c1e" eslint-plugin-import@^2.7.0: version "2.8.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.8.0.tgz#fa1b6ef31fcb3c501c09859c1b86f1fc5b986894" dependencies: builtin-modules "^1.1.1" contains-path "^0.1.0" @@ -1923,7 +1917,7 @@ eslint-plugin-import@^2.7.0: eslint-plugin-jsx-a11y@^5.0.1: version "5.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1" + resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-5.1.1.tgz#5c96bb5186ca14e94db1095ff59b3e2bd94069b1" dependencies: aria-query "^0.7.0" array-includes "^3.0.3" @@ -1935,7 +1929,7 @@ eslint-plugin-jsx-a11y@^5.0.1: eslint-plugin-react@^7.2.0: version "7.4.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz#300a95861b9729c087d362dd64abcc351a74364a" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.4.0.tgz#300a95861b9729c087d362dd64abcc351a74364a" dependencies: doctrine "^2.0.0" has "^1.0.1" @@ -1944,20 +1938,20 @@ eslint-plugin-react@^7.2.0: eslint-restricted-globals@^0.1.1: version "0.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" + resolved "https://registry.yarnpkg.com/eslint-restricted-globals/-/eslint-restricted-globals-0.1.1.tgz#35f0d5cbc64c2e3ed62e93b4b1a7af05ba7ed4d7" eslint-scope@^3.7.1: version "3.7.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" eslint@^4.4.1: - version "4.10.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eslint/-/eslint-4.10.0.tgz#f25d0d7955c81968c2309aa5c9a229e045176bb7" + version "4.11.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.11.0.tgz#39a8c82bc0a3783adf5a39fa27fdd9d36fac9a34" dependencies: - ajv "^5.2.0" + ajv "^5.3.0" babel-code-frame "^6.22.0" chalk "^2.1.0" concat-stream "^1.6.0" @@ -1965,7 +1959,7 @@ eslint@^4.4.1: debug "^3.0.1" doctrine "^2.0.0" eslint-scope "^3.7.1" - espree "^3.5.1" + espree "^3.5.2" esquery "^1.0.0" estraverse "^4.2.0" esutils "^2.0.2" @@ -1978,7 +1972,7 @@ eslint@^4.4.1: inquirer "^3.0.6" is-resolvable "^1.0.0" js-yaml "^3.9.1" - json-stable-stringify "^1.0.1" + json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" lodash "^4.17.4" minimatch "^3.0.2" @@ -1995,91 +1989,91 @@ eslint@^4.4.1: table "^4.0.1" text-table "~0.2.0" -espree@^3.5.1: - version "3.5.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/espree/-/espree-3.5.1.tgz#0c988b8ab46db53100a1954ae4ba995ddd27d87e" +espree@^3.5.2: + version "3.5.2" + resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.2.tgz#756ada8b979e9dcfcdb30aad8d1a9304a905e1ca" dependencies: - acorn "^5.1.1" + acorn "^5.2.1" acorn-jsx "^3.0.0" esprima-fb@^15001.1.0-dev-harmony-fb: version "15001.1.0-dev-harmony-fb" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" + resolved "https://registry.yarnpkg.com/esprima-fb/-/esprima-fb-15001.1.0-dev-harmony-fb.tgz#30a947303c6b8d5e955bee2b99b1d233206a6901" esprima@2.5.x: version "2.5.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-2.5.0.tgz#f387a46fd344c1b1a39baf8c20bfb43b6d0058cc" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.5.0.tgz#f387a46fd344c1b1a39baf8c20bfb43b6d0058cc" esprima@^1.2.2: version "1.2.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.2.5.tgz#0993502feaf668138325756f30f9a51feeec11e9" esprima@^3.1.3, esprima@~3.1.0: version "3.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" esprima@^4.0.0: version "4.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" "esprima@~ 1.0.2": version "1.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-1.0.4.tgz#9f557e08fc3b4d26ece9dd34f8fbf476b62585ad" esquery@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" dependencies: estraverse "^4.0.0" esrecurse@^4.1.0: version "4.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" dependencies: estraverse "^4.1.0" object-assign "^4.0.1" estraverse@^1.9.1: version "1.9.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" esutils@^1.1.6: version "1.1.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-1.1.6.tgz#c01ccaa9ae4b897c6d0c3e210ae52f3c7a844375" esutils@^2.0.2: version "2.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" event-emitter@~0.3.5: version "0.3.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" dependencies: d "1" es5-ext "~0.10.14" eventemitter3@0.1.6: version "0.1.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/eventemitter3/-/eventemitter3-0.1.6.tgz#8c7ac44b87baab55cd50c828dc38778eac052ea5" + resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-0.1.6.tgz#8c7ac44b87baab55cd50c828dc38778eac052ea5" events@^1.0.0: version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" execa@^0.7.0: version "0.7.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -2091,23 +2085,23 @@ execa@^0.7.0: expand-brackets@^0.1.4: version "0.1.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" dependencies: is-posix-bracket "^0.1.0" expand-range@^1.8.1: version "1.8.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" dependencies: fill-range "^2.1.0" extend@~3.0.0, extend@~3.0.1: version "3.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" external-editor@^2.0.4: version "2.0.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/external-editor/-/external-editor-2.0.5.tgz#52c249a3981b9ba187c7cacf5beb50bf1d91a6bc" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.0.5.tgz#52c249a3981b9ba187c7cacf5beb50bf1d91a6bc" dependencies: iconv-lite "^0.4.17" jschardet "^1.4.2" @@ -2115,39 +2109,39 @@ external-editor@^2.0.4: extglob@^0.3.1: version "0.3.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" dependencies: is-extglob "^1.0.0" extsprintf@1.3.0, extsprintf@^1.2.0: version "1.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" fast-deep-equal@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" fast-json-stable-stringify@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" fast-levenshtein@~1.0.0: version "1.0.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz#0178dcdee023b92905193af0959e8a7639cfdcb9" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-1.0.7.tgz#0178dcdee023b92905193af0959e8a7639cfdcb9" fast-levenshtein@~2.0.4: version "2.0.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" fbemitter@^2.0.0: version "2.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fbemitter/-/fbemitter-2.1.1.tgz#523e14fdaf5248805bb02f62efc33be703f51865" + resolved "https://registry.yarnpkg.com/fbemitter/-/fbemitter-2.1.1.tgz#523e14fdaf5248805bb02f62efc33be703f51865" dependencies: fbjs "^0.8.4" fbjs@^0.8.0, fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.9: version "0.8.16" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -2159,31 +2153,31 @@ fbjs@^0.8.0, fbjs@^0.8.16, fbjs@^0.8.4, fbjs@^0.8.9: figures@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" dependencies: flat-cache "^1.2.1" object-assign "^4.0.1" filename-regex@^2.0.0: version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" fileset@0.2.x: version "0.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fileset/-/fileset-0.2.1.tgz#588ef8973c6623b2a76df465105696b96aac8067" + resolved "https://registry.yarnpkg.com/fileset/-/fileset-0.2.1.tgz#588ef8973c6623b2a76df465105696b96aac8067" dependencies: glob "5.x" minimatch "2.x" fill-range@^2.1.0: version "2.2.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" dependencies: is-number "^2.1.0" isobject "^2.0.0" @@ -2193,7 +2187,7 @@ fill-range@^2.1.0: find-cache-dir@^0.1.1: version "0.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" dependencies: commondir "^1.0.1" mkdirp "^0.5.1" @@ -2201,7 +2195,7 @@ find-cache-dir@^0.1.1: find-cache-dir@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" dependencies: commondir "^1.0.1" make-dir "^1.0.0" @@ -2209,20 +2203,20 @@ find-cache-dir@^1.0.0: find-up@^1.0.0: version "1.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" dependencies: locate-path "^2.0.0" flat-cache@^1.2.1: version "1.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" dependencies: circular-json "^0.3.1" del "^2.0.2" @@ -2231,40 +2225,40 @@ flat-cache@^1.2.1: flux@2.0.3: version "2.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/flux/-/flux-2.0.3.tgz#787e1aedffb34a322a60b49c57a2d23856a6de27" + resolved "https://registry.yarnpkg.com/flux/-/flux-2.0.3.tgz#787e1aedffb34a322a60b49c57a2d23856a6de27" flux@^3.1.3: version "3.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/flux/-/flux-3.1.3.tgz#d23bed515a79a22d933ab53ab4ada19d05b2f08a" + resolved "https://registry.yarnpkg.com/flux/-/flux-3.1.3.tgz#d23bed515a79a22d933ab53ab4ada19d05b2f08a" dependencies: fbemitter "^2.0.0" fbjs "^0.8.0" for-in@^1.0.1: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" for-own@^0.1.4: version "0.1.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" dependencies: for-in "^1.0.1" foreach@^2.0.5: version "2.0.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" forever-agent@~0.5.0: version "0.5.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.5.2.tgz#6d0e09c4921f94a27f63d3b49c5feff1ea4c5130" forever-agent@~0.6.1: version "0.6.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" form-data@~0.1.0: version "0.1.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-0.1.4.tgz#91abd788aba9702b1aabfa8bc01031a2ac9e3b12" dependencies: async "~0.9.0" combined-stream "~0.0.4" @@ -2272,7 +2266,7 @@ form-data@~0.1.0: form-data@~2.1.1: version "2.1.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" @@ -2280,7 +2274,7 @@ form-data@~2.1.1: form-data@~2.3.1: version "2.3.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" @@ -2288,28 +2282,28 @@ form-data@~2.3.1: formatio@1.1.1: version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9" + resolved "https://registry.yarnpkg.com/formatio/-/formatio-1.1.1.tgz#5ed3ccd636551097383465d996199100e86161e9" dependencies: samsam "~1.1" fs-readdir-recursive@^1.0.0: - version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fs-readdir-recursive/-/fs-readdir-recursive-1.0.0.tgz#8cd1745c8b4f8a29c8caec392476921ba195f560" + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" fs.realpath@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" fsevents@^1.0.0: version "1.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" dependencies: nan "^2.3.0" node-pre-gyp "^0.6.36" fstream-ignore@^1.0.5: version "1.0.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" dependencies: fstream "^1.0.0" inherits "2" @@ -2317,7 +2311,7 @@ fstream-ignore@^1.0.5: fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: version "1.0.11" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" @@ -2326,15 +2320,15 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: function-bind@^1.0.2, function-bind@^1.1.1: version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" functional-red-black-tree@^1.0.1: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" gauge@~2.7.3: version "2.7.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -2347,40 +2341,40 @@ gauge@~2.7.3: get-caller-file@^1.0.1: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" get-stream@^3.0.0: version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" getpass@^0.1.1: version "0.1.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" dependencies: assert-plus "^1.0.0" ghooks@^0.3.2: version "0.3.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ghooks/-/ghooks-0.3.2.tgz#a1fa85dede71eecc19faca9ee163c3cdfc1b94d0" + resolved "https://registry.yarnpkg.com/ghooks/-/ghooks-0.3.2.tgz#a1fa85dede71eecc19faca9ee163c3cdfc1b94d0" dependencies: spawn-command "^0.0.2" glob-base@^0.3.0: version "0.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" glob-parent@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" dependencies: is-glob "^2.0.0" glob@5.x, glob@^5.0.15: version "5.0.15" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" dependencies: inflight "^1.0.4" inherits "2" @@ -2390,7 +2384,7 @@ glob@5.x, glob@^5.0.15: glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: version "7.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -2401,11 +2395,11 @@ glob@7.1.2, glob@^7.0.3, glob@^7.0.5, glob@^7.1.2: globals@^9.17.0, globals@^9.18.0: version "9.18.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" globby@^5.0.0: version "5.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" dependencies: array-union "^1.0.1" arrify "^1.0.0" @@ -2416,15 +2410,15 @@ globby@^5.0.0: graceful-fs@^4.1.2, graceful-fs@^4.1.4: version "4.1.11" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" growl@1.10.3: version "1.10.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.3.tgz#1926ba90cf3edfe2adb4927f5880bc22c66c790f" handlebars@3.0.0: version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/handlebars/-/handlebars-3.0.0.tgz#7f4e537f4dd6992869d66c01b7505eba3561a5d5" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-3.0.0.tgz#7f4e537f4dd6992869d66c01b7505eba3561a5d5" dependencies: optimist "^0.6.1" source-map "^0.1.40" @@ -2433,69 +2427,69 @@ handlebars@3.0.0: har-schema@^1.0.5: version "1.0.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" har-schema@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" har-validator@~4.2.1: version "4.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" dependencies: ajv "^4.9.1" har-schema "^1.0.5" har-validator@~5.0.3: version "5.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" dependencies: ajv "^5.1.0" har-schema "^2.0.0" has-ansi@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" dependencies: ansi-regex "^2.0.0" has-flag@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" has-unicode@^2.0.0: version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" has@^1.0.1: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" dependencies: function-bind "^1.0.2" hash-base@^2.0.0: version "2.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" dependencies: inherits "^2.0.1" hash-base@^3.0.0: version "3.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" dependencies: inherits "^2.0.3" minimalistic-assert "^1.0.0" hawk@1.1.1: version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hawk/-/hawk-1.1.1.tgz#87cd491f9b46e4e2aeaca335416766885d2d1ed9" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-1.1.1.tgz#87cd491f9b46e4e2aeaca335416766885d2d1ed9" dependencies: boom "0.4.x" cryptiles "0.2.x" @@ -2504,7 +2498,7 @@ hawk@1.1.1: hawk@3.1.3, hawk@~3.1.3: version "3.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" dependencies: boom "2.x.x" cryptiles "2.x.x" @@ -2513,7 +2507,7 @@ hawk@3.1.3, hawk@~3.1.3: hawk@~6.0.2: version "6.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" dependencies: boom "4.x.x" cryptiles "3.x.x" @@ -2522,11 +2516,11 @@ hawk@~6.0.2: he@1.1.1: version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" hmac-drbg@^1.0.0: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -2534,30 +2528,30 @@ hmac-drbg@^1.0.0: hoek@0.9.x: version "0.9.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-0.9.1.tgz#3d322462badf07716ea7eb85baf88079cddce505" hoek@2.x.x: version "2.16.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" hoek@4.x.x: version "4.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" home-or-tmp@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.1" hosted-git-info@^2.1.4: version "2.5.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" "htmlparser2@>= 3.7.3 < 4.0.0": version "3.9.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" dependencies: domelementtype "^1.3.0" domhandler "^2.3.0" @@ -2568,7 +2562,7 @@ hosted-git-info@^2.1.4: http-signature@~0.10.0: version "0.10.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-0.10.1.tgz#4fbdac132559aa8323121e540779c0a012b27e66" dependencies: asn1 "0.1.11" assert-plus "^0.1.5" @@ -2576,7 +2570,7 @@ http-signature@~0.10.0: http-signature@~1.1.0: version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" dependencies: assert-plus "^0.2.0" jsprim "^1.2.2" @@ -2584,7 +2578,7 @@ http-signature@~1.1.0: http-signature@~1.2.0: version "1.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" @@ -2592,54 +2586,54 @@ http-signature@~1.2.0: https-browserify@0.0.1: version "0.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-0.0.1.tgz#3f91365cabe60b77ed0ebba24b454e3e09d95a82" iconv-lite@^0.4.17, iconv-lite@^0.4.5, iconv-lite@~0.4.13: version "0.4.19" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" ieee754@^1.1.4: version "1.1.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" ignore@^3.3.3: version "3.3.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" immutable@^3.7.2: version "3.8.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3" imurmurhash@^0.1.4: version "0.1.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" indexof@0.0.1: version "0.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" inflight@^1.0.4: version "1.0.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" dependencies: once "^1.3.0" wrappy "1" inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" inherits@2.0.1: version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" ini@~1.3.0: version "1.3.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" inquirer@^3.0.6: version "3.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" @@ -2658,184 +2652,184 @@ inquirer@^3.0.6: interpret@^1.0.0: version "1.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.4.tgz#820cdd588b868ffb191a809506d6c9c8f212b1b0" invariant@^2.2.2: version "2.2.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" + resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360" dependencies: loose-envify "^1.0.0" invert-kv@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" is-arrayish@^0.2.1: version "0.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" is-binary-path@^1.0.0: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" dependencies: binary-extensions "^1.0.0" is-buffer@^1.1.5: version "1.1.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" is-builtin-module@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" dependencies: builtin-modules "^1.0.0" is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" is-date-object@^1.0.1: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" is-dotfile@^1.0.0: version "1.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" is-equal-shallow@^0.1.3: version "0.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" dependencies: is-primitive "^2.0.0" is-extendable@^0.1.1: version "0.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" is-extglob@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" is-finite@^1.0.0: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" dependencies: is-extglob "^1.0.0" is-number@^2.1.0: version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: kind-of "^3.0.2" is-number@^3.0.0: version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" dependencies: kind-of "^3.0.2" is-path-cwd@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" is-path-in-cwd@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" dependencies: path-is-inside "^1.0.1" is-posix-bracket@^0.1.0: version "0.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" is-primitive@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" is-promise@^2.1.0: version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" is-regex@^1.0.4: version "1.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" dependencies: has "^1.0.1" is-resolvable@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" + resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" dependencies: tryit "^1.0.1" is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" is-symbol@^1.0.1: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" is-typedarray@~1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" isexe@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" iso@^4.1.0: version "4.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/iso/-/iso-4.2.0.tgz#528a6aad29cd4663f589e16cd1e148f38a7eecdb" + resolved "https://registry.yarnpkg.com/iso/-/iso-4.2.0.tgz#528a6aad29cd4663f589e16cd1e148f38a7eecdb" dependencies: escape-html "1.0.2" isobject@^2.0.0: version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" dependencies: isarray "1.0.0" isomorphic-fetch@^2.1.1: version "2.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" dependencies: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" isstream@~0.1.2: version "0.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" istanbul@0.3.19: version "0.3.19" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/istanbul/-/istanbul-0.3.19.tgz#b8e30aca58a4a4e08966d9530e706bcbba252ba2" + resolved "https://registry.yarnpkg.com/istanbul/-/istanbul-0.3.19.tgz#b8e30aca58a4a4e08966d9530e706bcbba252ba2" dependencies: abbrev "1.0.x" async "1.x" @@ -2854,33 +2848,33 @@ istanbul@0.3.19: js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" js-yaml@3.0.1: version "3.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/js-yaml/-/js-yaml-3.0.1.tgz#76405fea5bce30fc8f405d48c6dca7f0a32c6afe" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.0.1.tgz#76405fea5bce30fc8f405d48c6dca7f0a32c6afe" dependencies: argparse "~ 0.1.11" esprima "~ 1.0.2" js-yaml@3.x, js-yaml@^3.9.1: version "3.10.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" dependencies: argparse "^1.0.7" esprima "^4.0.0" jsbn@~0.1.0: version "0.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" jschardet@^1.4.2: version "1.6.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jschardet/-/jschardet-1.6.0.tgz#c7d1a71edcff2839db2f9ec30fc5d5ebd3c1a678" + resolved "https://registry.yarnpkg.com/jschardet/-/jschardet-1.6.0.tgz#c7d1a71edcff2839db2f9ec30fc5d5ebd3c1a678" jsdom@^6.3.0: version "6.5.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsdom/-/jsdom-6.5.1.tgz#b6064d6a7651081af41d576edc56bc51e00122c0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-6.5.1.tgz#b6064d6a7651081af41d576edc56bc51e00122c0" dependencies: acorn "^2.4.0" acorn-globals "^1.0.4" @@ -2901,45 +2895,49 @@ jsdom@^6.3.0: jsesc@^1.3.0: version "1.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" jsesc@~0.5.0: version "0.5.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" json-loader@^0.5.4: version "0.5.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" json-schema-traverse@^0.3.0: version "0.3.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" json-schema@0.2.3: version "0.2.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" json-stable-stringify@^1.0.1: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" dependencies: jsonify "~0.0.0" json-stringify-safe@~5.0.0, json-stringify-safe@~5.0.1: version "5.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" json5@^0.5.0, json5@^0.5.1: version "0.5.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" jsonify@~0.0.0: version "0.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" jsprim@^1.2.2: version "1.4.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" dependencies: assert-plus "1.0.0" extsprintf "1.3.0" @@ -2948,7 +2946,7 @@ jsprim@^1.2.2: jstransform@^11.0.3: version "11.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223" + resolved "https://registry.yarnpkg.com/jstransform/-/jstransform-11.0.3.tgz#09a78993e0ae4d4ef4487f6155a91f6190cb4223" dependencies: base62 "^1.1.0" commoner "^0.10.1" @@ -2958,57 +2956,57 @@ jstransform@^11.0.3: jsx-ast-utils@^1.4.0: version "1.4.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" jsx-ast-utils@^2.0.0: version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" dependencies: array-includes "^3.0.3" kind-of@^3.0.2: version "3.2.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" dependencies: is-buffer "^1.1.5" lazy-cache@^1.0.3: version "1.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" lcid@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" dependencies: invert-kv "^1.0.0" lcov-parse@0.0.6: version "0.0.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lcov-parse/-/lcov-parse-0.0.6.tgz#819e5da8bf0791f9d3f39eea5ed1868187f11175" + resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.6.tgz#819e5da8bf0791f9d3f39eea5ed1868187f11175" levn@^0.3.0, levn@~0.3.0: version "0.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" levn@~0.2.5: version "0.2.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/levn/-/levn-0.2.5.tgz#ba8d339d0ca4a610e3a3f145b9caf48807155054" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.2.5.tgz#ba8d339d0ca4a610e3a3f145b9caf48807155054" dependencies: prelude-ls "~1.1.0" type-check "~0.3.1" load-json-file@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -3017,18 +3015,18 @@ load-json-file@^2.0.0: loader-fs-cache@^1.0.0: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc" + resolved "https://registry.yarnpkg.com/loader-fs-cache/-/loader-fs-cache-1.0.1.tgz#56e0bf08bd9708b26a765b68509840c8dec9fdbc" dependencies: find-cache-dir "^0.1.1" mkdirp "0.5.1" loader-runner@^2.3.0: version "2.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" dependencies: big.js "^3.1.3" emojis-list "^2.0.0" @@ -3036,81 +3034,81 @@ loader-utils@^1.0.2, loader-utils@^1.1.0: locate-path@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" dependencies: p-locate "^2.0.0" path-exists "^3.0.0" lodash.cond@^4.3.0: version "4.5.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" + resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5" lodash@^4.14.0, lodash@^4.17.4, lodash@^4.3.0: version "4.17.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" log-driver@1.2.4: version "1.2.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/log-driver/-/log-driver-1.2.4.tgz#2d62d7faef45d8a71341961a04b0761eca99cfa3" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.4.tgz#2d62d7faef45d8a71341961a04b0761eca99cfa3" lolex@1.3.2: version "1.3.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-1.3.2.tgz#7c3da62ffcb30f0f5a80a2566ca24e45d8a01f31" longest@^1.0.1: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: version "1.3.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: js-tokens "^3.0.0" lru-cache@^4.0.1: version "4.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" dependencies: pseudomap "^1.0.2" yallist "^2.1.2" lunr@^0.5.9: version "0.5.12" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/lunr/-/lunr-0.5.12.tgz#a2f6b7d7801cbe2ccb1696da67f1f7788f89e0c8" + resolved "https://registry.yarnpkg.com/lunr/-/lunr-0.5.12.tgz#a2f6b7d7801cbe2ccb1696da67f1f7788f89e0c8" make-dir@^1.0.0: version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" dependencies: pify "^3.0.0" marked@^0.3.3: version "0.3.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" + resolved "https://registry.yarnpkg.com/marked/-/marked-0.3.6.tgz#b2c6c618fccece4ef86c4fc6cb8a7cbf5aeda8d7" md5.js@^1.3.4: version "1.3.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" dependencies: hash-base "^3.0.0" inherits "^2.0.1" mem@^1.1.0: version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" dependencies: mimic-fn "^1.0.0" memory-fs@^0.4.0, memory-fs@~0.4.1: version "0.4.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" dependencies: errno "^0.1.3" readable-stream "^2.0.1" micromatch@^2.1.5: version "2.3.11" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" dependencies: arr-diff "^2.0.0" array-unique "^0.2.1" @@ -3128,74 +3126,74 @@ micromatch@^2.1.5: miller-rabin@^4.0.0: version "4.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" dependencies: bn.js "^4.0.0" brorand "^1.0.1" mime-db@~1.30.0: version "1.30.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" mime-types@^2.1.12, mime-types@~2.1.17, mime-types@~2.1.7: version "2.1.17" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" dependencies: mime-db "~1.30.0" mime-types@~1.0.1: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mime-types/-/mime-types-1.0.2.tgz#995ae1392ab8affcbfcb2641dd054e943c0d5dce" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-1.0.2.tgz#995ae1392ab8affcbfcb2641dd054e943c0d5dce" mime@~1.2.11: version "1.2.11" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.11.tgz#58203eed86e3a5ef17aed2b7d9ebd47f0a60dd10" mimic-fn@^1.0.0: version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" minimalistic-assert@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" dependencies: brace-expansion "^1.1.7" minimatch@2.x: version "2.0.10" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-2.0.10.tgz#8d087c39c6b38c001b97fca7ce6d0e1e80afbac7" dependencies: brace-expansion "^1.0.0" minimist@0.0.8: version "0.0.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" minimist@^1.2.0: version "1.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" minimist@~0.0.1: version "0.0.10" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" mocha@^4.0.1: version "4.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mocha/-/mocha-4.0.1.tgz#0aee5a95cf69a4618820f5e51fa31717117daf1b" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-4.0.1.tgz#0aee5a95cf69a4618820f5e51fa31717117daf1b" dependencies: browser-stdout "1.3.0" commander "2.11.0" @@ -3210,30 +3208,30 @@ mocha@^4.0.1: ms@2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" mute-stream@0.0.7: version "0.0.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" nan@^2.3.0: version "2.7.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" natural-compare@^1.4.0: version "1.4.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" node-fetch@^1.0.1: version "1.7.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" dependencies: encoding "^0.1.11" is-stream "^1.0.1" node-libs-browser@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.0.0.tgz#a3a59ec97024985b46e958379646f96c4b616646" dependencies: assert "^1.1.1" browserify-zlib "^0.1.4" @@ -3261,7 +3259,7 @@ node-libs-browser@^2.0.0: node-pre-gyp@^0.6.36: version "0.6.39" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" dependencies: detect-libc "^1.0.2" hawk "3.1.3" @@ -3277,24 +3275,24 @@ node-pre-gyp@^0.6.36: node-uuid@~1.4.0: version "1.4.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" + resolved "https://registry.yarnpkg.com/node-uuid/-/node-uuid-1.4.8.tgz#b040eb0923968afabf8d32fb1f17f1167fdab907" nopt@3.x: version "3.0.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" dependencies: abbrev "1" nopt@^4.0.1: version "4.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" dependencies: abbrev "1" osenv "^0.1.4" normalize-package-data@^2.3.2: version "2.4.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" @@ -3303,19 +3301,19 @@ normalize-package-data@^2.3.2: normalize-path@^2.0.0, normalize-path@^2.0.1: version "2.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" dependencies: remove-trailing-separator "^1.0.1" npm-run-path@^2.0.0: version "2.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" dependencies: path-key "^2.0.0" npmlog@^4.0.2: version "4.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" @@ -3324,71 +3322,71 @@ npmlog@^4.0.2: number-is-nan@^1.0.0: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" "nwmatcher@>= 1.3.6 < 2.0.0": version "1.4.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" + resolved "https://registry.yarnpkg.com/nwmatcher/-/nwmatcher-1.4.3.tgz#64348e3b3d80f035b40ac11563d278f8b72db89c" oauth-sign@~0.3.0: version "0.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/oauth-sign/-/oauth-sign-0.3.0.tgz#cb540f93bb2b22a7d5941691a288d60e8ea9386e" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.3.0.tgz#cb540f93bb2b22a7d5941691a288d60e8ea9386e" oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" object-assign@^2.0.0: version "2.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-2.1.1.tgz#43c36e5d569ff8e4816c4efa8be02d26967c18aa" object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" object-hash@^1.1.4: version "1.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/object-hash/-/object-hash-1.2.0.tgz#e96af0e96981996a1d47f88ead8f74f1ebc4422b" + resolved "https://registry.yarnpkg.com/object-hash/-/object-hash-1.2.0.tgz#e96af0e96981996a1d47f88ead8f74f1ebc4422b" object-keys@^1.0.8: version "1.0.11" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" object.omit@^2.0.0: version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" dependencies: for-own "^0.1.4" is-extendable "^0.1.1" once@1.x, once@^1.3.0, once@^1.3.3: version "1.4.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" dependencies: wrappy "1" onetime@^2.0.0: version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" dependencies: mimic-fn "^1.0.0" optimist@^0.6.1: version "0.6.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" dependencies: minimist "~0.0.1" wordwrap "~0.0.2" optimist@~0.3.5: version "0.3.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.3.7.tgz#c90941ad59e4273328923074d2cf2e7cbc6ec0d9" dependencies: wordwrap "~0.0.2" optionator@^0.5.0: version "0.5.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/optionator/-/optionator-0.5.0.tgz#b75a8995a2d417df25b6e4e3862f50aa88651368" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.5.0.tgz#b75a8995a2d417df25b6e4e3862f50aa88651368" dependencies: deep-is "~0.1.2" fast-levenshtein "~1.0.0" @@ -3399,7 +3397,7 @@ optionator@^0.5.0: optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.4" @@ -3410,15 +3408,15 @@ optionator@^0.8.1, optionator@^0.8.2: os-browserify@^0.2.0: version "0.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.2.1.tgz#63fc4ccee5d2d7763d26bbf8601078e6c2e0044f" os-homedir@^1.0.0: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" os-locale@^2.0.0: version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" dependencies: execa "^0.7.0" lcid "^1.0.0" @@ -3426,18 +3424,18 @@ os-locale@^2.0.0: os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" osenv@^0.1.4: version "0.1.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" output-file-sync@^1.1.2: version "1.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" + resolved "https://registry.yarnpkg.com/output-file-sync/-/output-file-sync-1.1.2.tgz#d0a33eefe61a205facb90092e826598d5245ce76" dependencies: graceful-fs "^4.1.4" mkdirp "^0.5.1" @@ -3445,25 +3443,25 @@ output-file-sync@^1.1.2: p-finally@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" p-limit@^1.1.0: version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc" p-locate@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" dependencies: p-limit "^1.1.0" pako@~0.2.0: version "0.2.9" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" parse-asn1@^5.0.0: version "5.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" @@ -3473,7 +3471,7 @@ parse-asn1@^5.0.0: parse-glob@^3.0.4: version "3.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" @@ -3482,53 +3480,53 @@ parse-glob@^3.0.4: parse-json@^2.2.0: version "2.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" dependencies: error-ex "^1.2.0" parse5@^1.4.2: version "1.5.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-1.5.1.tgz#9b7f3b0de32be78dc2401b17573ccaf0f6f59d94" path-browserify@0.0.0: version "0.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" path-exists@^2.0.0: version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" path-key@^2.0.0: version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" path-parse@^1.0.5: version "1.0.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" path-type@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" dependencies: pify "^2.0.0" pbkdf2@^3.0.3: version "3.0.14" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -3538,79 +3536,79 @@ pbkdf2@^3.0.3: performance-now@^0.2.0: version "0.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" performance-now@^2.1.0: version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" pify@^2.0.0: version "2.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" pify@^3.0.0: version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" pinkie-promise@^2.0.0: version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" pkg-dir@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" dependencies: find-up "^1.0.0" pkg-dir@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" dependencies: find-up "^2.1.0" pluralize@^7.0.0: version "7.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" prelude-ls@~1.1.0, prelude-ls@~1.1.1, prelude-ls@~1.1.2: version "1.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" preserve@^0.2.0: version "0.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" private@^0.1.6, private@^0.1.7, private@~0.1.5: version "0.1.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" process-nextick-args@~1.0.6: version "1.0.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" process@^0.11.0: version "0.11.10" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" progress@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" promise@^7.1.1: version "7.3.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" dependencies: asap "~2.0.3" prop-types@^15.5.10, prop-types@^15.6.0: version "15.6.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" dependencies: fbjs "^0.8.16" loose-envify "^1.3.1" @@ -3618,15 +3616,15 @@ prop-types@^15.5.10, prop-types@^15.6.0: prr@~0.0.0: version "0.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" + resolved "https://registry.yarnpkg.com/prr/-/prr-0.0.0.tgz#1a84b85908325501411853d0081ee3fa86e2926a" pseudomap@^1.0.2: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" public-encrypt@^4.0.0: version "4.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" @@ -3636,59 +3634,59 @@ public-encrypt@^4.0.0: punycode@1.3.2: version "1.3.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" punycode@^1.2.4, punycode@^1.4.1: version "1.4.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" q@^1.1.2: version "1.5.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" qs@~1.0.0: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/qs/-/qs-1.0.2.tgz#50a93e2b5af6691c31bcea5dae78ee6ea1903768" + resolved "https://registry.yarnpkg.com/qs/-/qs-1.0.2.tgz#50a93e2b5af6691c31bcea5dae78ee6ea1903768" qs@~6.4.0: version "6.4.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" qs@~6.5.1: version "6.5.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" querystring-es3@^0.2.0: version "0.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" querystring@0.2.0: version "0.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" randomatic@^1.1.3: version "1.1.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" dependencies: is-number "^3.0.0" kind-of "^4.0.0" randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.0.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: version "1.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62" + resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.3.tgz#b96b7df587f01dd91726c418f30553b1418e3d62" dependencies: randombytes "^2.0.5" safe-buffer "^5.1.0" rc@^1.1.7: version "1.2.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" dependencies: deep-extend "~0.4.0" ini "~1.3.0" @@ -3697,7 +3695,7 @@ rc@^1.1.7: react-dom@~15.6.2: version "15.6.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.2.tgz#41cfadf693b757faf2708443a1d1fd5a02bef730" dependencies: fbjs "^0.8.9" loose-envify "^1.1.0" @@ -3706,19 +3704,19 @@ react-dom@~15.6.2: react-text-highlight@^0.1.1: version "0.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/react-text-highlight/-/react-text-highlight-0.1.1.tgz#522fe0647c4409909aadde74940f6f7f2d7477d1" + resolved "https://registry.yarnpkg.com/react-text-highlight/-/react-text-highlight-0.1.1.tgz#522fe0647c4409909aadde74940f6f7f2d7477d1" dependencies: react "^0.13.3" react@^0.13.3: version "0.13.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/react/-/react-0.13.3.tgz#a2dfa85335d7dc02b82b482f089582e64cc13356" + resolved "https://registry.yarnpkg.com/react/-/react-0.13.3.tgz#a2dfa85335d7dc02b82b482f089582e64cc13356" dependencies: envify "^3.0.0" react@~15.6.2: version "15.6.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72" + resolved "https://registry.yarnpkg.com/react/-/react-15.6.2.tgz#dba0434ab439cfe82f108f0f511663908179aa72" dependencies: create-react-class "^15.6.0" fbjs "^0.8.9" @@ -3728,14 +3726,14 @@ react@~15.6.2: read-pkg-up@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" dependencies: find-up "^2.0.0" read-pkg "^2.0.0" read-pkg@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" dependencies: load-json-file "^2.0.0" normalize-package-data "^2.3.2" @@ -3743,7 +3741,7 @@ read-pkg@^2.0.0: readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6: version "2.3.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -3755,7 +3753,7 @@ readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable readdirp@^2.0.0: version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" dependencies: graceful-fs "^4.1.2" minimatch "^3.0.2" @@ -3764,7 +3762,7 @@ readdirp@^2.0.0: recast@^0.11.17: version "0.11.23" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" + resolved "https://registry.yarnpkg.com/recast/-/recast-0.11.23.tgz#451fd3004ab1e4df9b4e4b66376b2a21912462d3" dependencies: ast-types "0.9.6" esprima "~3.1.0" @@ -3773,19 +3771,19 @@ recast@^0.11.17: regenerate@^1.2.1: version "1.3.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" regenerator-runtime@^0.10.5: version "0.10.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz#336c3efc1220adcedda2c9fab67b5a7955a33658" regenerator-runtime@^0.11.0: version "0.11.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" regenerator-transform@^0.10.0: version "0.10.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" dependencies: babel-runtime "^6.18.0" babel-types "^6.19.0" @@ -3793,13 +3791,13 @@ regenerator-transform@^0.10.0: regex-cache@^0.4.2: version "0.4.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" dependencies: is-equal-shallow "^0.1.3" regexpu-core@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" dependencies: regenerate "^1.2.1" regjsgen "^0.2.0" @@ -3807,35 +3805,35 @@ regexpu-core@^2.0.0: regjsgen@^0.2.0: version "0.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" regjsparser@^0.1.4: version "0.1.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" dependencies: jsesc "~0.5.0" remove-trailing-separator@^1.0.1: version "1.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" repeat-element@^1.1.2: version "1.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" repeat-string@^1.5.2: version "1.6.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" repeating@^2.0.0: version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" dependencies: is-finite "^1.0.0" request@2.40.0: version "2.40.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/request/-/request-2.40.0.tgz#4dd670f696f1e6e842e66b4b5e839301ab9beb67" + resolved "https://registry.yarnpkg.com/request/-/request-2.40.0.tgz#4dd670f696f1e6e842e66b4b5e839301ab9beb67" dependencies: forever-agent "~0.5.0" json-stringify-safe "~5.0.0" @@ -3854,7 +3852,7 @@ request@2.40.0: request@2.81.0: version "2.81.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" @@ -3881,7 +3879,7 @@ request@2.81.0: request@^2.55.0: version "2.83.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" dependencies: aws-sign2 "~0.7.0" aws4 "^1.6.0" @@ -3908,133 +3906,133 @@ request@^2.55.0: require-directory@^2.1.1: version "2.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" require-main-filename@^1.0.1: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" require-uncached@^1.0.3: version "1.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" dependencies: caller-path "^0.1.0" resolve-from "^1.0.0" resolve-from@^1.0.0: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" resolve@1.1.x: version "1.1.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" resolve@^1.2.0: version "1.5.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" dependencies: path-parse "^1.0.5" restore-cursor@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" dependencies: onetime "^2.0.0" signal-exit "^3.0.2" right-align@^0.1.1: version "0.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" dependencies: align-text "^0.1.1" rimraf@2, rimraf@^2.2.8, rimraf@^2.3.2, rimraf@^2.5.1, rimraf@^2.6.1: version "2.6.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" dependencies: glob "^7.0.5" ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" dependencies: hash-base "^2.0.0" inherits "^2.0.1" run-async@^2.2.0: version "2.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" dependencies: is-promise "^2.1.0" rx-lite-aggregates@^4.0.8: version "4.0.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" dependencies: rx-lite "*" rx-lite@*, rx-lite@^4.0.8: version "4.0.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" samsam@1.1.2: version "1.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567" + resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.2.tgz#bec11fdc83a9fda063401210e40176c3024d1567" samsam@~1.1: version "1.1.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/samsam/-/samsam-1.1.3.tgz#9f5087419b4d091f232571e7fa52e90b0f552621" + resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.1.3.tgz#9f5087419b4d091f232571e7fa52e90b0f552621" schema-utils@^0.3.0: version "0.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" + resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" dependencies: ajv "^5.0.0" "semver@2 || 3 || 4 || 5", semver@^5.3.0: version "5.4.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" set-immediate-shim@^1.0.1: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.9" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.9.tgz#98f64880474b74f4a38b8da9d3c0f2d104633e7d" dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" shebang-command@^1.2.0: version "1.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" signal-exit@^3.0.0, signal-exit@^3.0.2: version "3.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" sinon@^1.14.0: version "1.17.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sinon/-/sinon-1.17.7.tgz#4542a4f49ba0c45c05eb2e9dd9d203e2b8efe0bf" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-1.17.7.tgz#4542a4f49ba0c45c05eb2e9dd9d203e2b8efe0bf" dependencies: formatio "1.1.1" lolex "1.3.2" @@ -4043,87 +4041,87 @@ sinon@^1.14.0: slash@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" slice-ansi@1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" dependencies: is-fullwidth-code-point "^2.0.0" sntp@0.2.x: version "0.2.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-0.2.4.tgz#fb885f18b0f3aad189f824862536bceeec750900" dependencies: hoek "0.9.x" sntp@1.x.x: version "1.0.9" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" dependencies: hoek "2.x.x" sntp@2.x.x: version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" dependencies: hoek "4.x.x" source-list-map@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" source-map-support@^0.4.15: version "0.4.18" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" dependencies: source-map "^0.5.6" source-map@^0.1.40, source-map@~0.1.40, source-map@~0.1.7: version "0.1.43" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" dependencies: amdefine ">=0.0.4" source-map@^0.4.2: version "0.4.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" dependencies: amdefine ">=0.0.4" source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0, source-map@~0.5.1, source-map@~0.5.6: version "0.5.7" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" source-map@~0.6.1: version "0.6.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" spawn-command@^0.0.2: version "0.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" + resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2.tgz#9544e1a43ca045f8531aac1a48cb29bdae62338e" spdx-correct@~1.0.0: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" dependencies: spdx-license-ids "^1.0.2" spdx-expression-parse@~1.0.0: version "1.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" spdx-license-ids@^1.0.2: version "1.2.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" sprintf-js@~1.0.2: version "1.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" sshpk@^1.7.0: version "1.13.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -4137,14 +4135,14 @@ sshpk@^1.7.0: stream-browserify@^2.0.1: version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" dependencies: inherits "~2.0.1" readable-stream "^2.0.2" stream-http@^2.3.1: version "2.7.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.7.2.tgz#40a050ec8dc3b53b33d9909415c02c0bf1abfbad" dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -4154,7 +4152,7 @@ stream-http@^2.3.1: string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" @@ -4162,83 +4160,83 @@ string-width@^1.0.1, string-width@^1.0.2: string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" string_decoder@^0.10.25: version "0.10.31" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" string_decoder@~1.0.3: version "1.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" dependencies: safe-buffer "~5.1.0" stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" dependencies: ansi-regex "^3.0.0" strip-bom@^3.0.0: version "3.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" strip-eof@^1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" strip-json-comments@~2.0.1: version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" style-loader@^0.18.2: version "0.18.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/style-loader/-/style-loader-0.18.2.tgz#cc31459afbcd6d80b7220ee54b291a9fd66ff5eb" + resolved "https://registry.yarnpkg.com/style-loader/-/style-loader-0.18.2.tgz#cc31459afbcd6d80b7220ee54b291a9fd66ff5eb" dependencies: loader-utils "^1.0.2" schema-utils "^0.3.0" supports-color@1.3.x: version "1.3.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-1.3.1.tgz#15758df09d8ff3b4acc307539fabe27095e1042d" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-1.3.1.tgz#15758df09d8ff3b4acc307539fabe27095e1042d" supports-color@4.4.0: version "4.4.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.4.0.tgz#883f7ddabc165142b2a61427f3352ded195d1a3e" dependencies: has-flag "^2.0.0" supports-color@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" supports-color@^4.0.0, supports-color@^4.2.1: version "4.5.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" dependencies: has-flag "^2.0.0" "symbol-tree@>= 3.1.0 < 4.0.0": version "3.2.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" table@^4.0.1: version "4.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" dependencies: ajv "^5.2.3" ajv-keywords "^2.1.0" @@ -4249,11 +4247,11 @@ table@^4.0.1: tapable@^0.2.7: version "0.2.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" tar-pack@^3.4.0: version "3.4.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" dependencies: debug "^2.2.0" fstream "^1.0.10" @@ -4266,7 +4264,7 @@ tar-pack@^3.4.0: tar@^2.2.1: version "2.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" dependencies: block-stream "*" fstream "^1.0.2" @@ -4274,93 +4272,93 @@ tar@^2.2.1: text-table@~0.2.0: version "0.2.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" through@^2.3.6, through@~2.3.4: version "2.3.8" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" timers-browserify@^2.0.2: version "2.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.4.tgz#96ca53f4b794a5e7c0e1bd7cc88a372298fa01e6" dependencies: setimmediate "^1.0.4" tmp@^0.0.33: version "0.0.33" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" dependencies: os-tmpdir "~1.0.2" to-arraybuffer@^1.0.0: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" to-fast-properties@^1.0.3: version "1.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" tough-cookie@>=0.12.0, tough-cookie@^2.0.0, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" dependencies: punycode "^1.4.1" tr46@~0.0.1: version "0.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" transmitter@^3.0.1: version "3.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/transmitter/-/transmitter-3.0.1.tgz#32e99e43d1321e49dc2e194fa75df4fe84a8b918" + resolved "https://registry.yarnpkg.com/transmitter/-/transmitter-3.0.1.tgz#32e99e43d1321e49dc2e194fa75df4fe84a8b918" trim-right@^1.0.1: version "1.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" tryit@^1.0.1: version "1.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" + resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" tty-browserify@0.0.0: version "0.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" tunnel-agent@^0.6.0: version "0.6.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" dependencies: safe-buffer "^5.0.1" tunnel-agent@~0.4.0: version "0.4.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" type-check@~0.3.1, type-check@~0.3.2: version "0.3.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" dependencies: prelude-ls "~1.1.2" type-detect@0.1.1: version "0.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-0.1.1.tgz#0ba5ec2a885640e470ea4e8505971900dac58822" typedarray@^0.0.6: version "0.0.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" ua-parser-js@^0.7.9: version "0.7.17" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" uglify-js@^2.8.29: version "2.8.29" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" dependencies: source-map "~0.5.1" yargs "~3.10.0" @@ -4369,7 +4367,7 @@ uglify-js@^2.8.29: uglify-js@~2.3: version "2.3.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uglify-js/-/uglify-js-2.3.6.tgz#fa0984770b428b7a9b2a8058f46355d14fef211a" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.3.6.tgz#fa0984770b428b7a9b2a8058f46355d14fef211a" dependencies: async "~0.2.6" optimist "~0.3.5" @@ -4377,11 +4375,11 @@ uglify-js@~2.3: uglify-to-browserify@~1.0.0: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" uglifyjs-webpack-plugin@^0.4.6: version "0.4.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" dependencies: source-map "^0.5.6" uglify-js "^2.8.29" @@ -4389,57 +4387,57 @@ uglifyjs-webpack-plugin@^0.4.6: uid-number@^0.0.6: version "0.0.6" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" underscore.string@~2.4.0: version "2.4.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" + resolved "https://registry.yarnpkg.com/underscore.string/-/underscore.string-2.4.0.tgz#8cdd8fbac4e2d2ea1e7e2e8097c42f442280f85b" underscore@~1.7.0: version "1.7.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.7.0.tgz#6bbaf0877500d36be34ecaa584e0db9fef035209" url@^0.11.0: version "0.11.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" dependencies: punycode "1.3.2" querystring "0.2.0" user-home@^1.1.1: version "1.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" + resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" util-deprecate@~1.0.1: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" util@0.10.3, "util@>=0.10.3 <1", util@^0.10.3: version "0.10.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" dependencies: inherits "2.0.1" uuid@^3.0.0, uuid@^3.1.0: version "3.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" v8flags@^2.1.1: version "2.1.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" + resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" dependencies: user-home "^1.1.1" validate-npm-package-license@^3.0.1: version "3.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" dependencies: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" verror@1.10.0: version "1.10.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" @@ -4447,13 +4445,13 @@ verror@1.10.0: vm-browserify@0.0.4: version "0.0.4" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" dependencies: indexof "0.0.1" watchpack@^1.4.0: version "1.4.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" dependencies: async "^2.1.2" chokidar "^1.7.0" @@ -4461,14 +4459,14 @@ watchpack@^1.4.0: webpack-sources@^1.0.1: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/webpack-sources/-/webpack-sources-1.0.2.tgz#d0148ec083b3b5ccef1035a6b3ec16442983b27a" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.0.2.tgz#d0148ec083b3b5ccef1035a6b3ec16442983b27a" dependencies: source-list-map "^2.0.0" source-map "~0.6.1" webpack@^3.8.1: version "3.8.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.8.1.tgz#b16968a81100abe61608b0153c9159ef8bb2bd83" dependencies: acorn "^5.0.0" acorn-dynamic-import "^2.0.0" @@ -4495,96 +4493,96 @@ webpack@^3.8.1: whatwg-fetch@>=0.10.0: version "2.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" whatwg-url-compat@~0.6.5: version "0.6.5" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz#00898111af689bb097541cd5a45ca6c8798445bf" + resolved "https://registry.yarnpkg.com/whatwg-url-compat/-/whatwg-url-compat-0.6.5.tgz#00898111af689bb097541cd5a45ca6c8798445bf" dependencies: tr46 "~0.0.1" which-module@^2.0.0: version "2.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" which@1.0.x: version "1.0.9" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/which/-/which-1.0.9.tgz#460c1da0f810103d0321a9b633af9e575e64486f" + resolved "https://registry.yarnpkg.com/which/-/which-1.0.9.tgz#460c1da0f810103d0321a9b633af9e575e64486f" which@^1.2.9: version "1.3.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" dependencies: isexe "^2.0.0" wide-align@^1.1.0: version "1.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" dependencies: string-width "^1.0.2" window-size@0.1.0: version "0.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" wordwrap@0.0.2: version "0.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" wordwrap@0.0.x, wordwrap@~0.0.2: version "0.0.3" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" wordwrap@~1.0.0: version "1.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" wrap-ansi@^2.0.0: version "2.1.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" wrappy@1: version "1.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" write@^0.2.1: version "0.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" dependencies: mkdirp "^0.5.1" "xml-name-validator@>= 2.0.1 < 3.0.0": version "2.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-2.0.1.tgz#4d8b8f1eccd3419aa362061becef515e1e559635" "xmlhttprequest@>= 1.6.0 < 2.0.0": version "1.8.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" xtend@^4.0.0: version "4.0.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" y18n@^3.2.1: version "3.2.1" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" yallist@^2.1.2: version "2.1.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" yargs-parser@^7.0.0: version "7.0.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" dependencies: camelcase "^4.1.0" yargs@^8.0.2: version "8.0.2" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" dependencies: camelcase "^4.1.0" cliui "^3.2.0" @@ -4602,7 +4600,7 @@ yargs@^8.0.2: yargs@~3.10.0: version "3.10.0" - resolved "http://nexus-server-01.ol.epicgames.net:8081/nexus/content/groups/npm-all/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" dependencies: camelcase "^1.0.2" cliui "^2.1.0" From bf941c8acaa3cd3656eb8044b2ee3fde61c42a1d Mon Sep 17 00:00:00 2001 From: Ryan Date: Mon, 13 Nov 2017 10:27:18 -0500 Subject: [PATCH 21/21] Update to fix travis command and eslint errors --- package.json | 2 +- test/babel/index.js | 27 +++++++++++++++------------ 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/package.json b/package.json index 310b2d19..a2dc1348 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "test-node": "babel-node node_modules/.bin/_mocha -u exports -R nyan test", "test-node-debug": "babel-node node_modules/.bin/_mocha -u exports -R nyan test --inspect-brk", "transpile": "babel src --out-dir lib", - "transpile-cover": "babel src --out-dir lib --plugins external-helpers-2", + "transpile-cover": "babel src --out-dir lib --plugins external-helpers", "version": "npm run build" }, "files": [ diff --git a/test/babel/index.js b/test/babel/index.js index 9449ede8..4972926e 100644 --- a/test/babel/index.js +++ b/test/babel/index.js @@ -191,11 +191,12 @@ } }) if (superClass) { - if (Object.setPrototypeOf) { - Object.setPrototypeOf(subClass, superClass) - } else { - subClass.__proto__ = superClass - } + if (Object.setPrototypeOf) { + Object.setPrototypeOf(subClass, superClass) + } else { + subClass.__proto__ = superClass //eslint-disable-line + } + } } babelHelpers.instanceof = function (left, right) { @@ -289,7 +290,7 @@ let _e try { - for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { //eslint-disable-line _arr.push(_s.value) if (i && _arr.length === i) break @@ -299,9 +300,9 @@ _e = err } finally { try { - if (!_n && _i.return) _i.return() + if (!_n && _i.return) _i.return() //eslint-disable-line } finally { - if (_d) throw _e + if (_d) throw _e //eslint-disable-line } } @@ -324,7 +325,7 @@ } else if (Symbol.iterator in Object(arr)) { const _arr = [] - for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { + for (var _iterator = arr[Symbol.iterator](), _step; !(_step = _iterator.next()).done;) { //eslint-disable-line _arr.push(_step.value) if (i && _arr.length === i) break @@ -364,10 +365,12 @@ babelHelpers.toConsumableArray = function (arr) { if (Array.isArray(arr)) { - for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i] - + const arr2 = Array(arr.length) + for (let i = 0; i < arr.length; i++) { + arr2[i] = arr[i] + } return arr2 } return Array.from(arr) } -}(typeof global === 'undefined' ? self : global)) //eslint-disable-line +}(typeof global === 'undefined' ? self : global))