pods
Version:
Tiny managers for module definition and dependency management.
5 lines • 1.02 kB
JavaScript
// 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};