Spaces:
Runtime error
Runtime error
| ; | |
| var callable = require("es5-ext/object/valid-callable") | |
| , forEach = require("es5-ext/object/for-each") | |
| , extensions = require("./lib/registered-extensions") | |
| , configure = require("./lib/configure-map") | |
| , resolveLength = require("./lib/resolve-length"); | |
| module.exports = function self(fn /*, options */) { | |
| var options, length, conf; | |
| callable(fn); | |
| options = Object(arguments[1]); | |
| if (options.async && options.promise) { | |
| throw new Error("Options 'async' and 'promise' cannot be used together"); | |
| } | |
| // Do not memoize already memoized function | |
| if (hasOwnProperty.call(fn, "__memoized__") && !options.force) return fn; | |
| // Resolve length; | |
| length = resolveLength(options.length, fn.length, options.async && extensions.async); | |
| // Configure cache map | |
| conf = configure(fn, length, options); | |
| // Bind eventual extensions | |
| forEach(extensions, function (extFn, name) { | |
| if (options[name]) extFn(options[name], conf, options); | |
| }); | |
| if (self.__profiler__) self.__profiler__(conf); | |
| conf.updateEnv(); | |
| return conf.memoized; | |
| }; | |