mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-07 18:07:49 +00:00
Limit the category build option to adding only those methods available for specific builds (i.e. underscore and backbone builds).
Former-commit-id: 63a5509cd953b20376723335d42fb5a136eb3a5c
This commit is contained in:
45
build.js
45
build.js
@@ -893,7 +893,10 @@
|
|||||||
* @returns {Array} Returns the new converted array.
|
* @returns {Array} Returns the new converted array.
|
||||||
*/
|
*/
|
||||||
function optionToArray(value) {
|
function optionToArray(value) {
|
||||||
return _.compact(value.match(/\w+=(.*)$/)[1].split(/, */));
|
return _.compact(_.isArray(value)
|
||||||
|
? value
|
||||||
|
: value.match(/\w+=(.*)$/)[1].split(/, */)
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -908,11 +911,6 @@
|
|||||||
function optionToMethodsArray(source, value) {
|
function optionToMethodsArray(source, value) {
|
||||||
var methodNames = optionToArray(value);
|
var methodNames = optionToArray(value);
|
||||||
|
|
||||||
// convert categories to method names
|
|
||||||
methodNames.forEach(function(category) {
|
|
||||||
push.apply(methodNames, getMethodsByCategory(source, category));
|
|
||||||
});
|
|
||||||
|
|
||||||
// convert aliases to real method names
|
// convert aliases to real method names
|
||||||
methodNames = methodNames.map(getRealName);
|
methodNames = methodNames.map(getRealName);
|
||||||
|
|
||||||
@@ -1606,11 +1604,6 @@
|
|||||||
// flag to specify a legacy build
|
// flag to specify a legacy build
|
||||||
var isLegacy = !(isModern || isUnderscore) && options.indexOf('legacy') > -1;
|
var isLegacy = !(isModern || isUnderscore) && options.indexOf('legacy') > -1;
|
||||||
|
|
||||||
// used to specify methods of specific categories
|
|
||||||
var categories = options.reduce(function(result, value) {
|
|
||||||
return /category/.test(value) ? optionToArray(value) : result;
|
|
||||||
}, []);
|
|
||||||
|
|
||||||
// used to specify the ways to export the `lodash` function
|
// used to specify the ways to export the `lodash` function
|
||||||
var exportsOptions = options.reduce(function(result, value) {
|
var exportsOptions = options.reduce(function(result, value) {
|
||||||
return /exports/.test(value) ? optionToArray(value).sort() : result;
|
return /exports/.test(value) ? optionToArray(value).sort() : result;
|
||||||
@@ -1644,7 +1637,7 @@
|
|||||||
: result;
|
: result;
|
||||||
}, '');
|
}, '');
|
||||||
|
|
||||||
// used when precompiling template files
|
// used as the template settings for precompiled templates
|
||||||
var templateSettings = options.reduce(function(result, value) {
|
var templateSettings = options.reduce(function(result, value) {
|
||||||
var match = value.match(/settings=(.+)$/);
|
var match = value.match(/settings=(.+)$/);
|
||||||
return match
|
return match
|
||||||
@@ -1701,6 +1694,17 @@
|
|||||||
: accumulator;
|
: accumulator;
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
|
var categories = options.reduce(function(accumulator, value) {
|
||||||
|
if (/category|exclude|include|minus|plus/.test(value)) {
|
||||||
|
var array = optionToArray(value);
|
||||||
|
accumulator = _.union(accumulator, /category/.test(value)
|
||||||
|
? array
|
||||||
|
: array.filter(function(category) { return /^[A-Z]/.test(category); })
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return accumulator;
|
||||||
|
}, []);
|
||||||
|
|
||||||
// set flags to include Lo-Dash's methods if explicitly requested
|
// set flags to include Lo-Dash's methods if explicitly requested
|
||||||
if (isUnderscore) {
|
if (isUnderscore) {
|
||||||
var methods = _.without.apply(_, [_.union(includeMethods, plusMethods)].concat(minusMethods));
|
var methods = _.without.apply(_, [_.union(includeMethods, plusMethods)].concat(minusMethods));
|
||||||
@@ -1775,8 +1779,21 @@
|
|||||||
// add method names by category
|
// add method names by category
|
||||||
if (categories.length) {
|
if (categories.length) {
|
||||||
result = _.union(result || [], getDependencies(categories.reduce(function(accumulator, category) {
|
result = _.union(result || [], getDependencies(categories.reduce(function(accumulator, category) {
|
||||||
// resolve method names belonging to each category (case-insensitive)
|
// get method names belonging to each category (case-insensitive)
|
||||||
return accumulator.concat(getMethodsByCategory(source, capitalize(category)));
|
var methodNames = getMethodsByCategory(source, capitalize(category));
|
||||||
|
|
||||||
|
// limit category methods to those available for specific builds
|
||||||
|
if (isBackbone) {
|
||||||
|
methodNames = methodNames.filter(function(methodName) {
|
||||||
|
return _.contains(backboneDependencies, methodName);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (isUnderscore) {
|
||||||
|
methodNames = methodNames.filter(function(methodName) {
|
||||||
|
return _.contains(underscoreMethods, methodName);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return accumulator.concat(methodNames);
|
||||||
}, [])));
|
}, [])));
|
||||||
}
|
}
|
||||||
if (!result) {
|
if (!result) {
|
||||||
|
|||||||
@@ -33,6 +33,9 @@
|
|||||||
global.QUnit
|
global.QUnit
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/** Shortcut used to push arrays of values to an array */
|
||||||
|
var push = Array.prototype.push;
|
||||||
|
|
||||||
/** The time limit for the tests to run (milliseconds) */
|
/** The time limit for the tests to run (milliseconds) */
|
||||||
var timeLimit = process.argv.reduce(function(result, value, index) {
|
var timeLimit = process.argv.reduce(function(result, value, index) {
|
||||||
if (/--time-limit/.test(value)) {
|
if (/--time-limit/.test(value)) {
|
||||||
@@ -308,6 +311,17 @@
|
|||||||
|
|
||||||
/*--------------------------------------------------------------------------*/
|
/*--------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Capitalizes a given string.
|
||||||
|
*
|
||||||
|
* @private
|
||||||
|
* @param {String} string The string to capitalize.
|
||||||
|
* @returns {String} Returns the capitalized string.
|
||||||
|
*/
|
||||||
|
function capitalize(string) {
|
||||||
|
return string[0].toUpperCase() + string.toLowerCase().slice(1);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a context object to use with `vm.runInContext`.
|
* Creates a context object to use with `vm.runInContext`.
|
||||||
*
|
*
|
||||||
@@ -331,7 +345,7 @@
|
|||||||
function expandMethodNames(methodNames) {
|
function expandMethodNames(methodNames) {
|
||||||
return methodNames.reduce(function(result, methodName) {
|
return methodNames.reduce(function(result, methodName) {
|
||||||
var realName = getRealName(methodName);
|
var realName = getRealName(methodName);
|
||||||
result.push.apply(result, [realName].concat(getAliases(realName)));
|
push.apply(result, [realName].concat(getAliases(realName)));
|
||||||
return result;
|
return result;
|
||||||
}, []);
|
}, []);
|
||||||
}
|
}
|
||||||
@@ -1365,12 +1379,9 @@
|
|||||||
var methodNames,
|
var methodNames,
|
||||||
basename = path.basename(data.outputPath, '.js'),
|
basename = path.basename(data.outputPath, '.js'),
|
||||||
context = createContext(),
|
context = createContext(),
|
||||||
isUnderscore = /backbone|underscore/.test(command),
|
isBackbone = /backbone/.test(command),
|
||||||
|
isUnderscore = isBackbone || /underscore/.test(command),
|
||||||
exposeAssign = !isUnderscore,
|
exposeAssign = !isUnderscore,
|
||||||
exposeCreateCallback = !isUnderscore,
|
|
||||||
exposeForIn = !isUnderscore,
|
|
||||||
exposeForOwn = !isUnderscore,
|
|
||||||
exposeIsPlainObject = !isUnderscore,
|
|
||||||
exposeZipObject = !isUnderscore;
|
exposeZipObject = !isUnderscore;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
@@ -1389,21 +1400,14 @@
|
|||||||
if (isUnderscore) {
|
if (isUnderscore) {
|
||||||
if (methodNames) {
|
if (methodNames) {
|
||||||
exposeAssign = methodNames.indexOf('assign') > -1;
|
exposeAssign = methodNames.indexOf('assign') > -1;
|
||||||
exposeCreateCallback = methodNames.indexOf('createCallback') > -1;
|
|
||||||
exposeZipObject = methodNames.indexOf('zipObject') > -1;
|
exposeZipObject = methodNames.indexOf('zipObject') > -1;
|
||||||
} else {
|
} else {
|
||||||
methodNames = underscoreMethods.slice();
|
methodNames = underscoreMethods.slice();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// add method names explicitly by category
|
|
||||||
if (/category/.test(command)) {
|
if (/category/.test(command)) {
|
||||||
// resolve method names belonging to each category (case-insensitive)
|
methodNames = (methodNames || []).concat(command.match(/category=(\S*)/)[1].split(/, */).map(capitalize));
|
||||||
methodNames = command.match(/category=(\S*)/)[1].split(/, */).reduce(function(result, category) {
|
|
||||||
var capitalized = category[0].toUpperCase() + category.toLowerCase().slice(1);
|
|
||||||
return result.concat(getMethodsByCategory(capitalized));
|
|
||||||
}, methodNames || []);
|
|
||||||
}
|
}
|
||||||
// init `methodNames` if it hasn't been inited
|
|
||||||
if (!methodNames) {
|
if (!methodNames) {
|
||||||
methodNames = allMethods.slice();
|
methodNames = allMethods.slice();
|
||||||
}
|
}
|
||||||
@@ -1411,40 +1415,39 @@
|
|||||||
methodNames = methodNames.concat(command.match(/plus=(\S*)/)[1].split(/, */));
|
methodNames = methodNames.concat(command.match(/plus=(\S*)/)[1].split(/, */));
|
||||||
}
|
}
|
||||||
if (/minus/.test(command)) {
|
if (/minus/.test(command)) {
|
||||||
methodNames = _.without.apply(_, [methodNames]
|
methodNames = _.without.apply(_, [methodNames].concat(expandMethodNames(command.match(/minus=(\S*)/)[1].split(/, */))));
|
||||||
.concat(expandMethodNames(command.match(/minus=(\S*)/)[1].split(/, */))));
|
|
||||||
}
|
}
|
||||||
if (/exclude/.test(command)) {
|
if (/exclude/.test(command)) {
|
||||||
methodNames = _.without.apply(_, [methodNames]
|
methodNames = _.without.apply(_, [methodNames].concat(expandMethodNames(command.match(/exclude=(\S*)/)[1].split(/, */))));
|
||||||
.concat(expandMethodNames(command.match(/exclude=(\S*)/)[1].split(/, */))));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// expand aliases and categories to real method names
|
// expand categories to real method names
|
||||||
methodNames = expandMethodNames(methodNames).reduce(function(result, methodName) {
|
methodNames.slice().forEach(function(category) {
|
||||||
return result.concat(methodName, getMethodsByCategory(methodName));
|
var result = getMethodsByCategory(category);
|
||||||
}, []);
|
|
||||||
|
|
||||||
// remove nonexistent and duplicate method names
|
// limit category methods to those available for specific builds
|
||||||
|
if (isBackbone) {
|
||||||
|
result = result.filter(function(methodName) {
|
||||||
|
return _.contains(backboneDependencies, methodName);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (isUnderscore) {
|
||||||
|
result = result.filter(function(methodName) {
|
||||||
|
return _.contains(underscoreMethods, methodName);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (result.length) {
|
||||||
|
methodNames = _.without(methodNames, category);
|
||||||
|
push.apply(methodNames, result);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// expand aliases and remove nonexistent and duplicate method names
|
||||||
methodNames = _.uniq(_.intersection(allMethods, expandMethodNames(methodNames)));
|
methodNames = _.uniq(_.intersection(allMethods, expandMethodNames(methodNames)));
|
||||||
|
|
||||||
if (isUnderscore) {
|
|
||||||
methodNames = _.without.apply(_, [methodNames].concat(['findIndex', 'findKey']));
|
|
||||||
}
|
|
||||||
if (!exposeAssign) {
|
if (!exposeAssign) {
|
||||||
methodNames = _.without(methodNames, 'assign');
|
methodNames = _.without(methodNames, 'assign');
|
||||||
}
|
}
|
||||||
if (!exposeCreateCallback) {
|
|
||||||
methodNames = _.without(methodNames, 'createCallback');
|
|
||||||
}
|
|
||||||
if (!exposeForIn) {
|
|
||||||
methodNames = _.without(methodNames, 'forIn');
|
|
||||||
}
|
|
||||||
if (!exposeForOwn) {
|
|
||||||
methodNames = _.without(methodNames, 'forOwn');
|
|
||||||
}
|
|
||||||
if (!exposeIsPlainObject) {
|
|
||||||
methodNames = _.without(methodNames, 'isPlainobject');
|
|
||||||
}
|
|
||||||
if (!exposeZipObject) {
|
if (!exposeZipObject) {
|
||||||
methodNames = _.without(methodNames, 'zipObject');
|
methodNames = _.without(methodNames, 'zipObject');
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user