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

View File

@@ -633,6 +633,24 @@
start(); 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();
});
});
}()); }());
/*--------------------------------------------------------------------------*/ /*--------------------------------------------------------------------------*/