123456789101112131415161718192021222324252627282930313233343536 |
- 'use strict';
- module.exports = function (fn) {
- return function (id) {
- var mod;
- return function () {
- if (!arguments.length) {
- mod = lazy(mod, fn, id);
- return mod;
- }
- var ret = {};
- [].forEach.call(arguments, function (prop) {
- Object.defineProperty(ret, prop, {
- get: function () {
- mod = lazy(mod, fn, id);
- if (typeof mod[prop] === 'function') {
- return function () {
- return mod[prop].apply(mod, arguments);
- };
- }
- return mod[prop];
- }
- });
- });
- return ret;
- };
- };
- function lazy(mod, fn, id) {
- return mod !== undefined ? mod : fn(id);
- }
- };
|