1234567891011121314151617181920212223242526272829303132333435363738394041 |
- function Brikz(api, apiKey, initKey) {
- var brikz = this, backup = {};
- apiKey = apiKey || 'exports';
- initKey = initKey || '__init__';
- function mixin(src, target, what) {
- for (var keys = Object.keys(what||src), l=keys.length, i=0; i<l; ++i) {
- if (src == null) { target[keys[i]] = undefined; } else {
- var value = src[keys[i]];
- if (typeof value !== "undefined") { target[keys[i]] = value; }
- }
- }
- return target;
- }
- var d={value: null, enumerable: false, configurable: true, writable: true};
- Object.defineProperties(this, { ensure: d, rebuild: d });
- var exclude = mixin(this, {});
- this.rebuild = function () {
- Object.keys(backup).forEach(function (key) {
- mixin(null, api, (backup[key]||0)[apiKey]||{});
- });
- var oapi = mixin(api, {}), order = [], chk = {};
- brikz.ensure = function(key) {
- if (key in exclude) { return null; }
- var b = brikz[key], bak = backup[key];
- mixin(null, 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(null, api, api));
- order.forEach(function(brik) { mixin(brik[apiKey] || {}, api); });
- order.forEach(function(brik) { brik[initKey] && brik[initKey](); });
- backup = mixin(brikz, {});
- };
- }
|