methods.js 919 B

123456789101112131415161718192021222324252627282930
  1. "use strict";
  2. var forEach = require("es5-ext/object/for-each")
  3. , normalizeOpts = require("es5-ext/object/normalize-options")
  4. , callable = require("es5-ext/object/valid-callable")
  5. , lazy = require("d/lazy")
  6. , resolveLength = require("./resolve-length")
  7. , extensions = require("./registered-extensions");
  8. module.exports = function (memoize) {
  9. return function (props) {
  10. forEach(props, function (desc) {
  11. var fn = callable(desc.value), length;
  12. desc.value = function (options) {
  13. if (options.getNormalizer) {
  14. options = normalizeOpts(options);
  15. if (length === undefined) {
  16. length = resolveLength(
  17. options.length, fn.length, options.async && extensions.async
  18. );
  19. }
  20. options.normalizer = options.getNormalizer(length);
  21. delete options.getNormalizer;
  22. }
  23. return memoize(fn.bind(this), options);
  24. };
  25. });
  26. return lazy(props);
  27. };
  28. };