@boostmyschool/isomorphic-relay-router
Version:
Adds server side rendering support to react-router-relay
80 lines (54 loc) • 2.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _map = require('babel-runtime/core-js/map');
var _map2 = _interopRequireDefault(_map);
var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
var _entries = require('babel-runtime/core-js/object/entries');
var _entries2 = _interopRequireDefault(_entries);
var _stringify = require('babel-runtime/core-js/json/stringify');
var _stringify2 = _interopRequireDefault(_stringify);
var _weakMap = require('babel-runtime/core-js/weak-map');
var _weakMap2 = _interopRequireDefault(_weakMap);
exports.default = getAggregateContainer;
var _AggregateContainer = require('./AggregateContainer');
var _AggregateContainer2 = _interopRequireDefault(_AggregateContainer);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var containerIds = new _weakMap2.default();
var nextContainerId = 0;
function getContainerId(container) {
var id = containerIds.get(container);
if (id === void 0) {
id = nextContainerId++;
containerIds.set(container, id);
}
return id;
}
function getCacheKey(fragmentSpecs) {
return (0, _stringify2.default)((0, _entries2.default)(fragmentSpecs).map(function (_ref) {
var _ref2 = (0, _slicedToArray3.default)(_ref, 2),
fragmentName = _ref2[0],
_ref2$ = _ref2[1],
component = _ref2$.component,
queryName = _ref2$.queryName;
return [fragmentName, getContainerId(component), queryName];
}).sort(function (_ref3, _ref4) {
var _ref6 = (0, _slicedToArray3.default)(_ref3, 1),
a = _ref6[0];
var _ref5 = (0, _slicedToArray3.default)(_ref4, 1),
b = _ref5[0];
return a.localeCompare(b);
}));
}
var containerCache = new _map2.default();
function getAggregateContainer(fragmentSpecs) {
var cacheKey = getCacheKey(fragmentSpecs);
var container = containerCache.get(cacheKey);
if (!container) {
container = new _AggregateContainer2.default(fragmentSpecs);
containerCache.set(cacheKey, container);
}
return container;
}