mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-14 04:37:50 +00:00
Reduce nested code where possible in build.js.
Former-commit-id: 6604a798be84656158957cca0697a208f97ca4f4
This commit is contained in:
137
build.js
137
build.js
@@ -3499,8 +3499,9 @@
|
|||||||
if (isTemplate) {
|
if (isTemplate) {
|
||||||
source = buildTemplate(templatePattern, templateSettings);
|
source = buildTemplate(templatePattern, templateSettings);
|
||||||
}
|
}
|
||||||
else {
|
else if (isModern || isUnderscore) {
|
||||||
if (isModern || isUnderscore) {
|
source = removeFromCreateIterator(source, 'support');
|
||||||
|
|
||||||
iteratorOptions.forEach(function(prop) {
|
iteratorOptions.forEach(function(prop) {
|
||||||
if (prop != 'array') {
|
if (prop != 'array') {
|
||||||
source = removeFromGetObject(source, prop);
|
source = removeFromGetObject(source, prop);
|
||||||
@@ -3522,6 +3523,52 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// inline `iteratorTemplate` template
|
||||||
|
source = replaceFunction(source, 'iteratorTemplate', (function() {
|
||||||
|
var snippet = cleanupCompiled(getFunctionSource(lodash._iteratorTemplate));
|
||||||
|
|
||||||
|
// prepend data object references to property names to avoid having to
|
||||||
|
// use a with-statement
|
||||||
|
iteratorOptions.forEach(function(prop) {
|
||||||
|
if (prop !== 'support') {
|
||||||
|
snippet = snippet.replace(RegExp('([^\\w.])' + prop + '\\b', 'g'), '$1obj.' + prop);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// remove unnecessary code
|
||||||
|
snippet = snippet
|
||||||
|
.replace(/var __t.+/, "var __p = '';")
|
||||||
|
.replace(/function print[^}]+}/, '')
|
||||||
|
.replace(/'(?:\\n|\s)+'/g, "''")
|
||||||
|
.replace(/__p *\+= *' *';/g, '')
|
||||||
|
.replace(/\s*\+\s*'';/g, ';')
|
||||||
|
.replace(/(__p *\+= *)' *' *\+/g, '$1')
|
||||||
|
.replace(/\(\(__t *= *\( *([\s\S]+?) *\)\) *== *null *\? *'' *: *__t\)/g, '($1)');
|
||||||
|
|
||||||
|
// remove the with-statement
|
||||||
|
snippet = snippet.replace(/^ *with *\(.+?\) *{\n/m, '\n').replace(/}([^}]*}[^}]*$)/, '$1');
|
||||||
|
|
||||||
|
// minor cleanup
|
||||||
|
snippet = snippet
|
||||||
|
.replace(/obj\s*\|\|\s*\(obj *= *{}\);/, '')
|
||||||
|
.replace(/var __p = '';\s*__p \+=/, 'var __p =');
|
||||||
|
|
||||||
|
// remove comments, including sourceURLs
|
||||||
|
snippet = snippet.replace(/\s*\/\/.*(?:\n|$)/g, '');
|
||||||
|
|
||||||
|
// replace `iteratorTemplate` assignment
|
||||||
|
snippet = 'var iteratorTemplate = ' + snippet + ';\n';
|
||||||
|
|
||||||
|
return snippet;
|
||||||
|
}()));
|
||||||
|
|
||||||
|
// remove `iteratorTemplate` dependency checks from `_.template`
|
||||||
|
source = source.replace(matchFunction(source, 'template'), function(match) {
|
||||||
|
return match
|
||||||
|
.replace(/iteratorTemplate *&& */g, '')
|
||||||
|
.replace(/iteratorTemplate\s*\?\s*([^:]+?)\s*:[^,;]+/g, '$1');
|
||||||
|
});
|
||||||
|
|
||||||
if (isUnderscore) {
|
if (isUnderscore) {
|
||||||
// unexpose "exit early" feature of `basicEach`, `_.forEach`, `_.forIn`, and `_.forOwn`
|
// unexpose "exit early" feature of `basicEach`, `_.forEach`, `_.forIn`, and `_.forOwn`
|
||||||
_.each(['basicEach', 'forEach', 'forIn', 'forOwn'], function(methodName) {
|
_.each(['basicEach', 'forEach', 'forIn', 'forOwn'], function(methodName) {
|
||||||
@@ -3585,76 +3632,19 @@
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
// remove `_.assign`, `_.forIn`, `_.forOwn`, `_.isPlainObject`, `_.unzip`, and `_.zipObject` assignments
|
// remove `_.assign`, `_.forIn`, `_.forOwn`, `_.isPlainObject`, `_.unzip`, and `_.zipObject` assignments
|
||||||
(function() {
|
source = source.replace(getMethodAssignments(source), function(match) {
|
||||||
var snippet = getMethodAssignments(source),
|
return _.reduce(['assign', 'createCallback', 'forIn', 'forOwn', 'isPlainObject', 'unzip', 'zipObject'], function(result, methodName) {
|
||||||
modified = snippet;
|
return isLodashMethod(methodName)
|
||||||
|
? result
|
||||||
_.each(['assign', 'createCallback', 'forIn', 'forOwn', 'isPlainObject', 'unzip', 'zipObject'], function(methodName) {
|
: result.replace(RegExp('^(?: *//.*\\s*)* *lodash\\.' + methodName + ' *=[\\s\\S]+?;\\n', 'm'), '');
|
||||||
if (!isLodashMethod(methodName)) {
|
}, match);
|
||||||
modified = modified.replace(RegExp('^(?: *//.*\\s*)* *lodash\\.' + methodName + ' *=[\\s\\S]+?;\\n', 'm'), '');
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
source = source.replace(snippet, function() {
|
|
||||||
return modified;
|
|
||||||
});
|
|
||||||
}());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
source = removeFromCreateIterator(source, 'support');
|
|
||||||
|
|
||||||
// inline `iteratorTemplate` template
|
|
||||||
source = replaceFunction(source, 'iteratorTemplate', (function() {
|
|
||||||
var snippet = cleanupCompiled(getFunctionSource(lodash._iteratorTemplate));
|
|
||||||
|
|
||||||
// prepend data object references to property names to avoid having to
|
|
||||||
// use a with-statement
|
|
||||||
iteratorOptions.forEach(function(prop) {
|
|
||||||
if (prop !== 'support') {
|
|
||||||
snippet = snippet.replace(RegExp('([^\\w.])' + prop + '\\b', 'g'), '$1obj.' + prop);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// remove unnecessary code
|
|
||||||
snippet = snippet
|
|
||||||
.replace(/var __t.+/, "var __p = '';")
|
|
||||||
.replace(/function print[^}]+}/, '')
|
|
||||||
.replace(/'(?:\\n|\s)+'/g, "''")
|
|
||||||
.replace(/__p *\+= *' *';/g, '')
|
|
||||||
.replace(/\s*\+\s*'';/g, ';')
|
|
||||||
.replace(/(__p *\+= *)' *' *\+/g, '$1')
|
|
||||||
.replace(/\(\(__t *= *\( *([\s\S]+?) *\)\) *== *null *\? *'' *: *__t\)/g, '($1)');
|
|
||||||
|
|
||||||
// remove the with-statement
|
|
||||||
snippet = snippet.replace(/^ *with *\(.+?\) *{\n/m, '\n').replace(/}([^}]*}[^}]*$)/, '$1');
|
|
||||||
|
|
||||||
// minor cleanup
|
|
||||||
snippet = snippet
|
|
||||||
.replace(/obj\s*\|\|\s*\(obj *= *{}\);/, '')
|
|
||||||
.replace(/var __p = '';\s*__p \+=/, 'var __p =');
|
|
||||||
|
|
||||||
// remove comments, including sourceURLs
|
|
||||||
snippet = snippet.replace(/\s*\/\/.*(?:\n|$)/g, '');
|
|
||||||
|
|
||||||
// replace `iteratorTemplate` assignment
|
|
||||||
snippet = 'var iteratorTemplate = ' + snippet + ';\n';
|
|
||||||
|
|
||||||
return snippet;
|
|
||||||
}()));
|
|
||||||
|
|
||||||
// remove `iteratorTemplate` dependency checks from `_.template`
|
|
||||||
source = source.replace(matchFunction(source, 'template'), function(match) {
|
|
||||||
return match
|
|
||||||
.replace(/iteratorTemplate *&& */g, '')
|
|
||||||
.replace(/iteratorTemplate\s*\?\s*([^:]+?)\s*:[^,;]+/g, '$1');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
// customize Lo-Dash's export bootstrap
|
// customize Lo-Dash's export bootstrap
|
||||||
(function() {
|
|
||||||
if (!isAMD) {
|
if (!isAMD) {
|
||||||
source = source.replace(/(?: *\/\/.*\n)*( *)if *\(typeof +define[\s\S]+?else /, '$1');
|
source = source.replace(/(?: *\/\/.*\n)*( *)if *\(typeof +define[\s\S]+?else /, '$1');
|
||||||
}
|
}
|
||||||
@@ -3674,22 +3664,21 @@
|
|||||||
} else {
|
} else {
|
||||||
source = source.replace(/(?: *\/\/.*\n)* *(?:else )?if *\(freeExports.*?\) *{\s*}(?:\s*else *{([\s\S]+?) *})?\n+/, '$1\n');
|
source = source.replace(/(?: *\/\/.*\n)* *(?:else )?if *\(freeExports.*?\) *{\s*}(?:\s*else *{([\s\S]+?) *})?\n+/, '$1\n');
|
||||||
}
|
}
|
||||||
}());
|
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
// customize Lo-Dash's IIFE
|
// customize Lo-Dash's IIFE
|
||||||
(function() {
|
|
||||||
if (isIIFE) {
|
if (isIIFE) {
|
||||||
|
source = (function() {
|
||||||
var token = '%output%',
|
var token = '%output%',
|
||||||
index = iife.indexOf(token);
|
index = iife.indexOf(token);
|
||||||
|
|
||||||
source = source.match(/^\/\**[\s\S]+?\*\/\n/) +
|
return source.match(/^\/\**[\s\S]+?\*\/\n/) +
|
||||||
(index > -1 ? iife.slice(0, index) : iife) +
|
(index > -1 ? iife.slice(0, index) : iife) +
|
||||||
source.replace(/^[\s\S]+?\(function[^{]+?{|}\(this\)\)[;\s]*$/g, '') +
|
source.replace(/^[\s\S]+?\(function[^{]+?{|}\(this\)\)[;\s]*$/g, '') +
|
||||||
(index > -1 ? iife.slice(index + token.length) : '')
|
(index > -1 ? iife.slice(index + token.length) : '');
|
||||||
}
|
|
||||||
}());
|
}());
|
||||||
|
}
|
||||||
|
|
||||||
/*------------------------------------------------------------------------*/
|
/*------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@@ -3722,7 +3711,7 @@
|
|||||||
].join('\n' + indent);
|
].join('\n' + indent);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (!_.contains(includeVars, 'templateSettings') && isExcluded('template')) {
|
if (isExcluded('template') && !_.contains(includeProps, 'templateSettings')) {
|
||||||
source = removeTemplateSettings(source);
|
source = removeTemplateSettings(source);
|
||||||
}
|
}
|
||||||
if (isExcluded('value')) {
|
if (isExcluded('value')) {
|
||||||
@@ -3753,10 +3742,12 @@
|
|||||||
}
|
}
|
||||||
if (isNoDep) {
|
if (isNoDep) {
|
||||||
source = removeFromCreateIterator(source, 'lodash');
|
source = removeFromCreateIterator(source, 'lodash');
|
||||||
|
|
||||||
source = removeGetIndexOf(source);
|
source = removeGetIndexOf(source);
|
||||||
|
|
||||||
// remove`lodash` namespace from properties
|
// convert the `lodash.templateSettings` property assignment to a variable assignment
|
||||||
|
source = source.replace(/\b(lodash\.)(?=templateSettings *=)/, 'var ');
|
||||||
|
|
||||||
|
// remove the `lodash` namespace from properties
|
||||||
source = source.replace(/\blodash\.(\w+)\b(?!\s*=)/g, '$1');
|
source = source.replace(/\blodash\.(\w+)\b(?!\s*=)/g, '$1');
|
||||||
|
|
||||||
// remove all horizontal rule comment separators
|
// remove all horizontal rule comment separators
|
||||||
|
|||||||
Reference in New Issue
Block a user