diff --git a/build.js b/build.js index 9e77d68e8..a65315a9c 100644 --- a/build.js +++ b/build.js @@ -832,10 +832,11 @@ }; var getDepPath = function(dep, fromPath) { - fromPath || (fromPath = ''); - + if (dep == 'require') { + return dep; + } var toPath = getPath(dep), - relative = path.relative(fromPath, toPath).replace(RegExp(path.sepEscaped, 'g'), sep); + relative = path.relative(fromPath || '', toPath).replace(RegExp(path.sepEscaped, 'g'), sep); if (relative.charAt(0) != '.') { relative = '.' + (relative ? sep + relative : ''); @@ -857,19 +858,26 @@ // create modules for each identifier identifiers.forEach(function(identifier) { - var circDeps = circularDependencyMap[identifier]; + var circDeps = circularDependencyMap[identifier], + modulePath = getPath(identifier), + iife = []; var deps = _.difference( getDependencies(identifier, true) - .concat(propDependencyMap[identifier] || []) - .concat(varDependencyMap[identifier] || []) + .concat(propDependencyMap[identifier] || arrayRef) + .concat(varDependencyMap[identifier] || arrayRef) , circDeps) .sort(); - var modulePath = getPath(identifier), - depArgs = deps.join(', '), - depPaths = '[' + (deps.length ? "'" + getDepPaths(deps, modulePath).join("', '") + "'" : '') + '], ', - iife = []; + if (circDeps) { + deps.unshift('require'); + } + var depArgs = deps.join(', '); + + if (circDeps) { + push.apply(deps, circDeps); + } + var depPaths = '[' + (deps.length ? "'" + getDepPaths(deps, modulePath).join("', '") + "'" : '') + '], '; if (isAMD) { iife.push( diff --git a/lodash.js b/lodash.js index 6488d56e9..71677b2da 100644 --- a/lodash.js +++ b/lodash.js @@ -1152,7 +1152,7 @@ // return the compiled function return factory( errorClass, errorProto, hasOwnProperty, indicatorObject, isArguments, - isArray, isString, keys, lodash, objectProto, objectTypes, nonEnumProps, + isArray, isString, data.useKeys && keys, lodash, objectProto, objectTypes, nonEnumProps, stringClass, stringProto, toString ); } @@ -1315,7 +1315,8 @@ 'args': 'object', 'init': '[]', 'top': 'if (!(objectTypes[typeof object])) return result', - 'loop': 'result.push(index)' + 'loop': 'result.push(index)', + 'useKeys': false }); /** diff --git a/vendor/requirejs/require.js b/vendor/requirejs/require.js index 2109a2514..52c2b076b 100644 --- a/vendor/requirejs/require.js +++ b/vendor/requirejs/require.js @@ -1,5 +1,5 @@ /** vim: et:ts=4:sw=4:sts=4 - * @license RequireJS 2.1.6 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. + * @license RequireJS 2.1.8 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved. * Available via the MIT or new BSD license. * see: http://github.com/jrburke/requirejs for details */ @@ -12,7 +12,7 @@ var requirejs, require, define; (function (global) { var req, s, head, baseElement, dataMain, src, interactiveScript, currentlyAddingScript, mainScript, subPath, - version = '2.1.6', + version = '2.1.8', commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg, cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g, jsSuffixRegExp = /\.js$/, @@ -1794,6 +1794,19 @@ var requirejs, require, define; */ req.onError = defaultOnError; + /** + * Creates the node for the load command. Only used in browser envs. + */ + req.createNode = function (config, moduleName, url) { + var node = config.xhtml ? + document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : + document.createElement('script'); + node.type = config.scriptType || 'text/javascript'; + node.charset = 'utf-8'; + node.async = true; + return node; + }; + /** * Does the request to load a module for the browser case. * Make this a separate function to allow other environments @@ -1808,12 +1821,7 @@ var requirejs, require, define; node; if (isBrowser) { //In the browser so use a script tag - node = config.xhtml ? - document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') : - document.createElement('script'); - node.type = config.scriptType || 'text/javascript'; - node.charset = 'utf-8'; - node.async = true; + node = req.createNode(config, moduleName, url); node.setAttribute('data-requirecontext', context.contextName); node.setAttribute('data-requiremodule', moduleName);