New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

gyrejs

Package Overview
Dependencies
Maintainers
1
Versions
36
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gyrejs - npm Package Compare versions

Comparing version

to
0.0.15

todo.txt

1224

dist/gyrejs.js

@@ -10,3 +10,3 @@ (function webpackUniversalModuleDefinition(root, factory) {

root["GyreJS"] = factory(root["Immutable"]);
})(this, function(__WEBPACK_EXTERNAL_MODULE_1__) {
})(this, function(__WEBPACK_EXTERNAL_MODULE_2__) {
return /******/ (function(modules) { // webpackBootstrap

@@ -65,29 +65,6 @@ /******/ // The module cache

var _store = __webpack_require__(15);
var _store = __webpack_require__(1);
var _store2 = _interopRequireDefault(_store);
var _gyresLocalFactory = __webpack_require__(5);
var _gyresLocalFactory2 = _interopRequireDefault(_gyresLocalFactory);
var _gyresSmartRestFactory = __webpack_require__(9);
var _gyresSmartRestFactory2 = _interopRequireDefault(_gyresSmartRestFactory);
// Middleware
var _middleWareDispatchLogger = __webpack_require__(13);
var _middleWareDispatchLogger2 = _interopRequireDefault(_middleWareDispatchLogger);
var _middleWareInjectDispatch = __webpack_require__(14);
var _middleWareInjectDispatch2 = _interopRequireDefault(_middleWareInjectDispatch);
var middleWare = {
dispatchLogger: _middleWareDispatchLogger2["default"],
injectDispatch: _middleWareInjectDispatch2["default"]
};
// Private variables

@@ -107,9 +84,27 @@ var gyres = new Map();

if (!gyres.has(id)) {
console.warn(">> GyreJS: Gyre factory '" + id + "' not registered.");
console.warn(">> GyreJS: Gyre factory '" + id + "' not registered."); // eslint-disable-line no-console
}
var newNameSpace = id + "-" + Date.now();
store.setState({
data: {}
}, newNameSpace);
return gyres.get(id)(store, Object.assign({}, { NS: id + "-" + Date.now() }, options));
return gyres.get(id)(store, Object.assign({}, { NS: newNameSpace }, options));
};
/**
* destroyGyre()
*
* @param {String} id Id of a registered gyre factory.
* @returns {Object|boolean} Gyre instance.
*/
var destroyGyre = function destroyGyre(id) {
if (!gyres.has(id)) {
console.warn(">> GyreJS: Gyre factory '" + id + "' not registered."); // eslint-disable-line no-console
return false;
}
return gyres["delete"](id) && true;
};
/**
* registerGyreFactory()

@@ -125,8 +120,4 @@ *

// Register standard gyres
registerGyreFactory("local", _gyresLocalFactory2["default"]);
registerGyreFactory("smartRest", _gyresSmartRestFactory2["default"]);
exports.createGyre = createGyre;
exports.middleWare = middleWare;
exports.destroyGyre = destroyGyre;
exports.registerGyreFactory = registerGyreFactory;

@@ -136,8 +127,2 @@

/* 1 */
/***/ function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_1__;
/***/ },
/* 2 */
/***/ function(module, exports, __webpack_require__) {

@@ -151,1110 +136,57 @@

var _actionHandler = __webpack_require__(4);
var _immutable = __webpack_require__(2);
var _actionHandler2 = _interopRequireDefault(_actionHandler);
var _immutable2 = _interopRequireDefault(_immutable);
/**
* gyreFactory()
* Store() Factory function
*
* @param {Function} Reducer Reducer factory.
* @param {Function} ReactHoC React HoC factory.
* @param {Function} [actions] Default actions object.
* @param {Immutable.Map|Object} [state] Initial state object.
* @returns {Function} Gyre factory function.
* @returns {{addFilter: Function, getState: Function, setState: Function, updateState: Function}} API
*/
var gyreFactory = function gyreFactory(Reducer, ReactHoC) {
var actions = arguments.length <= 2 || arguments[2] === undefined ? function () {} : arguments[2];
var state = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
return function (store, options) {
// Private variables
var AH = _actionHandler2["default"](store, options);
// Public functions
/**
* getReducer() Getter for reducer
*
* @param {String} matcher Matcher
* @param {Function} cb Callback
* @returns {Function} Reducer factory
*/
var getReducer = function getReducer(matcher, cb) {
return Reducer(store, AH.dispatch, matcher, cb, options);
};
/**
* setState()
*
* @param {Object|Immutable.Map} tState The state to set to this gyre.
* @returns {Immutable.Map} Current store state.
*/
var setState = function setState(tState) {
return store.setState(tState, options.NS);
};
/**
* getState()
*
* @returns {Immutable.Map} Current store state.
*/
var getState = function getState() {
return store.getState.get(options.NS);
};
/**
* reactHoC()
*
* @param {Object} react React instance.
* @return {Function} HoC factory function.
*/
var reactHoC = ReactHoC(getReducer);
// Setup
AH.addActions(actions(options));
setState(state);
// API
return {
addAction: AH.addAction,
addActions: AH.addActions,
dispatch: AH.dispatch,
getState: getState,
getReducer: getReducer,
reactHoC: reactHoC,
setState: setState,
use: AH.use
};
};
};
exports["default"] = gyreFactory;
module.exports = exports["default"];
/***/ },
/* 3 */
/***/ function(module, exports) {
/**
* extractEndpoints()
*
* @param {Object} query Query object.
* @returns {Object[]} Array of endpoints.
*/
"use strict";
exports.__esModule = true;
var extractEndpoints = function extractEndpoints(query) {
var marked1$0 = [processQuery].map(regeneratorRuntime.mark);
function processQuery(q, root, branch) {
var _iterator, _isArray, _i, _ref, i, val, tBranch, rV, _iterator2, _isArray2, _i2, _ref2, idVal;
return regeneratorRuntime.wrap(function processQuery$(context$2$0) {
while (1) switch (context$2$0.prev = context$2$0.next) {
case 0:
_iterator = Object.keys(q), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();
case 1:
if (!_isArray) {
context$2$0.next = 7;
break;
}
if (!(_i >= _iterator.length)) {
context$2$0.next = 4;
break;
}
return context$2$0.abrupt("break", 36);
case 4:
_ref = _iterator[_i++];
context$2$0.next = 11;
break;
case 7:
_i = _iterator.next();
if (!_i.done) {
context$2$0.next = 10;
break;
}
return context$2$0.abrupt("break", 36);
case 10:
_ref = _i.value;
case 11:
i = _ref;
val = q[i];
tBranch = branch ? branch.concat([i]) : [i];
rV = {
name: root ? root + "/" + i : i,
branch: tBranch,
id: val.id ? val.id : null,
fields: val.fields ? val.fields : null
};
if (!(rV.fields || rV.id && !val.children)) {
context$2$0.next = 18;
break;
}
context$2$0.next = 18;
return rV;
case 18:
if (!val.children) {
context$2$0.next = 34;
break;
}
_iterator2 = Array.isArray(val.id) ? val.id : [val.id], _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();
case 20:
if (!_isArray2) {
context$2$0.next = 26;
break;
}
if (!(_i2 >= _iterator2.length)) {
context$2$0.next = 23;
break;
}
return context$2$0.abrupt("break", 34);
case 23:
_ref2 = _iterator2[_i2++];
context$2$0.next = 30;
break;
case 26:
_i2 = _iterator2.next();
if (!_i2.done) {
context$2$0.next = 29;
break;
}
return context$2$0.abrupt("break", 34);
case 29:
_ref2 = _i2.value;
case 30:
idVal = _ref2;
return context$2$0.delegateYield(processQuery(val.children, idVal ? i + "/" + idVal : i, tBranch), "t0", 32);
case 32:
context$2$0.next = 20;
break;
case 34:
context$2$0.next = 1;
break;
case 36:
case "end":
return context$2$0.stop();
}
}, marked1$0[0], this);
}
var it = processQuery(query);
var res = it.next();
var urlDefs = [];
while (!res.done) {
urlDefs.push(res.value);
res = it.next();
}
return urlDefs;
};
/**
* createUrls()
* Creates urls from query
*
* @param {Object}query Query object.
* @returns {String[]} Array of urls.
*/
var createUrls = function createUrls(query) {
var urlDefs = extractEndpoints(query);
return urlDefs.map(function (urlDef) {
var urlString = urlDef.name;
if (urlDef.hasOwnProperty("id") && urlDef.id !== null) {
urlString = urlString + "/" + urlDef.id;
}
if (Array.isArray(urlDef.fields) && urlDef.fields.length > 0) {
urlString = urlString + "?fields=" + urlDef.fields.toString();
}
return {
path: urlString,
type: urlDef.branch[urlDef.branch.length - 1],
root: urlDef.name
};
});
};
/**
* checkStatusAndParse()
*
* @param {Object} response Fetch response.
* @returns {Object} Parsed response.
*/
var checkStatusAndParse = function checkStatusAndParse(response) {
if (response.status >= 200 && response.status < 300) {
return response.json().then(function (data) {
return {
success: true,
data: data
};
});
}
return new Promise(function (resolve) {
return resolve({
success: false,
msg: response,
code: response.status
});
});
};
/**
* parse()
*
* @param {Immutable.Map} endpoint
* @returns {*}
*/
var transform = function transform(endpoint) {
return function (response) {
if (response.success) {
var _ret = (function () {
var rData = Array.isArray(response.data) ? response.data : [response.data];
// Get idList and map data
var idList = {};
var data = {};
idList[endpoint.get("root")] = [];
data[endpoint.get("type")] = {};
rData.forEach(function (entry) {
idList[endpoint.get("root")].push(entry.id.toString());
data[endpoint.get("type")][entry.id.toString()] = entry;
});
return {
v: {
success: true,
data: data,
idList: idList
}
};
})();
if (typeof _ret === "object") return _ret.v;
}
return response;
};
};
/**
* fetchUrl()
*
* @param {String} host Endpoint host.
* @param {Immutable.Map} endpoint Endpoint options.
* @returns {Promise} Promise of fetch.
*/
var fetchUrl = function fetchUrl(host, endpoint) {
var hostName = host || location.protocol + "//" + location.hostname + (location.port ? ":" + location.port : "");
// Fetch data
return fetch(hostName + "/" + endpoint.get("path")).then(checkStatusAndParse).then(transform(endpoint));
};
/**
* hash()
* Simple hash from string
*
* @param {String} str string
* @returns {Number} hash Hash of string.
*/
var hash = function hash(str) {
var len = str.length;
var h = 0;
if (str.length === 0) {
return h;
}
for (var i = 0; i < len; i++) {
var chr = str.charCodeAt(i);
h = (h << 5) - h + chr;
h |= 0;
}
return h;
};
/**
* hashQueryObject()
* Simple query hash from object
*
* @param {Object} obj Query object
* @returns {Number} hash Hash of query.
*/
var hashQueryObject = function hashQueryObject(obj) {
return hash(JSON.stringify(obj));
};
// Helper functions
var helpers = {
createUrls: createUrls,
fetchUrl: fetchUrl,
hashQueryObject: hashQueryObject
};
exports["default"] = helpers;
module.exports = exports["default"];
// If it has fields, OR an id and no children, return as endpoint.
/***/ },
/* 4 */
/***/ function(module, exports) {
/**
* actionHandler()
*
* @param {Object} store instance.
* @param {Object} options Options object.
* @returns {{addAction: Function, dispatch: Function}} API.
*/
"use strict";
exports.__esModule = true;
var actionHandler = function actionHandler(store, options) {
var store = function store() {
// Private variables
var actionMap = new Map();
var middleWare = [];
var state = _immutable2["default"].Map({});
var filterList = {};
var updateQueue = new Set();
// Public functions
// Private functions
/**
* dispatch()
* Send update to all registered reducers
*
* @param {String} id Id
* @param {Array} args Function arguments.
* @returns {void}
*/
var dispatch = function dispatch(id) {
for (var _len = arguments.length, args = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
args[_key - 1] = arguments[_key];
}
if (actionMap.has(id)) {
// Invoke all registered middleWare before running the final action.
middleWare.reduce(function (prev, next) {
return function () {
return next(options.NS, id, args, prev, dispatch);
};
}, function () {
return actionMap.get(id)(args);
})();
} else {
console.warn(">> GyreJS-'" + options.NS + "'-gyre: Unregistered action dispatched: '" + id + "' with arguments:", args, ". (This is a no-op)");
}
};
/**
* addAction()
*
* @param {String} id Action ID.
* @param {Function} func Reducer function.
* the actions.
* @returns {void}
*/
var addAction = function addAction(id, func) {
return actionMap.set(id, function (args) {
store.updateState(options.NS, func, args);
var sendUpdate = function sendUpdate() {
updateQueue.forEach(function (ns) {
return (filterList[ns] || []).forEach(function (filter) {
return filter(ns === "all" ? state : state.get(ns));
});
});
updateQueue.clear();
};
/**
* addActions()
* Request to issue update to filters of a given namespace.
*
* @param {Object} actions Key/func object of actions.
* the actions.
* @param {String} ns Namespace.
* @returns {void}
*/
var addActions = function addActions(actions) {
Object.keys(actions).forEach(function (action) {
addAction(action, actions[action]);
});
};
/**
* use()
*
* @param {Function} mware Middleware function.
* @returns {void}
*/
var use = function use(mware) {
middleWare.unshift(mware);
};
// API
return {
addAction: addAction,
addActions: addActions,
dispatch: dispatch,
use: use
};
};
exports["default"] = actionHandler;
module.exports = exports["default"];
/***/ },
/* 5 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var _gyreFactory = __webpack_require__(2);
var _gyreFactory2 = _interopRequireDefault(_gyreFactory);
var _reducer = __webpack_require__(7);
var _reducer2 = _interopRequireDefault(_reducer);
var _reactHoC = __webpack_require__(6);
var _reactHoC2 = _interopRequireDefault(_reactHoC);
exports["default"] = _gyreFactory2["default"](_reducer2["default"], _reactHoC2["default"]);
module.exports = exports["default"];
/***/ },
/* 6 */
/***/ function(module, exports) {
/**
* Higher order Component factory for local gyre.
*
* @param {Function} reducer Reducer factory.
* @returns {Function} HoC Factory.
*/
"use strict";
exports.__esModule = 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; };
var localHoCFactory = function localHoCFactory(reducer) {
/**
* localHoC()
*
* @param {String} matcher Matcher.
* @param {Object} DefaultComponent Default component.
* @param {*} initialData Initial state.
* @returns {Object} React class
*/
return function (matcher, DefaultComponent) {
return React.createClass({
displayName: "GyreJS-localHoC",
getInitialState: function getInitialState() {
return {
data: null
};
},
componentWillMount: function componentWillMount() {
this.unRegisterReducer = reducer(matcher, this.handleNewData);
},
shouldComponentUpdate: function shouldComponentUpdate(nextState) {
return this.state.data !== nextState.data;
},
componentWillUnmount: function componentWillUnmount() {
this.unRegisterReducer();
},
handleNewData: function handleNewData(data) {
this.setState({
data: data
});
},
render: function render() {
return typeof this.state.data !== "undefined" ? React.createElement(DefaultComponent, _extends({}, this.props, this.state.data)) : false;
}
});
};
};
exports["default"] = localHoCFactory;
module.exports = exports["default"];
/***/ },
/* 7 */
/***/ function(module, exports) {
/**
* reducer()
*
* @param {Object} store Store instance
* @param {Function} dispatch Dispatch
* @param {Array|String} matcher Matcher
* @param {Function} cb Callback
* @param {Object} options Options object.
* @returns {Function} Un-register function
*/
"use strict";
exports.__esModule = true;
var reducer = function reducer(store, dispatch, matcher, cb, options) {
// Private functions
var update = function update(stateVar) {
var state = stateVar.get(options.NS);
var matchValue = Array.isArray(matcher) ? matcher : [matcher];
if (state) {
cb(matchValue.reduce(function (memo, val) {
memo[val] = state.get(val);
return memo;
}, {}));
} else {
cb(void 0);
var requestUpdate = function requestUpdate(ns) {
if (!updateQueue.size) {
requestAnimationFrame(sendUpdate);
}
updateQueue.add("all").add(ns);
};
// Return the un-register function right away.
return store.addReducer(update);
};
exports["default"] = reducer;
module.exports = exports["default"];
/***/ },
/* 8 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var _helpers = __webpack_require__(3);
var _immutable = __webpack_require__(1);
var _immutable2 = _interopRequireDefault(_immutable);
var IMap = _immutable2["default"].Map;
var IList = _immutable2["default"].List;
// Status constants
var STATUS_COMPLETED = "COMPLETED";
var STATUS_LOADING = "LOADING";
// const STATUS_CREATING = "CREATING";
var STATUS_UPDATING = "UPDATING";
// const STATUS_REMOVING = "REMOVING";
var STATUS_ERROR = "ERROR";
// Actions
var actions = {};
var ADD_QUERY = "ADD_QUERY";
var FETCH_QUERY = "FETCH_QUERY";
var COMPLETE_QUERY = "COMPLETE_QUERY";
var FAIL_QUERY = "FAIL_QUERY";
var CREATE = "CREATE";
/*
const UPDATE = "UPDATE";
const DELETE = "DELETE";
*/
// Misc
var newQuery = IMap({
status: null,
count: 0
});
exports["default"] = function (_ref) {
var hostname = _ref.hostname;
/**
* Action: ADD_QUERY
* removeFilter() - Factory
* Remove filter from the store
*
* @param state
* @param query
* @param hash
* @param dispatch
*/
actions[ADD_QUERY] = function (state, query, hash, dispatch) {
return state.reduce(function (memo, value, key) {
if (key === "queries") {
memo = memo.set("queries", value.set(hash, newQuery.merge(value.get(hash)).merge({
hash: hash,
urls: _helpers.createUrls(query)
}).map(function (qvVal, qvKey) {
switch (qvKey) {
case "count":
{
return qvVal + 1;
}
case "status":
{
return qvVal === STATUS_COMPLETED ? STATUS_UPDATING : qvVal;
}
default:
return qvVal;
}
})).map(function (qVal, qKey) {
if (qKey === hash) {
if ([STATUS_LOADING, STATUS_UPDATING].indexOf(qVal.get("status")) === -1) {
dispatch(FETCH_QUERY, qVal);
}
}
return qVal.set("status", qVal.get("status") || STATUS_LOADING);
}));
}
return memo;
}, state);
};
/**
* Action: FETCH_QUERY
*
* @param state
* @param query
* @param dispatch
*/
actions[FETCH_QUERY] = function (state, query, dispatch) {
// Fetch urls
var promiseArray = query.get("urls").map(function (endpoint) {
return _helpers.fetchUrl(hostname, endpoint);
});
Promise.all(promiseArray).then(function (resultArray) {
var fetchResult = resultArray.reduce(function (memo, _ref2) {
var success = _ref2.success;
var msg = _ref2.msg;
if (!success) {
memo.success = false;
memo.msgList = memo.msgList.push(msg);
}
return memo;
}, { success: true, msgList: IList([]) });
if (fetchResult.success) {
dispatch(COMPLETE_QUERY, resultArray, query);
} else {
dispatch(FAIL_QUERY, fetchResult.msgList, query);
}
})["catch"](function (error) {
dispatch(FAIL_QUERY, [error], query);
});
};
/**
* Action: COMPLETE_QUERY
*
* @param state
* @param resultArray
* @param query
*/
actions[COMPLETE_QUERY] = function (state, resultArray, query) {
return state.reduce(function (memo, value, key) {
if (key === "queries") {
memo = memo.set("queries", value.map(function (qr, ky) {
var qry = qr;
if (ky === query.get("hash")) {
qry = qry.merge({
"status": STATUS_COMPLETED,
"idList": resultArray.reduce(function (prev, next) {
return prev.merge(next.idList);
}, IMap({}))
});
}
return qry;
}));
}
if (key === "data") {
memo = memo.set("data", resultArray.reduce(function (prev, result) {
return prev.mergeDeep(result.data);
}, memo.get("data")));
}
return memo;
}, state);
};
/**
* Action: FAIL_QUERY
*
* @param state
* @param msgList
* @param query
*/
actions[FAIL_QUERY] = function (state, msgList, query) {
return state.reduce(function (memo, value, key) {
if (key === "queries") {
memo = memo.set("queries", value.map(function (qr, ky) {
var qry = qr;
if (ky === query.get("hash")) {
qry = qry.merge({
"status": STATUS_ERROR,
"msg": msgList
});
}
return qry;
}));
}
return memo;
}, state);
};
actions[CREATE] = function (state, type, data) {
return state.reduce(function (memo, value, key) {
if (key === "data") {
var id = Date.now();
memo = memo.setIn(["data", type, id], _immutable2["default"].fromJS(data));
}
return memo;
}, state);
};
return actions;
};
module.exports = exports["default"];
/***/ },
/* 9 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var _gyreFactory = __webpack_require__(2);
var _gyreFactory2 = _interopRequireDefault(_gyreFactory);
var _reducer = __webpack_require__(11);
var _reducer2 = _interopRequireDefault(_reducer);
var _reactHoC = __webpack_require__(10);
var _reactHoC2 = _interopRequireDefault(_reactHoC);
var _actions = __webpack_require__(8);
var _actions2 = _interopRequireDefault(_actions);
var _state = __webpack_require__(12);
var _state2 = _interopRequireDefault(_state);
exports["default"] = _gyreFactory2["default"](_reducer2["default"], _reactHoC2["default"], _actions2["default"], _state2["default"]);
module.exports = exports["default"];
/***/ },
/* 10 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = 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; };
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var _immutable = __webpack_require__(1);
var _immutable2 = _interopRequireDefault(_immutable);
/**
* Higher order Component factory for local gyre.
*
* @param {Function} reducer Reducer factory.
* @returns {Function} HoC Factory.
*/
var reactHoCFactory = function reactHoCFactory(reducer) {
/**
* reactHoC()
*
* @param {String} matcher Matcher.
* @param {Object} DefaultComponent Default component.
* @param {Object} LoadingComponent Loading component.
* @param {Object} ErrorComponent Error component.
* @returns {Object} React class
*/
return function (matcher, DefaultComponent, LoadingComponent, ErrorComponent) {
return React.createClass({
displayName: "GyreJS-localHoC",
getInitialState: function getInitialState() {
return {
data: null
};
},
componentWillMount: function componentWillMount() {
this.unRegisterReducer = reducer(matcher, this.handleNewData);
},
shouldComponentUpdate: function shouldComponentUpdate(nextProps, nextState) {
if (this.state.status !== nextState.status) {
return true;
}
if (nextState.data) {
return !_immutable2["default"].is(nextState.data, this.state.data);
}
return true;
},
componentWillUnmount: function componentWillUnmount() {
this.unRegisterReducer();
},
handleNewData: function handleNewData(status, data) {
this.setState({
data: data,
status: status
});
},
render: function render() {
// Render wrapped component with current props and state as props.
if (!this.state || !this.state.status) {
return false;
}
var Component = undefined;
switch (this.state.status) {
case "LOADING":
{
Component = LoadingComponent;
break;
}
case "ERROR":
{
Component = ErrorComponent;
break;
}
default:
{
Component = DefaultComponent;
}
}
return Component ? React.createElement(Component, _extends({}, this.props, this.state)) : false;
}
});
};
};
exports["default"] = reactHoCFactory;
module.exports = exports["default"];
/***/ },
/* 11 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var _immutable = __webpack_require__(1);
var _immutable2 = _interopRequireDefault(_immutable);
var _helpers = __webpack_require__(3);
var IMap = _immutable2["default"].Map;
/**
* reducer()
*
* @param {Object} store Store instance
* @param {Function} dispatch Dispatch
* @param {Array|String} matcher Matcher
* @param {Function} cb Callback
* @param {Object} NS NameSpace from Options object.
* @returns {Function} Un-register function
*/
var reducer = function reducer(store, dispatch, matcher, cb, _ref) {
var NS = _ref.NS;
var queryHash = _helpers.hashQueryObject(matcher);
var update = function update(state) {
var queryResult = state.getIn([NS, "queries", queryHash, "idList"]);
var queryInfo = state.getIn([NS, "queries", queryHash]);
if (queryResult) {
cb(queryInfo.get("status"), queryResult.reduce(function (mm, value, key) {
var memo = mm;
// Create path
var path = key.split("/").reduce(function (mem, val, index) {
if (index % 2 === 0 && index) {
mem.push("children");
}
mem.push(val);
return mem;
}, []);
// Add to reducer result
var type = key.split("/");
type = type[type.length - 1];
value.forEach(function (val) {
memo = memo.mergeDeepIn(path.concat(val), state.getIn([NS, "data", type, val]));
});
return memo;
}, IMap({})));
} else {
cb(queryInfo.get("status"));
}
};
// Emit action to add query
dispatch("ADD_QUERY", matcher, queryHash);
// Return the un-register function right away.
return store.addReducer(update);
};
exports["default"] = reducer;
module.exports = exports["default"];
/***/ },
/* 12 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var _immutable = __webpack_require__(1);
var _immutable2 = _interopRequireDefault(_immutable);
var IMap = _immutable2["default"].Map;
exports["default"] = IMap({
queries: IMap({}),
data: IMap({})
});
module.exports = exports["default"];
/***/ },
/* 13 */
/***/ function(module, exports) {
/**
* dispatchLogger()
*
* @param {String} nameSpace Gyre namespace.
* @param {String} id Action Id.
* @param {Array} args Action arguments array.
* @param {Function} next Call next function in chain.
* @returns {void}
*/
"use strict";
exports.__esModule = true;
var dispatchLogger = function dispatchLogger(nameSpace, id, args, next) {
console.log(">> GyreJS-'" + nameSpace + "'-gyre: Applying action '" + id + "' with arguments: ", args);
next();
};
exports["default"] = dispatchLogger;
module.exports = exports["default"];
/***/ },
/* 14 */
/***/ function(module, exports) {
/**
* injectDispatch()
*
* @param {String} nameSpace Gyre namespace.
* @param {String} id Action Id.
* @param {Array} args Action arguments array.
* @param {Function} next Call next function in chain.
* @param {Function} dispatch Action handler dispatcher.
* @returns {void}
*/
"use strict";
exports.__esModule = true;
var injectDispatch = function injectDispatch(nameSpace, id, args, next, dispatch) {
args.push(dispatch);
next();
};
exports["default"] = injectDispatch;
module.exports = exports["default"];
/***/ },
/* 15 */
/***/ function(module, exports, __webpack_require__) {
"use strict";
exports.__esModule = true;
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var _immutable = __webpack_require__(1);
var _immutable2 = _interopRequireDefault(_immutable);
var IMap = _immutable2["default"].Map;
/**
* Store() Factory function
*
* @returns {{addReducer: Function, getState: Function, setState: Function, updateState: Function}} API
*/
var store = function store() {
// Private variables
var state = IMap({});
var reducerList = [];
// Private functions
/**
* Send update to all registered reducers
*
* @returns {void}
*/
var sendUpdate = function sendUpdate() {
return reducerList.forEach(function (reducer) {
return reducer(state);
});
};
/**
* removeReducer() - Factory
* Remove reducer from the store
*
* @param {Function} cb Reducer callback.
* @param {String} ns Namespace.
* @param {Function} cb Filter callback.
* @returns {Function} removal function.
*/
var removeReducer = function removeReducer(cb) {
var removeFilter = function removeFilter(ns, cb) {
return function () {
return reducerList = reducerList.filter(function (reducer) {
return reducer !== cb;
return filterList[ns] = filterList[ns].filter(function (filter) {
return filter !== cb;
});

@@ -1269,9 +201,9 @@ };

* @param {Immutable.Map} newState New state.
* @param {String} nameSpace Namespace.
* @param {String} ns Namespace.
* @returns {Immutable.Map} state Current state
*/
var setNewState = function setNewState(newState, nameSpace) {
if (state.get(nameSpace) !== newState) {
state = state.set(nameSpace, newState);
sendUpdate();
var setNewState = function setNewState(newState, ns) {
if (state.get(ns) !== newState) {
state = state.set(ns, newState);
requestUpdate(ns);
}

@@ -1283,16 +215,23 @@ return state;

/**
* Register a faucet with the store and send initial data.
* addFilter() Register a faucet with the store and send initial data.
*
* @param {Function} cb callback.
* @param {String} [ns] Namespace.
* @returns {Function} un-register function.
*/
var addReducer = function addReducer(cb) {
var addFilter = function addFilter(cb) {
var ns = arguments.length <= 1 || arguments[1] === undefined ? "all" : arguments[1];
if (!filterList[ns]) {
filterList[ns] = [];
}
// Save to local register
reducerList.push(cb);
filterList[ns].push(cb);
// Send state to reducer
cb(state);
// Request update to make sure the new filter gets data asap.
requestUpdate(ns);
// Return remover
return removeReducer(cb);
return removeFilter(ns, cb);
};

@@ -1312,8 +251,8 @@

*
* @param {Immutable.Map|Object} nState State.
* @param {String} [nameSpace] Namespace.
* @param {Immutable.Map|Object} newState State.
* @param {String} ns Namespace.
* @returns {Immutable.Map} New state.
*/
var setState = function setState(nState, nameSpace) {
return setNewState(IMap.isMap(nState) ? nState : IMap(nState), nameSpace);
var setState = function setState(newState, ns) {
return setNewState(_immutable2["default"].Map.isMap(newState) ? newState : _immutable2["default"].Map(newState), ns);
};

@@ -1325,3 +264,3 @@

*
* @param {String} nameSpace Namespace.
* @param {String} ns Namespace.
* @param {Function} func Reducer function.

@@ -1331,5 +270,4 @@ * @param {Array} args Reducer function arguments.

*/
var updateState = function updateState(nameSpace, func, args) {
setNewState(func.apply(undefined, [state.get(nameSpace)].concat(args)) || state.get(nameSpace), nameSpace);
return state;
var updateState = function updateState(ns, func, args) {
return setNewState(func.apply(undefined, [state.get(ns)].concat(args)) || state.get(ns), ns);
};

@@ -1339,3 +277,3 @@

return {
addReducer: addReducer,
addFilter: addFilter,
getState: getState,

@@ -1350,2 +288,8 @@ setState: setState,

/***/ },
/* 2 */
/***/ function(module, exports) {
module.exports = __WEBPACK_EXTERNAL_MODULE_2__;
/***/ }

@@ -1352,0 +296,0 @@ /******/ ])

@@ -1,1 +0,1 @@

!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e(require("Immutable")):"function"==typeof define&&define.amd?define(["Immutable"],e):"object"==typeof exports?exports.GyreJS=e(require("Immutable")):t.GyreJS=e(t.Immutable)}(this,function(t){return function(t){function e(r){if(n[r])return n[r].exports;var u=n[r]={exports:{},id:r,loaded:!1};return t[r].call(u.exports,u,u.exports,e),u.loaded=!0,u.exports}var n={};return e.m=t,e.c=n,e.p="",e(0)}([function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(15),a=r(u),s=n(5),i=r(s),o=n(9),c=r(o),f=n(13),d=r(f),l=n(14),p=r(l),h={dispatchLogger:d.default,injectDispatch:p.default},g=new Map,m=a.default(),v=function(t,e){return g.has(t)||console.warn(">> GyreJS: Gyre factory '"+t+"' not registered."),g.get(t)(m,Object.assign({},{NS:t+"-"+Date.now()},e))},_=function(t,e){g.set(t,e)};_("local",i.default),_("smartRest",c.default),e.createGyre=v,e.middleWare=h,e.registerGyreFactory=_},function(e,n){e.exports=t},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(4),a=r(u),s=function(t,e){var n=arguments.length<=2||void 0===arguments[2]?function(){}:arguments[2],r=arguments.length<=3||void 0===arguments[3]?{}:arguments[3];return function(u,s){var i=a.default(u,s),o=function(e,n){return t(u,i.dispatch,e,n,s)},c=function(t){return u.setState(t,s.NS)},f=function(){return u.getState.get(s.NS)},d=e(o);return i.addActions(n(s)),c(r),{addAction:i.addAction,addActions:i.addActions,dispatch:i.dispatch,getState:f,getReducer:o,reactHoC:d,setState:c,use:i.use}}};e.default=s,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t){function e(t,r,u){var a,s,i,o,c,f,d,l,p,h,g,m,v;return regeneratorRuntime.wrap(function(n){for(;;)switch(n.prev=n.next){case 0:a=Object.keys(t),s=Array.isArray(a),i=0,a=s?a:a[Symbol.iterator]();case 1:if(!s){n.next=7;break}if(!(i>=a.length)){n.next=4;break}return n.abrupt("break",36);case 4:o=a[i++],n.next=11;break;case 7:if(i=a.next(),!i.done){n.next=10;break}return n.abrupt("break",36);case 10:o=i.value;case 11:if(c=o,f=t[c],d=u?u.concat([c]):[c],l={name:r?r+"/"+c:c,branch:d,id:f.id?f.id:null,fields:f.fields?f.fields:null},!(l.fields||l.id&&!f.children)){n.next=18;break}return n.next=18,l;case 18:if(!f.children){n.next=34;break}p=Array.isArray(f.id)?f.id:[f.id],h=Array.isArray(p),g=0,p=h?p:p[Symbol.iterator]();case 20:if(!h){n.next=26;break}if(!(g>=p.length)){n.next=23;break}return n.abrupt("break",34);case 23:m=p[g++],n.next=30;break;case 26:if(g=p.next(),!g.done){n.next=29;break}return n.abrupt("break",34);case 29:m=g.value;case 30:return v=m,n.delegateYield(e(f.children,v?c+"/"+v:c,d),"t0",32);case 32:n.next=20;break;case 34:n.next=1;break;case 36:case"end":return n.stop()}},n[0],this)}for(var n=[e].map(regeneratorRuntime.mark),r=e(t),u=r.next(),a=[];!u.done;)a.push(u.value),u=r.next();return a},r=function(t){var e=n(t);return e.map(function(t){var e=t.name;return t.hasOwnProperty("id")&&null!==t.id&&(e=e+"/"+t.id),Array.isArray(t.fields)&&t.fields.length>0&&(e=e+"?fields="+t.fields.toString()),{path:e,type:t.branch[t.branch.length-1],root:t.name}})},u=function(t){return t.status>=200&&t.status<300?t.json().then(function(t){return{success:!0,data:t}}):new Promise(function(e){return e({success:!1,msg:t,code:t.status})})},a=function(t){return function(e){if(e.success){var n=function(){var n=Array.isArray(e.data)?e.data:[e.data],r={},u={};return r[t.get("root")]=[],u[t.get("type")]={},n.forEach(function(e){r[t.get("root")].push(e.id.toString()),u[t.get("type")][e.id.toString()]=e}),{v:{success:!0,data:u,idList:r}}}();if("object"==typeof n)return n.v}return e}},s=function(t,e){var n=t||location.protocol+"//"+location.hostname+(location.port?":"+location.port:"");return fetch(n+"/"+e.get("path")).then(u).then(a(e))},i=function(t){var e=t.length,n=0;if(0===t.length)return n;for(var r=0;e>r;r++){var u=t.charCodeAt(r);n=(n<<5)-n+u,n|=0}return n},o=function(t){return i(JSON.stringify(t))},c={createUrls:r,fetchUrl:s,hashQueryObject:o};e.default=c,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t,e){var n=new Map,r=[],u=function o(t){for(var u=arguments.length,a=Array(u>1?u-1:0),s=1;u>s;s++)a[s-1]=arguments[s];n.has(t)?r.reduce(function(n,r){return function(){return r(e.NS,t,a,n,o)}},function(){return n.get(t)(a)})():console.warn(">> GyreJS-'"+e.NS+"'-gyre: Unregistered action dispatched: '"+t+"' with arguments:",a,". (This is a no-op)")},a=function(r,u){return n.set(r,function(n){t.updateState(e.NS,u,n)})},s=function(t){Object.keys(t).forEach(function(e){a(e,t[e])})},i=function(t){r.unshift(t)};return{addAction:a,addActions:s,dispatch:u,use:i}};e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(2),a=r(u),s=n(7),i=r(s),o=n(6),c=r(o);e.default=a.default(i.default,c.default),t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},r=function(t){return function(e,r){return React.createClass({displayName:"GyreJS-localHoC",getInitialState:function(){return{data:null}},componentWillMount:function(){this.unRegisterReducer=t(e,this.handleNewData)},shouldComponentUpdate:function(t){return this.state.data!==t.data},componentWillUnmount:function(){this.unRegisterReducer()},handleNewData:function(t){this.setState({data:t})},render:function(){return"undefined"!=typeof this.state.data?React.createElement(r,n({},this.props,this.state.data)):!1}})}};e.default=r,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t,e,n,r,u){var a=function(t){var e=t.get(u.NS),a=Array.isArray(n)?n:[n];r(e?a.reduce(function(t,n){return t[n]=e.get(n),t},{}):void 0)};return t.addReducer(a)};e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(3),a=n(1),s=r(a),i=s.default.Map,o=s.default.List,c="COMPLETED",f="LOADING",d="UPDATING",l="ERROR",p={},h="ADD_QUERY",g="FETCH_QUERY",m="COMPLETE_QUERY",v="FAIL_QUERY",_="CREATE",y=i({status:null,count:0});e.default=function(t){var e=t.hostname;return p[h]=function(t,e,n,r){return t.reduce(function(t,a,s){return"queries"===s&&(t=t.set("queries",a.set(n,y.merge(a.get(n)).merge({hash:n,urls:u.createUrls(e)}).map(function(t,e){switch(e){case"count":return t+1;case"status":return t===c?d:t;default:return t}})).map(function(t,e){return e===n&&-1===[f,d].indexOf(t.get("status"))&&r(g,t),t.set("status",t.get("status")||f)}))),t},t)},p[g]=function(t,n,r){var a=n.get("urls").map(function(t){return u.fetchUrl(e,t)});Promise.all(a).then(function(t){var e=t.reduce(function(t,e){var n=e.success,r=e.msg;return n||(t.success=!1,t.msgList=t.msgList.push(r)),t},{success:!0,msgList:o([])});e.success?r(m,t,n):r(v,e.msgList,n)}).catch(function(t){r(v,[t],n)})},p[m]=function(t,e,n){return t.reduce(function(t,r,u){return"queries"===u&&(t=t.set("queries",r.map(function(t,r){var u=t;return r===n.get("hash")&&(u=u.merge({status:c,idList:e.reduce(function(t,e){return t.merge(e.idList)},i({}))})),u}))),"data"===u&&(t=t.set("data",e.reduce(function(t,e){return t.mergeDeep(e.data)},t.get("data")))),t},t)},p[v]=function(t,e,n){return t.reduce(function(t,r,u){return"queries"===u&&(t=t.set("queries",r.map(function(t,r){var u=t;return r===n.get("hash")&&(u=u.merge({status:l,msg:e})),u}))),t},t)},p[_]=function(t,e,n){return t.reduce(function(t,r,u){if("data"===u){var a=Date.now();t=t.setIn(["data",e,a],s.default.fromJS(n))}return t},t)},p},t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(2),a=r(u),s=n(11),i=r(s),o=n(10),c=r(o),f=n(8),d=r(f),l=n(12),p=r(l);e.default=a.default(i.default,c.default,d.default,p.default),t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var n=arguments[e];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(t[r]=n[r])}return t},a=n(1),s=r(a),i=function(t){return function(e,n,r,a){return React.createClass({displayName:"GyreJS-localHoC",getInitialState:function(){return{data:null}},componentWillMount:function(){this.unRegisterReducer=t(e,this.handleNewData)},shouldComponentUpdate:function(t,e){return this.state.status!==e.status?!0:e.data?!s.default.is(e.data,this.state.data):!0},componentWillUnmount:function(){this.unRegisterReducer()},handleNewData:function(t,e){this.setState({data:e,status:t})},render:function(){if(!this.state||!this.state.status)return!1;var t=void 0;switch(this.state.status){case"LOADING":t=r;break;case"ERROR":t=a;break;default:t=n}return t?React.createElement(t,u({},this.props,this.state)):!1}})}};e.default=i,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(1),a=r(u),s=n(3),i=a.default.Map,o=function(t,e,n,r,u){var a=u.NS,o=s.hashQueryObject(n),c=function(t){var e=t.getIn([a,"queries",o,"idList"]),n=t.getIn([a,"queries",o]);e?r(n.get("status"),e.reduce(function(e,n,r){var u=e,s=r.split("/").reduce(function(t,e,n){return n%2===0&&n&&t.push("children"),t.push(e),t},[]),i=r.split("/");return i=i[i.length-1],n.forEach(function(e){u=u.mergeDeepIn(s.concat(e),t.getIn([a,"data",i,e]))}),u},i({}))):r(n.get("status"))};return e("ADD_QUERY",n,o),t.addReducer(c)};e.default=o,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(1),a=r(u),s=a.default.Map;e.default=s({queries:s({}),data:s({})}),t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t,e,n,r){console.log(">> GyreJS-'"+t+"'-gyre: Applying action '"+e+"' with arguments: ",n),r()};e.default=n,t.exports=e.default},function(t,e){"use strict";e.__esModule=!0;var n=function(t,e,n,r,u){n.push(u),r()};e.default=n,t.exports=e.default},function(t,e,n){"use strict";function r(t){return t&&t.__esModule?t:{"default":t}}e.__esModule=!0;var u=n(1),a=r(u),s=a.default.Map,i=function(){var t=s({}),e=[],n=function(){return e.forEach(function(e){return e(t)})},r=function(t){return function(){return e=e.filter(function(e){return e!==t})}},u=function(e,r){return t.get(r)!==e&&(t=t.set(r,e),n()),t},a=function(n){return e.push(n),n(t),r(n)},i=function(){return t},o=function(t,e){return u(s.isMap(t)?t:s(t),e)},c=function(e,n,r){return u(n.apply(void 0,[t.get(e)].concat(r))||t.get(e),e),t};return{addReducer:a,getState:i,setState:o,updateState:c}};e.default=i,t.exports=e.default}])});
!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("Immutable")):"function"==typeof define&&define.amd?define(["Immutable"],t):"object"==typeof exports?exports.GyreJS=t(require("Immutable")):e.GyreJS=t(e.Immutable)}(this,function(e){return function(e){function t(n){if(r[n])return r[n].exports;var u=r[n]={exports:{},id:n,loaded:!1};return e[n].call(u.exports,u,u.exports,t),u.loaded=!0,u.exports}var r={};return t.m=e,t.c=r,t.p="",t(0)}([function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}t.__esModule=!0;var u=r(1),o=n(u),a=new Map,i=o.default(),f=function(e,t){a.has(e)||console.warn(">> GyreJS: Gyre factory '"+e+"' not registered.");var r=e+"-"+Date.now();return i.setState({data:{}},r),a.get(e)(i,Object.assign({},{NS:r},t))},c=function(e){return a.has(e)?a.delete(e)&&!0:(console.warn(">> GyreJS: Gyre factory '"+e+"' not registered."),!1)},s=function(e,t){a.set(e,t)};t.createGyre=f,t.destroyGyre=c,t.registerGyreFactory=s},function(e,t,r){"use strict";function n(e){return e&&e.__esModule?e:{"default":e}}t.__esModule=!0;var u=r(2),o=n(u),a=function(){var e=o.default.Map({}),t={},r=new Set,n=function(){r.forEach(function(r){return(t[r]||[]).forEach(function(t){return t("all"===r?e:e.get(r))})}),r.clear()},u=function(e){r.size||requestAnimationFrame(n),r.add("all").add(e)},a=function(e,r){return function(){return t[e]=t[e].filter(function(e){return e!==r})}},i=function(t,r){return e.get(r)!==t&&(e=e.set(r,t),u(r)),e},f=function(e){var r=arguments.length<=1||void 0===arguments[1]?"all":arguments[1];return t[r]||(t[r]=[]),t[r].push(e),u(r),a(r,e)},c=function(){return e},s=function(e,t){return i(o.default.Map.isMap(e)?e:o.default.Map(e),t)},d=function(t,r,n){return i(r.apply(void 0,[e.get(t)].concat(n))||e.get(t),t)};return{addFilter:f,getState:c,setState:s,updateState:d}};t.default=a,e.exports=t.default},function(t,r){t.exports=e}])});

@@ -18,3 +18,3 @@ /**

/**
* dispatch()
* dispatch() Dispatch a registered action by ID.
*

@@ -37,6 +37,6 @@ * @param {String} id Id

}, function () {
return actionMap.get(id)(args);
return actionMap.get(id)(args.push(dispatch) && args);
})();
} else {
console.warn(">> GyreJS-'" + options.NS + "'-gyre: Unregistered action dispatched: '" + id + "' with arguments:", args, ". (This is a no-op)");
console.warn(">> GyreJS-'" + options.NS + "'-gyre: Unregistered action dispatched: '" + id + "' with arguments:", args, ". (This is a no-op)"); // eslint-disable-line no-console
}

@@ -46,3 +46,3 @@ };

/**
* addAction()
* addAction() Add a single action.
*

@@ -55,4 +55,4 @@ * @param {String} id Action ID.

var addAction = function addAction(id, func) {
return actionMap.set(id, function (args) {
store.updateState(options.NS, func, args);
actionMap.set(id, function (args) {
return store.updateState(options.NS, func, args);
});

@@ -62,3 +62,3 @@ };

/**
* addActions()
* addActions() Add multiple actions.
*

@@ -76,3 +76,3 @@ * @param {Object} actions Key/func object of actions.

/**
* use()
* use() Apply middleware.
*

@@ -79,0 +79,0 @@ * @param {Function} mware Middleware function.

@@ -14,11 +14,14 @@ "use strict";

*
* @param {Function} Reducer Reducer factory.
* @param {Function} ReactHoC React HoC factory.
* @param {Function} [actions] Default actions object.
* @param {Function} filters Reducer factory.
* @param {Immutable.Map|Object} [state] Initial state object.
* @returns {Function} Gyre factory function.
*/
var gyreFactory = function gyreFactory(Reducer, ReactHoC) {
var actions = arguments.length <= 2 || arguments[2] === undefined ? function () {} : arguments[2];
var state = arguments.length <= 3 || arguments[3] === undefined ? {} : arguments[3];
var gyreFactory = function gyreFactory(_ref) {
var _ref$actions = _ref.actions;
var actions = _ref$actions === undefined ? function () {} : _ref$actions;
var _ref$filters = _ref.filters;
var filters = _ref$filters === undefined ? {} : _ref$filters;
var _ref$state = _ref.state;
var state = _ref$state === undefined ? {} : _ref$state;
return function (store, options) {

@@ -30,10 +33,18 @@ // Private variables

/**
* getReducer() Getter for reducer
* getFilter() Getter for reducer
*
* @param {String} matcher Matcher
* @param {*} id Id
* @param {Function} cb Callback
* @returns {Function} Reducer factory
* @param {Array} [args] Remaining arguments.
* @returns {Function|void} Filter factory
*/
var getReducer = function getReducer(matcher, cb) {
return Reducer(store, AH.dispatch, matcher, cb, options);
var getFilter = function getFilter(id, cb) {
for (var _len = arguments.length, args = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {
args[_key - 2] = arguments[_key];
}
if (Object.prototype.hasOwnProperty.call(filters, id)) {
return filters[id].apply(filters, [store, AH.dispatch, cb, options].concat(args));
}
console.warn(">> GyreJS-'" + options.NS + "'-gyre: Unregistered filter requested: '" + id + "' with arguments:", args, "."); // eslint-disable-line no-console
};

@@ -57,13 +68,5 @@

var getState = function getState() {
return store.getState.get(options.NS);
return store.getState().get(options.NS);
};
/**
* reactHoC()
*
* @param {Object} react React instance.
* @return {Function} HoC factory function.
*/
var reactHoC = ReactHoC(getReducer);
// Setup

@@ -79,4 +82,4 @@ AH.addActions(actions(options));

getState: getState,
getReducer: getReducer,
reactHoC: reactHoC,
getFilter: getFilter,
nameSpace: options.NS,
setState: setState,

@@ -83,0 +86,0 @@ use: AH.use

@@ -12,25 +12,2 @@ // Import sub libraries

var _gyresLocalFactory = require("./gyres/local/factory");
var _gyresLocalFactory2 = _interopRequireDefault(_gyresLocalFactory);
var _gyresSmartRestFactory = require("./gyres/smartRest/factory");
var _gyresSmartRestFactory2 = _interopRequireDefault(_gyresSmartRestFactory);
// Middleware
var _middleWareDispatchLogger = require("./middleWare/dispatchLogger");
var _middleWareDispatchLogger2 = _interopRequireDefault(_middleWareDispatchLogger);
var _middleWareInjectDispatch = require("./middleWare/injectDispatch");
var _middleWareInjectDispatch2 = _interopRequireDefault(_middleWareInjectDispatch);
var middleWare = {
dispatchLogger: _middleWareDispatchLogger2["default"],
injectDispatch: _middleWareInjectDispatch2["default"]
};
// Private variables

@@ -50,9 +27,27 @@ var gyres = new Map();

if (!gyres.has(id)) {
console.warn(">> GyreJS: Gyre factory '" + id + "' not registered.");
console.warn(">> GyreJS: Gyre factory '" + id + "' not registered."); // eslint-disable-line no-console
}
var newNameSpace = id + "-" + Date.now();
store.setState({
data: {}
}, newNameSpace);
return gyres.get(id)(store, Object.assign({}, { NS: id + "-" + Date.now() }, options));
return gyres.get(id)(store, Object.assign({}, { NS: newNameSpace }, options));
};
/**
* destroyGyre()
*
* @param {String} id Id of a registered gyre factory.
* @returns {Object|boolean} Gyre instance.
*/
var destroyGyre = function destroyGyre(id) {
if (!gyres.has(id)) {
console.warn(">> GyreJS: Gyre factory '" + id + "' not registered."); // eslint-disable-line no-console
return false;
}
return gyres["delete"](id) && true;
};
/**
* registerGyreFactory()

@@ -68,8 +63,4 @@ *

// Register standard gyres
registerGyreFactory("local", _gyresLocalFactory2["default"]);
registerGyreFactory("smartRest", _gyresSmartRestFactory2["default"]);
exports.createGyre = createGyre;
exports.middleWare = middleWare;
exports.destroyGyre = destroyGyre;
exports.registerGyreFactory = registerGyreFactory;

@@ -11,13 +11,12 @@ "use strict";

var IMap = _immutable2["default"].Map;
/**
* Store() Factory function
*
* @returns {{addReducer: Function, getState: Function, setState: Function, updateState: Function}} API
* @returns {{addFilter: Function, getState: Function, setState: Function, updateState: Function}} API
*/
var store = function store() {
// Private variables
var state = IMap({});
var reducerList = [];
var state = _immutable2["default"].Map({});
var filterList = {};
var updateQueue = new Set();

@@ -31,18 +30,35 @@ // Private functions

var sendUpdate = function sendUpdate() {
return reducerList.forEach(function (reducer) {
return reducer(state);
updateQueue.forEach(function (ns) {
return (filterList[ns] || []).forEach(function (filter) {
return filter(ns === "all" ? state : state.get(ns));
});
});
updateQueue.clear();
};
/**
* removeReducer() - Factory
* Remove reducer from the store
* Request to issue update to filters of a given namespace.
*
* @param {Function} cb Reducer callback.
* @param {String} ns Namespace.
* @returns {void}
*/
var requestUpdate = function requestUpdate(ns) {
if (!updateQueue.size) {
requestAnimationFrame(sendUpdate);
}
updateQueue.add("all").add(ns);
};
/**
* removeFilter() - Factory
* Remove filter from the store
*
* @param {String} ns Namespace.
* @param {Function} cb Filter callback.
* @returns {Function} removal function.
*/
var removeReducer = function removeReducer(cb) {
var removeFilter = function removeFilter(ns, cb) {
return function () {
return reducerList = reducerList.filter(function (reducer) {
return reducer !== cb;
return filterList[ns] = filterList[ns].filter(function (filter) {
return filter !== cb;
});

@@ -57,9 +73,9 @@ };

* @param {Immutable.Map} newState New state.
* @param {String} nameSpace Namespace.
* @param {String} ns Namespace.
* @returns {Immutable.Map} state Current state
*/
var setNewState = function setNewState(newState, nameSpace) {
if (state.get(nameSpace) !== newState) {
state = state.set(nameSpace, newState);
sendUpdate();
var setNewState = function setNewState(newState, ns) {
if (state.get(ns) !== newState) {
state = state.set(ns, newState);
requestUpdate(ns);
}

@@ -71,16 +87,23 @@ return state;

/**
* Register a faucet with the store and send initial data.
* addFilter() Register a faucet with the store and send initial data.
*
* @param {Function} cb callback.
* @param {String} [ns] Namespace.
* @returns {Function} un-register function.
*/
var addReducer = function addReducer(cb) {
var addFilter = function addFilter(cb) {
var ns = arguments.length <= 1 || arguments[1] === undefined ? "all" : arguments[1];
if (!filterList[ns]) {
filterList[ns] = [];
}
// Save to local register
reducerList.push(cb);
filterList[ns].push(cb);
// Send state to reducer
cb(state);
// Request update to make sure the new filter gets data asap.
requestUpdate(ns);
// Return remover
return removeReducer(cb);
return removeFilter(ns, cb);
};

@@ -100,8 +123,8 @@

*
* @param {Immutable.Map|Object} nState State.
* @param {String} [nameSpace] Namespace.
* @param {Immutable.Map|Object} newState State.
* @param {String} ns Namespace.
* @returns {Immutable.Map} New state.
*/
var setState = function setState(nState, nameSpace) {
return setNewState(IMap.isMap(nState) ? nState : IMap(nState), nameSpace);
var setState = function setState(newState, ns) {
return setNewState(_immutable2["default"].Map.isMap(newState) ? newState : _immutable2["default"].Map(newState), ns);
};

@@ -113,3 +136,3 @@

*
* @param {String} nameSpace Namespace.
* @param {String} ns Namespace.
* @param {Function} func Reducer function.

@@ -119,5 +142,4 @@ * @param {Array} args Reducer function arguments.

*/
var updateState = function updateState(nameSpace, func, args) {
setNewState(func.apply(undefined, [state.get(nameSpace)].concat(args)) || state.get(nameSpace), nameSpace);
return state;
var updateState = function updateState(ns, func, args) {
return setNewState(func.apply(undefined, [state.get(ns)].concat(args)) || state.get(ns), ns);
};

@@ -127,3 +149,3 @@

return {
addReducer: addReducer,
addFilter: addFilter,
getState: getState,

@@ -130,0 +152,0 @@ setState: setState,

{
"name": "gyrejs",
"version": "0.0.14",
"version": "0.0.15",
"description": "Experimental data fetching and state library geared towards ReactJS",

@@ -50,2 +50,3 @@ "main": "lib/gyrejs-min.js",

"isomorphic-fetch": "^2.1.1",
"raf": "^3.1.0",
"react": "0.14.0",

@@ -52,0 +53,0 @@ "react-dom": "^0.14.0",

# GyreJS
[![Build Status](https://travis-ci.org/WRidder/gyrejs.svg)](https://travis-ci.org/WRidder/gyrejs)
Data fetching and state library geared towards ReactJS. This is an experimental project.
Data fetching and state library. This is an experimental project.

@@ -31,5 +31,3 @@ ## Vision

- Minimal surface API
- HoC for ReactJS (data wrapper)
- Isomorphic
- Snapshots / rollback
- Immutable data

@@ -36,0 +34,0 @@

@@ -15,3 +15,3 @@ /**

/**
* dispatch()
* dispatch() Dispatch a registered action by ID.
*

@@ -27,7 +27,6 @@ * @param {String} id Id

() => next(options.NS, id, args, prev, dispatch),
() => actionMap.get(id)(args))();
() => actionMap.get(id)(args.push(dispatch) && args))();
}
else {
console.warn(`>> GyreJS-'${options.NS}'-gyre: Unregistered action dispatched: '${id}' with arguments:`,
args, ". (This is a no-op)");
console.warn(`>> GyreJS-'${options.NS}'-gyre: Unregistered action dispatched: '${id}' with arguments:`, args, ". (This is a no-op)"); // eslint-disable-line no-console
}

@@ -37,3 +36,3 @@ };

/**
* addAction()
* addAction() Add a single action.
*

@@ -45,9 +44,10 @@ * @param {String} id Action ID.

*/
const addAction = (id, func) =>
actionMap.set(id, (args) => {
store.updateState(options.NS, func, args);
});
const addAction = (id, func) => {
actionMap.set(id, (args) =>
store.updateState(options.NS, func, args)
);
};
/**
* addActions()
* addActions() Add multiple actions.
*

@@ -65,3 +65,3 @@ * @param {Object} actions Key/func object of actions.

/**
* use()
* use() Apply middleware.
*

@@ -68,0 +68,0 @@ * @param {Function} mware Middleware function.

@@ -6,9 +6,8 @@ import ActionHandler from "./actionHandler";

*
* @param {Function} Reducer Reducer factory.
* @param {Function} ReactHoC React HoC factory.
* @param {Function} [actions] Default actions object.
* @param {Function} filters Reducer factory.
* @param {Immutable.Map|Object} [state] Initial state object.
* @returns {Function} Gyre factory function.
*/
const gyreFactory = (Reducer, ReactHoC, actions = () => {}, state = {}) =>
const gyreFactory = ({actions = () => {}, filters = {}, state = {}}) =>
(store, options) => {

@@ -20,11 +19,17 @@ // Private variables

/**
* getReducer() Getter for reducer
* getFilter() Getter for reducer
*
* @param {String} matcher Matcher
* @param {*} id Id
* @param {Function} cb Callback
* @returns {Function} Reducer factory
* @param {Array} [args] Remaining arguments.
* @returns {Function|void} Filter factory
*/
const getReducer = (matcher, cb) =>
Reducer(store, AH.dispatch, matcher, cb, options);
const getFilter = (id, cb, ...args) => {
if (Object.prototype.hasOwnProperty.call(filters, id)) {
return filters[id](store, AH.dispatch, cb, options, ...args);
}
console.warn(`>> GyreJS-'${options.NS}'-gyre: Unregistered filter requested: '${id}' with arguments:`, args, "."); // eslint-disable-line no-console
};
/**

@@ -45,12 +50,4 @@ * setState()

const getState = () =>
store.getState.get(options.NS);
store.getState().get(options.NS);
/**
* reactHoC()
*
* @param {Object} react React instance.
* @return {Function} HoC factory function.
*/
const reactHoC = ReactHoC(getReducer);
// Setup

@@ -66,4 +63,4 @@ AH.addActions(actions(options));

getState,
getReducer,
reactHoC,
getFilter,
nameSpace: options.NS,
setState,

@@ -70,0 +67,0 @@ use: AH.use

// Import sub libraries
import Store from "./store";
import LocalGyre from "./gyres/local/factory";
import SmartRestGyre from "./gyres/smartRest/factory";
// Middleware
import dispatchLogger from "./middleWare/dispatchLogger";
import injectDispatch from "./middleWare/injectDispatch";
const middleWare = {
dispatchLogger,
injectDispatch
};
// Private variables

@@ -28,9 +18,27 @@ const gyres = new Map();

if (!gyres.has(id)) {
console.warn(`>> GyreJS: Gyre factory '${id}' not registered.`);
console.warn(`>> GyreJS: Gyre factory '${id}' not registered.`); // eslint-disable-line no-console
}
const newNameSpace = `${id}-${Date.now()}`;
store.setState({
data: {}
}, newNameSpace);
return gyres.get(id)(store, Object.assign({}, {NS: `${id}-${Date.now()}`}, options));
return gyres.get(id)(store, Object.assign({}, {NS: newNameSpace}, options));
};
/**
* destroyGyre()
*
* @param {String} id Id of a registered gyre factory.
* @returns {Object|boolean} Gyre instance.
*/
const destroyGyre = (id) => {
if (!gyres.has(id)) {
console.warn(`>> GyreJS: Gyre factory '${id}' not registered.`); // eslint-disable-line no-console
return false;
}
return gyres.delete(id) && true;
};
/**
* registerGyreFactory()

@@ -46,10 +54,6 @@ *

// Register standard gyres
registerGyreFactory("local", LocalGyre);
registerGyreFactory("smartRest", SmartRestGyre);
export {
createGyre,
middleWare,
destroyGyre,
registerGyreFactory
};
import Immutable from "immutable";
const IMap = Immutable.Map;

@@ -7,8 +6,9 @@ /**

*
* @returns {{addReducer: Function, getState: Function, setState: Function, updateState: Function}} API
* @returns {{addFilter: Function, getState: Function, setState: Function, updateState: Function}} API
*/
const store = () => {
// Private variables
let state = IMap({});
let reducerList = [];
let state = Immutable.Map({});
const filterList = {};
const updateQueue = new Set();

@@ -21,15 +21,35 @@ // Private functions

*/
const sendUpdate = () =>
reducerList.forEach(reducer => reducer(state));
const sendUpdate = () => {
updateQueue.forEach(ns =>
(filterList[ns] || []).forEach(filter =>
filter(ns === "all" ? state : state.get(ns)))
);
updateQueue.clear();
};
/**
* removeReducer() - Factory
* Remove reducer from the store
* Request to issue update to filters of a given namespace.
*
* @param {Function} cb Reducer callback.
* @param {String} ns Namespace.
* @returns {void}
*/
const requestUpdate = (ns) => {
if (!updateQueue.size) {
requestAnimationFrame(sendUpdate);
}
updateQueue.add("all").add(ns);
};
/**
* removeFilter() - Factory
* Remove filter from the store
*
* @param {String} ns Namespace.
* @param {Function} cb Filter callback.
* @returns {Function} removal function.
*/
const removeReducer = (cb) =>
const removeFilter = (ns, cb) =>
() =>
reducerList = reducerList.filter(reducer => reducer !== cb);
filterList[ns] = filterList[ns]
.filter(filter => filter !== cb);

@@ -41,9 +61,9 @@ /**

* @param {Immutable.Map} newState New state.
* @param {String} nameSpace Namespace.
* @param {String} ns Namespace.
* @returns {Immutable.Map} state Current state
*/
const setNewState = (newState, nameSpace) => {
if (state.get(nameSpace) !== newState) {
state = state.set(nameSpace, newState);
sendUpdate();
const setNewState = (newState, ns) => {
if (state.get(ns) !== newState) {
state = state.set(ns, newState);
requestUpdate(ns);
}

@@ -55,16 +75,21 @@ return state;

/**
* Register a faucet with the store and send initial data.
* addFilter() Register a faucet with the store and send initial data.
*
* @param {Function} cb callback.
* @param {String} [ns] Namespace.
* @returns {Function} un-register function.
*/
const addReducer = (cb) => {
const addFilter = (cb, ns = "all") => {
if (!filterList[ns]) {
filterList[ns] = [];
}
// Save to local register
reducerList.push(cb);
filterList[ns].push(cb);
// Send state to reducer
cb(state);
// Request update to make sure the new filter gets data asap.
requestUpdate(ns);
// Return remover
return removeReducer(cb);
return removeFilter(ns, cb);
};

@@ -82,8 +107,11 @@

*
* @param {Immutable.Map|Object} nState State.
* @param {String} [nameSpace] Namespace.
* @param {Immutable.Map|Object} newState State.
* @param {String} ns Namespace.
* @returns {Immutable.Map} New state.
*/
const setState = (nState, nameSpace) =>
setNewState(IMap.isMap(nState) ? nState : IMap(nState), nameSpace);
const setState = (newState, ns) =>
setNewState(Immutable.Map.isMap(newState) ?
newState :
Immutable.Map(newState),
ns);

@@ -94,3 +122,3 @@ /**

*
* @param {String} nameSpace Namespace.
* @param {String} ns Namespace.
* @param {Function} func Reducer function.

@@ -100,10 +128,8 @@ * @param {Array} args Reducer function arguments.

*/
const updateState = (nameSpace, func, args) => {
setNewState(func(...[state.get(nameSpace)].concat(args)) || state.get(nameSpace), nameSpace);
return state;
};
const updateState = (ns, func, args) =>
setNewState(func(...[state.get(ns)].concat(args)) || state.get(ns), ns);
// API
return {
addReducer,
addFilter,
getState,

@@ -110,0 +136,0 @@ setState,

Sorry, the diff of this file is not supported yet