UNPKG

pods

Version:

Tiny managers for module definition and dependency management.

5 lines 1.02 kB
// pods.js 2.0.0-beta // (c) 2012-2014 Greg MacWilliam // Freely distributed under the MIT license // Docs: github.com/gmac/micro-module-definition function Pod(a){this.name=a,this._m={}}Pod._m={},Pod.define=function(a,b,c){if(b instanceof Array||(c=b,b=[]),!a||!c)throw"invalid definition";if("function"!=typeof c){var d=c;c=function(){return d}}return this._m[a]={d:b,f:c},this},Pod.declare=function(a,b){function c(a){return function(){return a}}var d=a;"string"==typeof a&&(d={},d[a]=b);for(a in d)d.hasOwnProperty(a)&&this.define(a,c(d[a]));return this},Pod.require=function(a,b){var c=!(a instanceof Array);a=c?[a]:a.slice();for(var d=0;d<a.length;d++){var e=a[d];if(this._m.hasOwnProperty(e)){var f=this._m[e];if(!f.e){if(f._)throw"circular reference to "+e;f._=1,f.e=f.f.apply(null,this.require(f.d)),f._=0}a[d]=f.e}else{if(e!==this.name&&"pod"!==e)throw e+" is undefined";a[d]=this}}return"function"==typeof b&&b.apply(null,a),c?a[0]:a},Pod.prototype={define:Pod.define,declare:Pod.declare,require:Pod.require};