37 lines
636 B
JavaScript
37 lines
636 B
JavaScript
'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);
|
|
}
|
|
};
|