Remove remaining rest helper use.

This commit is contained in:
John-David Dalton
2017-01-09 15:36:35 -08:00
parent 648722f1a6
commit aacfefc752
25 changed files with 53 additions and 165 deletions

View File

@@ -1,14 +0,0 @@
import baseRest from './_baseRest.js';
/**
* A `baseRest` alias which can be replaced with `identity` by module
* replacement plugins.
*
* @private
* @type {Function}
* @param {Function} func The function to apply a rest parameter to.
* @returns {Function} Returns the new function.
*/
const castRest = baseRest;
export default castRest;

View File

@@ -1,4 +1,3 @@
import baseRest from './_baseRest.js';
import isIterateeCall from './_isIterateeCall.js'; import isIterateeCall from './_isIterateeCall.js';
/** /**
@@ -9,7 +8,7 @@ import isIterateeCall from './_isIterateeCall.js';
* @returns {Function} Returns the new assigner function. * @returns {Function} Returns the new assigner function.
*/ */
function createAssigner(assigner) { function createAssigner(assigner) {
return baseRest((object, sources) => { return (object, ...sources) => {
let index = -1; let index = -1;
let length = sources.length; let length = sources.length;
let customizer = length > 1 ? sources[length - 1] : undefined; let customizer = length > 1 ? sources[length - 1] : undefined;
@@ -31,7 +30,7 @@ function createAssigner(assigner) {
} }
} }
return object; return object;
}); };
} }
export default createAssigner; export default createAssigner;

View File

@@ -1,5 +1,4 @@
import LodashWrapper from './_LodashWrapper.js'; import LodashWrapper from './_LodashWrapper.js';
import flatRest from './_flatRest.js';
import getData from './_getData.js'; import getData from './_getData.js';
import getFuncName from './_getFuncName.js'; import getFuncName from './_getFuncName.js';
import isArray from './isArray.js'; import isArray from './isArray.js';
@@ -22,7 +21,7 @@ const WRAP_REARG_FLAG = 256;
* @returns {Function} Returns the new flow function. * @returns {Function} Returns the new flow function.
*/ */
function createFlow(fromRight) { function createFlow(fromRight) {
return flatRest(funcs => { return (...funcs) => {
const length = funcs.length; const length = funcs.length;
const prereq = LodashWrapper.prototype.thru; const prereq = LodashWrapper.prototype.thru;
@@ -74,7 +73,7 @@ function createFlow(fromRight) {
} }
return result; return result;
}; };
}); };
} }
export default createFlow; export default createFlow;

View File

@@ -1,9 +1,7 @@
import apply from './_apply.js'; import apply from './_apply.js';
import arrayMap from './_arrayMap.js'; import arrayMap from './_arrayMap.js';
import baseIteratee from './_baseIteratee.js'; import baseIteratee from './_baseIteratee.js';
import baseRest from './_baseRest.js';
import baseUnary from './_baseUnary.js'; import baseUnary from './_baseUnary.js';
import flatRest from './_flatRest.js';
/** /**
* Creates a function like `_.over`. * Creates a function like `_.over`.
@@ -13,13 +11,13 @@ import flatRest from './_flatRest.js';
* @returns {Function} Returns the new over function. * @returns {Function} Returns the new over function.
*/ */
function createOver(arrayFunc) { function createOver(arrayFunc) {
return flatRest(iteratees => { return (...iteratees) => {
iteratees = arrayMap(iteratees, baseUnary(baseIteratee)); iteratees = arrayMap(iteratees, baseUnary(baseIteratee));
return baseRest(function(args) { return (...args) => {
const thisArg = this; const thisArg = this;
return arrayFunc(iteratees, iteratee => apply(iteratee, thisArg, args)); return arrayFunc(iteratees, iteratee => apply(iteratee, thisArg, args));
}); };
}); };
} }
export default createOver; export default createOver;

View File

@@ -1,16 +0,0 @@
import flatten from './flatten.js';
import overRest from './_overRest.js';
import setToString from './_setToString.js';
/**
* A specialized version of `baseRest` which flattens the rest array.
*
* @private
* @param {Function} func The function to apply a rest parameter to.
* @returns {Function} Returns the new function.
*/
function flatRest(func) {
return setToString(overRest(func, undefined, flatten), `${ func }`);
}
export default flatRest;

View File

@@ -1,36 +0,0 @@
import apply from './_apply.js';
/* Built-in method references for those with the same name as other `lodash` methods. */
const nativeMax = Math.max;
/**
* A specialized version of `baseRest` which transforms the rest array.
*
* @private
* @param {Function} func The function to apply a rest parameter to.
* @param {number} [start=func.length-1] The start position of the rest parameter.
* @param {Function} transform The rest array transform.
* @returns {Function} Returns the new function.
*/
function overRest(func, start, transform) {
start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
return function() {
const args = arguments;
let index = -1;
const length = nativeMax(args.length - start, 0);
const array = Array(length);
while (++index < length) {
array[index] = args[start + index];
}
index = -1;
const otherArgs = Array(start + 1);
while (++index < start) {
otherArgs[index] = args[index];
}
otherArgs[start] = transform(array);
return apply(func, this, otherArgs);
};
}
export default overRest;

5
at.js
View File

@@ -1,5 +1,4 @@
import baseAt from './_baseAt.js'; import baseAt from './_baseAt.js';
import flatRest from './_flatRest.js';
/** /**
* Creates an array of values corresponding to `paths` of `object`. * Creates an array of values corresponding to `paths` of `object`.
@@ -18,6 +17,8 @@ import flatRest from './_flatRest.js';
* _.at(object, ['a[0].b.c', 'a[1]']); * _.at(object, ['a[0].b.c', 'a[1]']);
* // => [3, 4] * // => [3, 4]
*/ */
const at = flatRest(baseAt); function at(...paths) {
return baseAt(paths);
}
export default at; export default at;

View File

@@ -1,5 +1,4 @@
import apply from './_apply.js'; import apply from './_apply.js';
import baseRest from './_baseRest.js';
import isError from './isError.js'; import isError from './isError.js';
/** /**
@@ -24,12 +23,12 @@ import isError from './isError.js';
* elements = []; * elements = [];
* } * }
*/ */
const attempt = baseRest((func, args) => { function attempt(func, ...args) {
try { try {
return apply(func, undefined, args); return apply(func, undefined, args);
} catch (e) { } catch (e) {
return isError(e) ? e : new Error(e); return isError(e) ? e : new Error(e);
} }
}); }
export default attempt; export default attempt;

View File

@@ -1,4 +1,3 @@
import baseRest from './_baseRest.js';
import createWrap from './_createWrap.js'; import createWrap from './_createWrap.js';
import getHolder from './_getHolder.js'; import getHolder from './_getHolder.js';
import replaceHolders from './_replaceHolders.js'; import replaceHolders from './_replaceHolders.js';
@@ -42,7 +41,7 @@ const WRAP_PARTIAL_FLAG = 32;
* bound('hi'); * bound('hi');
* // => 'hi fred!' * // => 'hi fred!'
*/ */
const bind = baseRest((func, thisArg, partials) => { function bind(func, thisArg, ...partials) {
let holders; let holders;
let bitmask = WRAP_BIND_FLAG; let bitmask = WRAP_BIND_FLAG;
if (partials.length) { if (partials.length) {
@@ -50,7 +49,7 @@ const bind = baseRest((func, thisArg, partials) => {
bitmask |= WRAP_PARTIAL_FLAG; bitmask |= WRAP_PARTIAL_FLAG;
} }
return createWrap(func, bitmask, thisArg, partials, holders); return createWrap(func, bitmask, thisArg, partials, holders);
}); }
// Assign default placeholders. // Assign default placeholders.
bind.placeholder = {}; bind.placeholder = {};

View File

@@ -1,7 +1,6 @@
import arrayEach from './_arrayEach.js'; import arrayEach from './_arrayEach.js';
import baseAssignValue from './_baseAssignValue.js'; import baseAssignValue from './_baseAssignValue.js';
import bind from './bind.js'; import bind from './bind.js';
import flatRest from './_flatRest.js';
import toKey from './_toKey.js'; import toKey from './_toKey.js';
/** /**
@@ -30,12 +29,12 @@ import toKey from './_toKey.js';
* jQuery(element).on('click', view.click); * jQuery(element).on('click', view.click);
* // => Logs 'clicked docs' when clicked. * // => Logs 'clicked docs' when clicked.
*/ */
const bindAll = flatRest((object, methodNames) => { function bindAll(object, ...methodNames) {
arrayEach(methodNames, key => { arrayEach(methodNames, key => {
key = toKey(key); key = toKey(key);
baseAssignValue(object, key, bind(object[key], object)); baseAssignValue(object, key, bind(object[key], object));
}); });
return object; return object;
}); }
export default bindAll; export default bindAll;

View File

@@ -1,4 +1,3 @@
import baseRest from './_baseRest.js';
import createWrap from './_createWrap.js'; import createWrap from './_createWrap.js';
import getHolder from './_getHolder.js'; import getHolder from './_getHolder.js';
import replaceHolders from './_replaceHolders.js'; import replaceHolders from './_replaceHolders.js';
@@ -53,7 +52,7 @@ const WRAP_PARTIAL_FLAG = 32;
* bound('hi'); * bound('hi');
* // => 'hiya fred!' * // => 'hiya fred!'
*/ */
const bindKey = baseRest((object, key, partials) => { function bindKey(object, key, ...partials) {
let holders; let holders;
let bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG; let bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
if (partials.length) { if (partials.length) {
@@ -61,7 +60,7 @@ const bindKey = baseRest((object, key, partials) => {
bitmask |= WRAP_PARTIAL_FLAG; bitmask |= WRAP_PARTIAL_FLAG;
} }
return createWrap(key, bitmask, object, partials, holders); return createWrap(key, bitmask, object, partials, holders);
}); }
// Assign default placeholders. // Assign default placeholders.
bindKey.placeholder = {}; bindKey.placeholder = {};

View File

@@ -1,7 +1,6 @@
import apply from './_apply.js'; import apply from './_apply.js';
import arrayMap from './_arrayMap.js'; import arrayMap from './_arrayMap.js';
import baseIteratee from './_baseIteratee.js'; import baseIteratee from './_baseIteratee.js';
import baseRest from './_baseRest.js';
/** Error message constants. */ /** Error message constants. */
const FUNC_ERROR_TEXT = 'Expected a function'; const FUNC_ERROR_TEXT = 'Expected a function';
@@ -46,7 +45,7 @@ function cond(pairs) {
return [toIteratee(pair[0]), pair[1]]; return [toIteratee(pair[0]), pair[1]];
}); });
return baseRest(function(args) { return (...args) => {
let index = -1; let index = -1;
while (++index < length) { while (++index < length) {
const pair = pairs[index]; const pair = pairs[index];
@@ -54,7 +53,7 @@ function cond(pairs) {
return apply(pair[1], this, args); return apply(pair[1], this, args);
} }
} }
}); };
} }
export default cond; export default cond;

View File

@@ -1,6 +1,5 @@
import apply from './_apply.js'; import apply from './_apply.js';
import assignInWith from './assignInWith.js'; import assignInWith from './assignInWith.js';
import baseRest from './_baseRest.js';
import customDefaultsAssignIn from './_customDefaultsAssignIn.js'; import customDefaultsAssignIn from './_customDefaultsAssignIn.js';
/** /**
@@ -24,9 +23,9 @@ import customDefaultsAssignIn from './_customDefaultsAssignIn.js';
* _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
* // => { 'a': 1, 'b': 2 } * // => { 'a': 1, 'b': 2 }
*/ */
const defaults = baseRest(args => { function defaults(...args) {
args.push(undefined, customDefaultsAssignIn); args.push(undefined, customDefaultsAssignIn);
return apply(assignInWith, undefined, args); return apply(assignInWith, undefined, args);
}); }
export default defaults; export default defaults;

View File

@@ -1,5 +1,4 @@
import apply from './_apply.js'; import apply from './_apply.js';
import baseRest from './_baseRest.js';
import customDefaultsMerge from './_customDefaultsMerge.js'; import customDefaultsMerge from './_customDefaultsMerge.js';
import mergeWith from './mergeWith.js'; import mergeWith from './mergeWith.js';
@@ -22,9 +21,9 @@ import mergeWith from './mergeWith.js';
* _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
* // => { 'a': { 'b': 2, 'c': 3 } } * // => { 'a': { 'b': 2, 'c': 3 } }
*/ */
const defaultsDeep = baseRest(args => { function defaultsDeep(...args) {
args.push(undefined, customDefaultsMerge); args.push(undefined, customDefaultsMerge);
return apply(mergeWith, undefined, args); return apply(mergeWith, undefined, args);
}); }
export default defaultsDeep; export default defaultsDeep;

View File

@@ -1,5 +1,4 @@
import baseInvoke from './_baseInvoke.js'; import baseInvoke from './_baseInvoke.js';
import baseRest from './_baseRest.js';
/** /**
* Invokes the method at `path` of `object`. * Invokes the method at `path` of `object`.
@@ -19,6 +18,8 @@ import baseRest from './_baseRest.js';
* _.invoke(object, 'a[0].b.c.slice', 1, 3); * _.invoke(object, 'a[0].b.c.slice', 1, 3);
* // => [2, 3] * // => [2, 3]
*/ */
const invoke = baseRest(baseInvoke); function invoke(object, path, ...args) {
return baseInvoke(object, path, args);
}
export default invoke; export default invoke;

View File

@@ -1,5 +1,4 @@
import baseInvoke from './_baseInvoke.js'; import baseInvoke from './_baseInvoke.js';
import baseRest from './_baseRest.js';
/** /**
* Creates a function that invokes the method at `path` of a given object. * Creates a function that invokes the method at `path` of a given object.
@@ -25,6 +24,8 @@ import baseRest from './_baseRest.js';
* _.map(objects, _.method(['a', 'b'])); * _.map(objects, _.method(['a', 'b']));
* // => [2, 1] * // => [2, 1]
*/ */
const method = baseRest((path, args) => object => baseInvoke(object, path, args)); function method(path, ...args) {
return object => baseInvoke(object, path, args);
}
export default method; export default method;

View File

@@ -1,5 +1,4 @@
import baseInvoke from './_baseInvoke.js'; import baseInvoke from './_baseInvoke.js';
import baseRest from './_baseRest.js';
/** /**
* The opposite of `_.method`; this method creates a function that invokes * The opposite of `_.method`; this method creates a function that invokes
@@ -24,6 +23,8 @@ import baseRest from './_baseRest.js';
* _.map([['a', '2'], ['c', '0']], _.methodOf(object)); * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
* // => [2, 0] * // => [2, 0]
*/ */
const methodOf = baseRest((object, args) => path => baseInvoke(object, path, args)); function methodOf(object, ...args) {
return path => baseInvoke(object, path, args);
}
export default methodOf; export default methodOf;

View File

@@ -1,5 +1,4 @@
import baseNth from './_baseNth.js'; import baseNth from './_baseNth.js';
import baseRest from './_baseRest.js';
import toInteger from './toInteger.js'; import toInteger from './toInteger.js';
/** /**
@@ -24,7 +23,7 @@ import toInteger from './toInteger.js';
*/ */
function nthArg(n) { function nthArg(n) {
n = toInteger(n); n = toInteger(n);
return baseRest(args => baseNth(args, n)); return (...args) => baseNth(args, n);
} }
export default nthArg; export default nthArg;

View File

@@ -1,5 +1,4 @@
import basePick from './_basePick.js'; import basePick from './_basePick.js';
import flatRest from './_flatRest.js';
/** /**
* Creates an object composed of the picked `object` properties. * Creates an object composed of the picked `object` properties.
@@ -18,6 +17,8 @@ import flatRest from './_flatRest.js';
* _.pick(object, ['a', 'c']); * _.pick(object, ['a', 'c']);
* // => { 'a': 1, 'c': 3 } * // => { 'a': 1, 'c': 3 }
*/ */
const pick = flatRest((object, paths) => object == null ? {} : basePick(object, paths)); function pick(object, ...paths) {
return object == null ? {} : basePick(object, paths);
}
export default pick; export default pick;

View File

@@ -1,4 +1,3 @@
import baseRest from './_baseRest.js';
import pullAll from './pullAll.js'; import pullAll from './pullAll.js';
/** /**
@@ -24,6 +23,8 @@ import pullAll from './pullAll.js';
* console.log(array); * console.log(array);
* // => ['b', 'b'] * // => ['b', 'b']
*/ */
const pull = baseRest(pullAll); function pull(array, ...values) {
return pullAll(array, values);
}
export default pull; export default pull;

View File

@@ -2,7 +2,6 @@ import arrayMap from './_arrayMap.js';
import baseAt from './_baseAt.js'; import baseAt from './_baseAt.js';
import basePullAt from './_basePullAt.js'; import basePullAt from './_basePullAt.js';
import compareAscending from './_compareAscending.js'; import compareAscending from './_compareAscending.js';
import flatRest from './_flatRest.js';
import isIndex from './_isIndex.js'; import isIndex from './_isIndex.js';
/** /**
@@ -29,12 +28,12 @@ import isIndex from './_isIndex.js';
* console.log(pulled); * console.log(pulled);
* // => ['b', 'd'] * // => ['b', 'd']
*/ */
const pullAt = flatRest((array, indexes) => { function pullAt(array, ...indexes) {
const length = array == null ? 0 : array.length, result = baseAt(array, indexes); const length = array == null ? 0 : array.length;
const result = baseAt(array, indexes);
basePullAt(array, arrayMap(indexes, index => isIndex(index, length) ? +index : index).sort(compareAscending)); basePullAt(array, arrayMap(indexes, index => isIndex(index, length) ? +index : index).sort(compareAscending));
return result; return result;
}); }
export default pullAt; export default pullAt;

View File

@@ -1,5 +1,4 @@
import createWrap from './_createWrap.js'; import createWrap from './_createWrap.js';
import flatRest from './_flatRest.js';
/** Used to compose bitmasks for function metadata. */ /** Used to compose bitmasks for function metadata. */
const WRAP_REARG_FLAG = 256; const WRAP_REARG_FLAG = 256;
@@ -26,6 +25,8 @@ const WRAP_REARG_FLAG = 256;
* rearged('b', 'c', 'a') * rearged('b', 'c', 'a')
* // => ['a', 'b', 'c'] * // => ['a', 'b', 'c']
*/ */
const rearg = flatRest((func, indexes) => createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes)); function rearg(func, ...indexes) {
return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
}
export default rearg; export default rearg;

40
rest.js
View File

@@ -1,40 +0,0 @@
import baseRest from './_baseRest.js';
import toInteger from './toInteger.js';
/** Error message constants. */
const FUNC_ERROR_TEXT = 'Expected a function';
/**
* Creates a function that invokes `func` with the `this` binding of the
* created function and arguments from `start` and beyond provided as
* an array.
*
* **Note:** This method is based on the
* [rest parameter](https://mdn.io/rest_parameters).
*
* @static
* @memberOf _
* @since 4.0.0
* @category Function
* @param {Function} func The function to apply a rest parameter to.
* @param {number} [start=func.length-1] The start position of the rest parameter.
* @returns {Function} Returns the new function.
* @example
*
* var say = _.rest(function(what, names) {
* return what + ' ' + _.initial(names).join(', ') +
* (_.size(names) > 1 ? ', & ' : '') + _.last(names);
* });
*
* say('hello', 'fred', 'barney', 'pebbles');
* // => 'hello fred, barney, & pebbles'
*/
function rest(func, start) {
if (typeof func != 'function') {
throw new TypeError(FUNC_ERROR_TEXT);
}
start = start === undefined ? start : toInteger(start);
return baseRest(func, start);
}
export default rest;

View File

@@ -1,6 +1,5 @@
import apply from './_apply.js'; import apply from './_apply.js';
import arrayPush from './_arrayPush.js'; import arrayPush from './_arrayPush.js';
import baseRest from './_baseRest.js';
import castSlice from './_castSlice.js'; import castSlice from './_castSlice.js';
import toInteger from './toInteger.js'; import toInteger from './toInteger.js';
@@ -49,7 +48,7 @@ function spread(func, start) {
throw new TypeError(FUNC_ERROR_TEXT); throw new TypeError(FUNC_ERROR_TEXT);
} }
start = start == null ? 0 : nativeMax(toInteger(start), 0); start = start == null ? 0 : nativeMax(toInteger(start), 0);
return baseRest(function(args) { return (...args) => {
const array = args[start]; const array = args[start];
const otherArgs = castSlice(args, 0, start); const otherArgs = castSlice(args, 0, start);
@@ -57,7 +56,7 @@ function spread(func, start) {
arrayPush(otherArgs, array); arrayPush(otherArgs, array);
} }
return apply(func, this, otherArgs); return apply(func, this, otherArgs);
}); };
} }
export default spread; export default spread;

5
zip.js
View File

@@ -1,4 +1,3 @@
import baseRest from './_baseRest.js';
import unzip from './unzip.js'; import unzip from './unzip.js';
/** /**
@@ -17,6 +16,8 @@ import unzip from './unzip.js';
* _.zip(['a', 'b'], [1, 2], [true, false]); * _.zip(['a', 'b'], [1, 2], [true, false]);
* // => [['a', 1, true], ['b', 2, false]] * // => [['a', 1, true], ['b', 2, false]]
*/ */
const zip = baseRest(unzip); function zip(...arays) {
return unzip(arrays);
}
export default zip; export default zip;