|  | @@ -52,43 +52,37 @@ function Brikz(api, apiKey, initKey) {
 | 
											
												
													
														|  |  	apiKey = apiKey || 'exports';
 |  |  	apiKey = apiKey || 'exports';
 | 
											
												
													
														|  |  	initKey = initKey || '__init__';
 |  |  	initKey = initKey || '__init__';
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -	function mixin(src, target, keys) {
 |  | 
 | 
											
												
													
														|  | -		for (keys = keys || Object.keys(src), l=keys.length, i=0; i<l; ++i) {
 |  | 
 | 
											
												
													
														|  | 
 |  | +	function mixin(src, target, what) {
 | 
											
												
													
														|  | 
 |  | +		for (var keys = Object.keys(what||src), l=keys.length, i=0; i<l; ++i) {
 | 
											
												
													
														|  |  			var value = src[keys[i]];
 |  |  			var value = src[keys[i]];
 | 
											
												
													
														|  | -			if (typeof value !== "undefined") target[keys[i]] = value;
 |  | 
 | 
											
												
													
														|  | 
 |  | +			if (typeof value !== "undefined") { target[keys[i]] = value; }
 | 
											
												
													
														|  |  		}
 |  |  		}
 | 
											
												
													
														|  |  		return target;
 |  |  		return target;
 | 
											
												
													
														|  |  	}
 |  |  	}
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -	function forEach(c, fn) {
 |  | 
 | 
											
												
													
														|  | -		Object.keys(c).forEach(function(k) { if (c[k]) fn(c[k], k, c); });
 |  | 
 | 
											
												
													
														|  | -	}
 |  | 
 | 
											
												
													
														|  | 
 |  | +	var d={value: null, enumerable: false, configurable: true, writable: true};
 | 
											
												
													
														|  | 
 |  | +	Object.defineProperties(this, { ensure: d, rebuild: d });
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -	Object.defineProperties(this, {
 |  | 
 | 
											
												
													
														|  | -		ensure: { value: null,
 |  | 
 | 
											
												
													
														|  | -			enumerable: false, configurable: true, writable: true},
 |  | 
 | 
											
												
													
														|  | -		rebuild: { value: function() {
 |  | 
 | 
											
												
													
														|  | -			var obrikz = mixin(backup, {}), inits = [], chk = {};
 |  | 
 | 
											
												
													
														|  | -			forEach(obrikz, function(brik) {
 |  | 
 | 
											
												
													
														|  | -				mixin({}, api, brik[apiKey] || Object.keys(brik));
 |  | 
 | 
											
												
													
														|  | -			});
 |  | 
 | 
											
												
													
														|  | -			var oapi = mixin(api, {});
 |  | 
 | 
											
												
													
														|  | -			backup = {};
 |  | 
 | 
											
												
													
														|  | -			brikz.ensure = function(key) {
 |  | 
 | 
											
												
													
														|  | -				var b = brikz[key], bak = obrikz[key];
 |  | 
 | 
											
												
													
														|  | -				mixin({}, api, Object.keys(api));
 |  | 
 | 
											
												
													
														|  | -				while (typeof b === "function") b = new b(brikz, api, bak);
 |  | 
 | 
											
												
													
														|  | -				if (b && !b[apiKey]) b[apiKey] = mixin(api, {});
 |  | 
 | 
											
												
													
														|  | -				if (b && b[initKey] && !chk[key]) { chk[key]=1;inits.push(b); }
 |  | 
 | 
											
												
													
														|  | -				return brikz[key] = backup[key] = b;
 |  | 
 | 
											
												
													
														|  | -			}
 |  | 
 | 
											
												
													
														|  | -			forEach(brikz, function(brik, key) { brikz.ensure(key); });
 |  | 
 | 
											
												
													
														|  | -			brikz.ensure = null;
 |  | 
 | 
											
												
													
														|  | -			mixin({}, api, Object.keys(api));
 |  | 
 | 
											
												
													
														|  | -			mixin(oapi, api);
 |  | 
 | 
											
												
													
														|  | -			forEach(brikz, function(brik) { mixin(brik[apiKey] || {}, api); });
 |  | 
 | 
											
												
													
														|  | -			inits.forEach(function(brik) { brik[initKey](); });
 |  | 
 | 
											
												
													
														|  | -		}, enumerable: false, configurable: true, writable: false }});
 |  | 
 | 
											
												
													
														|  | 
 |  | +	this.rebuild = function () {
 | 
											
												
													
														|  | 
 |  | +		Object.keys(backup).forEach(function (key) {
 | 
											
												
													
														|  | 
 |  | +			mixin({}, api, (backup[key]||0)[apiKey]);
 | 
											
												
													
														|  | 
 |  | +		});
 | 
											
												
													
														|  | 
 |  | +		var oapi = mixin(api, {}), order = [], chk = {};
 | 
											
												
													
														|  | 
 |  | +		brikz.ensure = function(key) {
 | 
											
												
													
														|  | 
 |  | +			var b = brikz[key], bak = backup[key];
 | 
											
												
													
														|  | 
 |  | +			mixin({}, api, api);
 | 
											
												
													
														|  | 
 |  | +			while (typeof b === "function") { b = new b(brikz, api, bak); }
 | 
											
												
													
														|  | 
 |  | +			if (b && !chk[key]) { chk[key]=true; order.push(b); }
 | 
											
												
													
														|  | 
 |  | +			if (b && !b[apiKey]) { b[apiKey] = mixin(api, {}); }
 | 
											
												
													
														|  | 
 |  | +			return brikz[key] = b;
 | 
											
												
													
														|  | 
 |  | +		};
 | 
											
												
													
														|  | 
 |  | +		Object.keys(brikz).forEach(function (key) { brikz.ensure(key); });
 | 
											
												
													
														|  | 
 |  | +		brikz.ensure = null;
 | 
											
												
													
														|  | 
 |  | +		mixin(oapi, mixin({}, api, api));
 | 
											
												
													
														|  | 
 |  | +		order.forEach(function(brik) { mixin(brik[apiKey] || {}, api); });
 | 
											
												
													
														|  | 
 |  | +		order.forEach(function(brik) { brik[initKey] && brik[initKey](); });
 | 
											
												
													
														|  | 
 |  | +		backup = mixin(brikz, {});
 | 
											
												
													
														|  | 
 |  | +	};
 | 
											
												
													
														|  |  }
 |  |  }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |  /* Brikz end */
 |  |  /* Brikz end */
 |