todomvc
Version:
> Helping you select an MV\* framework
67 lines (52 loc) • 1.98 kB
JavaScript
/** MIT License (c) copyright B Cavalier & J Hann */
(function(define) {
define(function (require) {
"use strict";
var hashJoin, createPropertiesKey, defaultProjection;
hashJoin = require('../hashJoin');
createPropertiesKey = require('../propertiesKey');
defaultProjection = require('../../projection/inherit');
/**
* Creates a join strategy that will perform a left outer hash join
* using the supplied options, using supplied key functions to generate
* hash keys for correlating items.
* @param options.leftKeyFunc {Function} function to create a join key
* for items on the left
* @param [options.rightKeyFunc] {Function} function to create a join key
* for items on the right. If not provided, options.leftKeyFunc will be used
* @param [options.projection] {Function} function to project joined left
* and right values into a final join result
* @param [options.multiValue] {Boolean} if truthy, allows the projection to
* act on the complete set of correlated right-hand items, rather than on each
* distinct left-right pair.
*/
return function createLeftOuterJoinStrategy(options) {
var leftKeyFunc, rightKeyFunc, projection, multiValue;
if(!(options && options.leftKey)) {
throw new Error('options.leftKeyFunc must be provided')
}
leftKeyFunc = options.leftKey;
if(typeof leftKeyFunc != 'function') {
leftKeyFunc = createPropertiesKey(leftKeyFunc);
}
rightKeyFunc = options.rightKey || leftKeyFunc;
if(typeof rightKeyFunc != 'function') {
rightKeyFunc = createPropertiesKey(rightKeyFunc);
}
projection = options.projection || defaultProjection;
multiValue = options.multiValue;
// Return the join strategy
return function outerHashJoin(left, right) {
return hashJoin.leftOuterJoin(
left, leftKeyFunc,
right, rightKeyFunc,
projection, multiValue
);
}
};
});
})(
typeof define == 'function'
? define
: function(factory) { module.exports = factory(require); }
);