mirror of
https://github.com/whoisclebs/lodash.git
synced 2026-02-04 08:57:49 +00:00
Remove dependencyObject.
Former-commit-id: 374611a2f1180402700fad5ba7f86e390150d37b
This commit is contained in:
52
build.js
52
build.js
@@ -231,6 +231,12 @@
|
||||
'findWhere': ['where']
|
||||
};
|
||||
|
||||
/** Used to track circular dependencies of identifiers */
|
||||
var circularDependencyMap = {
|
||||
'createCallback': ['isEqual'],
|
||||
'createIterator': ['keys']
|
||||
};
|
||||
|
||||
/** Used to track Lo-Dash property dependencies of identifiers */
|
||||
var propDependencyMap = {
|
||||
'at': ['support'],
|
||||
@@ -252,19 +258,19 @@
|
||||
var varDependencyMap = {
|
||||
'bind': ['reNative'],
|
||||
'bindKey': ['indicatorObject'],
|
||||
'createCallback': ['dependencyObject', 'indicatorObject'],
|
||||
'createIterator': ['dependencyObject', 'indicatorObject', 'objectTypes'],
|
||||
'createCallback': ['indicatorObject'],
|
||||
'createIterator': ['indicatorObject', 'objectTypes'],
|
||||
'createObject': ['reNative'],
|
||||
'defer': ['objectTypes', 'reNative'],
|
||||
'escape': ['reUnescapedHtml'],
|
||||
'escapeHtmlChar': ['htmlEscapes'],
|
||||
'htmlUnescapes': ['htmlEscapes'],
|
||||
'isArray': ['reNative'],
|
||||
'isEqual': ['dependencyObject', 'indicatorObject'],
|
||||
'isEqual': ['indicatorObject'],
|
||||
'isObject': ['objectTypes'],
|
||||
'isPlainObject': ['reNative'],
|
||||
'isRegExp': ['objectTypes'],
|
||||
'keys': ['dependencyObject', 'reNative'],
|
||||
'keys': ['reNative'],
|
||||
'merge': ['indicatorObject'],
|
||||
'partialRight': ['indicatorObject'],
|
||||
'reEscapedHtml': ['htmlUnescapes'],
|
||||
@@ -827,14 +833,14 @@
|
||||
|
||||
var getDepPaths = function(dependencies, fromPath) {
|
||||
fromPath || (fromPath = '');
|
||||
return dependencies.map(function(depName) {
|
||||
var toPath = getPath(depName),
|
||||
return dependencies.map(function(dep) {
|
||||
var toPath = getPath(dep),
|
||||
relative = path.relative(fromPath, toPath).replace(RegExp(path.sepEscaped, 'g'), sep);
|
||||
|
||||
if (relative.charAt(0) != '.') {
|
||||
relative = '.' + (relative ? sep + relative : '');
|
||||
}
|
||||
return relative + sep + depName;
|
||||
return relative + sep + dep;
|
||||
});
|
||||
};
|
||||
|
||||
@@ -846,10 +852,14 @@
|
||||
|
||||
// create modules for each identifier
|
||||
identifiers.forEach(function(identifier) {
|
||||
var deps = getDependencies(identifier, true)
|
||||
.concat(propDependencyMap[identifier] || [])
|
||||
.concat(varDependencyMap[identifier] || [])
|
||||
.sort();
|
||||
var circDeps = circularDependencyMap[identifier];
|
||||
|
||||
var deps = _.difference(
|
||||
getDependencies(identifier, true)
|
||||
.concat(propDependencyMap[identifier] || [])
|
||||
.concat(varDependencyMap[identifier] || [])
|
||||
, circDeps)
|
||||
.sort();
|
||||
|
||||
var modulePath = getPath(identifier),
|
||||
depArgs = deps.join(', '),
|
||||
@@ -870,7 +880,16 @@
|
||||
'include=' + identifier,
|
||||
'iife=' + iife.join('\n'),
|
||||
'-o', path.join(outputPath, modulePath + identifier + '.js')
|
||||
));
|
||||
), function(data) {
|
||||
// replace deps inline
|
||||
_.each(circDeps, function(dep) {
|
||||
// avoid identifiers in strings
|
||||
data.source = data.source.replace(RegExp('(["\'])(?:(?!\\1)[^\\n\\\\]|\\\\.)*\\1|\\b' + dep + '\\b', 'g'), function(match) {
|
||||
return /^["']/.test(match) ? match : "require('" + match + "')";
|
||||
});
|
||||
});
|
||||
defaultBuildCallback(data);
|
||||
});
|
||||
});
|
||||
|
||||
// create category modules
|
||||
@@ -2681,11 +2700,6 @@
|
||||
}
|
||||
});
|
||||
}
|
||||
if (isNoDep) {
|
||||
// avoid circular dependencies
|
||||
funcDependencyMap.createCallback = _.without(funcDependencyMap.createCallback, 'isEqual');
|
||||
funcDependencyMap.createIterator = _.without(funcDependencyMap.createIterator, 'keys');
|
||||
}
|
||||
else if (isModularize) {
|
||||
_.forOwn(funcDependencyMap, function(deps, funcName) {
|
||||
if (_.contains(deps, 'getIndexOf')) {
|
||||
@@ -3293,7 +3307,7 @@
|
||||
// replace `_.isEqual`
|
||||
if (!isLodash('isEqual')) {
|
||||
source = replaceFunction(source, 'isEqual', [
|
||||
'var isEqual = dependencyObject.isEqual = function(a, b, stackA, stackB) {',
|
||||
'function isEqual(a, b, stackA, stackB) {',
|
||||
' if (a === b) {',
|
||||
' return a !== 0 || (1 / a == 1 / b);',
|
||||
' }',
|
||||
@@ -3389,7 +3403,7 @@
|
||||
' });',
|
||||
' }',
|
||||
' return result;',
|
||||
'};'
|
||||
'}'
|
||||
].join('\n'));
|
||||
}
|
||||
// replace `_.memoize`
|
||||
|
||||
@@ -331,11 +331,6 @@
|
||||
'sortBy'
|
||||
];
|
||||
|
||||
var depObjProps = [
|
||||
'isEqual',
|
||||
'keys'
|
||||
];
|
||||
|
||||
var props = [
|
||||
'cache',
|
||||
'criteria',
|
||||
@@ -343,13 +338,6 @@
|
||||
'value'
|
||||
];
|
||||
|
||||
// minify `dependencyObject` properties
|
||||
depObjProps.forEach(function(prop, index) {
|
||||
source = source.replace(RegExp("\\b(dependencyObject(?:\\.|\\['))" + prop + '\\b', 'g'), function(match, prelude) {
|
||||
return prelude + minNames[iteratorOptions.length + props.length + index];
|
||||
});
|
||||
});
|
||||
|
||||
// minify other properties used in functions
|
||||
var snippets = source.match(RegExp('^( *)(?:var|function) +(?:' + funcNames.join('|') + ')\\b[\\s\\S]+?\\n\\1}', 'gm'));
|
||||
if (!snippets) {
|
||||
|
||||
14
lodash.js
14
lodash.js
@@ -21,9 +21,6 @@
|
||||
/** Used internally to indicate various things */
|
||||
var indicatorObject = {};
|
||||
|
||||
/** Used to avoid reference errors and circular dependency errors */
|
||||
var dependencyObject = {};
|
||||
|
||||
/** Used to prefix keys to avoid issues with `__proto__` and properties on `Object.prototype` */
|
||||
var keyPrefix = +new Date + '';
|
||||
|
||||
@@ -1121,8 +1118,7 @@
|
||||
* @returns {Function} Returns the compiled function.
|
||||
*/
|
||||
function createIterator() {
|
||||
var data = getObject(),
|
||||
keys = dependencyObject.keys;
|
||||
var data = getObject();
|
||||
|
||||
// data properties
|
||||
data.shadowedProps = shadowedProps;
|
||||
@@ -1335,7 +1331,7 @@
|
||||
* _.keys({ 'one': 1, 'two': 2, 'three': 3 });
|
||||
* // => ['one', 'two', 'three'] (order is not guaranteed)
|
||||
*/
|
||||
var keys = dependencyObject.keys = !nativeKeys ? shimKeys : function(object) {
|
||||
var keys = !nativeKeys ? shimKeys : function(object) {
|
||||
if (!isObject(object)) {
|
||||
return [];
|
||||
}
|
||||
@@ -1917,7 +1913,7 @@
|
||||
* });
|
||||
* // => true
|
||||
*/
|
||||
var isEqual = dependencyObject.isEqual = function(a, b, callback, thisArg, stackA, stackB) {
|
||||
function isEqual(a, b, callback, thisArg, stackA, stackB) {
|
||||
// used to indicate that when comparing objects, `a` has at least the properties of `b`
|
||||
var whereIndicator = callback === indicatorObject;
|
||||
if (typeof callback == 'function' && !whereIndicator) {
|
||||
@@ -2073,7 +2069,7 @@
|
||||
releaseArray(stackB);
|
||||
}
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if `value` is, or can be coerced to, a finite number.
|
||||
@@ -4767,7 +4763,7 @@
|
||||
var length = props.length,
|
||||
result = false;
|
||||
while (length--) {
|
||||
if (!(result = dependencyObject.isEqual(object[props[length]], func[props[length]], indicatorObject))) {
|
||||
if (!(result = isEqual(object[props[length]], func[props[length]], indicatorObject))) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user