Last active
November 2, 2016 10:35
-
-
Save danibram/0db1931718507881e49859785743f6d0 to your computer and use it in GitHub Desktop.
An AMD reselect version [https://github.com/reactjs/reselect]
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
define(['exports'], function (exports) { | |
'use strict'; | |
Object.defineProperty(exports, "__esModule", { | |
value: true | |
}); | |
exports.defaultMemoize = defaultMemoize; | |
exports.createSelectorCreator = createSelectorCreator; | |
exports.createStructuredSelector = createStructuredSelector; | |
function _toConsumableArray(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); | |
} | |
} | |
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { | |
return typeof obj; | |
} : function (obj) { | |
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; | |
}; | |
function defaultEqualityCheck(a, b) { | |
return a === b; | |
} | |
function defaultMemoize(func) { | |
var equalityCheck = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : defaultEqualityCheck; | |
var lastArgs = null; | |
var lastResult = null; | |
return function () { | |
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) { | |
args[_key] = arguments[_key]; | |
} | |
if (lastArgs === null || lastArgs.length !== args.length || !args.every(function (value, index) { | |
return equalityCheck(value, lastArgs[index]); | |
})) { | |
lastResult = func.apply(undefined, args); | |
} | |
lastArgs = args; | |
return lastResult; | |
}; | |
} | |
function getDependencies(funcs) { | |
var dependencies = Array.isArray(funcs[0]) ? funcs[0] : funcs; | |
if (!dependencies.every(function (dep) { | |
return typeof dep === 'function'; | |
})) { | |
var dependencyTypes = dependencies.map(function (dep) { | |
return typeof dep === 'undefined' ? 'undefined' : _typeof(dep); | |
}).join(', '); | |
throw new Error('Selector creators expect all input-selectors to be functions, ' + ('instead received the following types: [' + dependencyTypes + ']')); | |
} | |
return dependencies; | |
} | |
function createSelectorCreator(memoize) { | |
for (var _len2 = arguments.length, memoizeOptions = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { | |
memoizeOptions[_key2 - 1] = arguments[_key2]; | |
} | |
return function () { | |
for (var _len3 = arguments.length, funcs = Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { | |
funcs[_key3] = arguments[_key3]; | |
} | |
var recomputations = 0; | |
var resultFunc = funcs.pop(); | |
var dependencies = getDependencies(funcs); | |
var memoizedResultFunc = memoize.apply(undefined, [function () { | |
recomputations++; | |
return resultFunc.apply(undefined, arguments); | |
}].concat(memoizeOptions)); | |
var selector = function selector(state, props) { | |
for (var _len4 = arguments.length, args = Array(_len4 > 2 ? _len4 - 2 : 0), _key4 = 2; _key4 < _len4; _key4++) { | |
args[_key4 - 2] = arguments[_key4]; | |
} | |
var params = dependencies.map(function (dependency) { | |
return dependency.apply(undefined, [state, props].concat(args)); | |
}); | |
return memoizedResultFunc.apply(undefined, _toConsumableArray(params)); | |
}; | |
selector.resultFunc = resultFunc; | |
selector.recomputations = function () { | |
return recomputations; | |
}; | |
selector.resetRecomputations = function () { | |
return recomputations = 0; | |
}; | |
return selector; | |
}; | |
} | |
var createSelector = exports.createSelector = createSelectorCreator(defaultMemoize); | |
function createStructuredSelector(selectors) { | |
var selectorCreator = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : createSelector; | |
if ((typeof selectors === 'undefined' ? 'undefined' : _typeof(selectors)) !== 'object') { | |
throw new Error('createStructuredSelector expects first argument to be an object ' + ('where each property is a selector, instead received a ' + (typeof selectors === 'undefined' ? 'undefined' : _typeof(selectors)))); | |
} | |
var objectKeys = Object.keys(selectors); | |
return selectorCreator(objectKeys.map(function (key) { | |
return selectors[key]; | |
}), function () { | |
for (var _len5 = arguments.length, values = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) { | |
values[_key5] = arguments[_key5]; | |
} | |
return values.reduce(function (composition, value, index) { | |
composition[objectKeys[index]] = value; | |
return composition; | |
}, {}); | |
}); | |
} | |
}); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment