Allow deep clone if requested via include or plus with the underscore build.

Former-commit-id: e86dba41f7265700330e57346a112b578873b390
This commit is contained in:
John-David Dalton
2012-10-02 21:39:18 -07:00
parent fd2a17d244
commit 4017443b1e
2 changed files with 36 additions and 8 deletions

View File

@@ -950,6 +950,9 @@
// flag used to specify if the build should include the "use strict" directive
var useStrict = isStrict || !(isLegacy || isMobile);
// flag used to specify replacing Lo-Dash's `_.clone` with Underscore's
var useUnderscoreClone = isUnderscore;
/*------------------------------------------------------------------------*/
// names of methods to include in the build
@@ -974,6 +977,11 @@
(result = getDependencies(optionToMethodsArray(source, value)));
});
// use Lo-Dash's clone if explicitly requested
if (result && result.indexOf('clone') > -1) {
useUnderscoreClone = false;
}
// add method names required by Backbone and Underscore builds
if (isBackbone && !result) {
result = getDependencies(backboneDependencies);
@@ -1038,7 +1046,6 @@
}
else if (isUnderscore) {
// update dependencies
dependencyMap.clone = ['extend', 'isArray'];
dependencyMap.isEqual = ['isArray', 'isFunction'];
dependencyMap.isEmpty = ['isArray'];
@@ -1051,13 +1058,16 @@
source = removeVar(source, 'largeArraySize');
// replace `_.clone`
source = source.replace(/( +)function clone[\s\S]+?\n\1}/, [
' function clone(value) {',
' return value && objectTypes[typeof value]',
' ? (isArray(value) ? slice.call(value) : extend({}, value))',
' : value',
' }'
].join('\n'));
if (useUnderscoreClone) {
dependencyMap.clone = ['extend', 'isArray'];
source = source.replace(/( +)function clone[\s\S]+?\n\1}/, [
' function clone(value) {',
' return value && objectTypes[typeof value]',
' ? (isArray(value) ? slice.call(value) : extend({}, value))',
' : value',
' }'
].join('\n'));
}
// replace `_.difference`
source = source.replace(/( +)function difference[\s\S]+?\n\1}/, [

View File

@@ -633,6 +633,24 @@
start();
});
});
asyncTest('`lodash underscore plus=clone`', function() {
var start = _.after(2, _.once(QUnit.start));
build(['-s', 'underscore', 'plus=clone'], function(source, filePath) {
var array = [{ 'value': 1 }],
basename = path.basename(filePath, '.js'),
context = createContext();
vm.runInContext(source, context);
var lodash = context._,
clone = lodash.clone(array, true);
deepEqual(array, clone, basename);
notEqual(array, clone, basename);
start();
});
});
}());
/*--------------------------------------------------------------------------*/