realm-js
Version:
1 lines • 4.21 kB
JavaScript
!function(e,r,n){function t(e){var r=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,n=/([^\s,]+)/g,t=e.toString().replace(r,""),i=t.slice(t.indexOf("(")+1,t.indexOf(")")).match(n);return null===i&&(i=[]),i}function i(e){var r={};if(r.localServices={},e.length>0){if(r.source=e[0],r.target=e[0],s.isPlainObject(e[0])){var n=e[0];r.target=n.target,r.source=n.source,r.instance=n.instance}if(e.length>1){var t=s.isString(e[0])||s.isArray(e[0]);t?(s.isArray(e[0])?r.source=e[0]:r.source=s.isString(e[0])?[e[0]]:e[0],s.isFunction(e[1])&&(r.target=e[1]),s.isFunction(e[2])&&(r.target=e[2])):(s.isFunction(e[1])&&(r.callReady=e[1]),s.isPlainObject(e[1])&&(r.localServices=e[1]))}3===e.length&&(s.isPlainObject(e[1])&&(r.localServices=e[1]),s.isFunction(e[2])&&(r.callReady=e[2]))}return r.target=r.target||function(){},r.source=r.source?r.source:r.target,r.callReady=r.callReady||function(){},r}var c,s=e?require("lodash"):n._,u=e?require("promise"):n.Promise,c=e?r:{},a=e?require("log4js").getLogger("realm"):void 0,o={fatal:function(e){return a?a.fatal(e):console.error(e)}};c.__wires_services_cached__=c.__wires_services_cached__||{};var l=function(e){return e&&s.isFunction(e.then)&&s.isFunction(e["catch"])},f=function(e,r){return new u(function(n,t){var i=[],c=s.isPlainObject(e),u=-1,a=function(){if(u++,!(u<s.size(e)))return n(i);var o,f;if(c?(o=s.keys(e)[u],f=e[o]):(o=u,f=e[u]),l(f))f.then(function(e){i.push(e),a()})["catch"](t);else{var _=r.call(r,f,o);l(_)?_.then(function(e){i.push(e),a()})["catch"](t):(i.push(_),a())}};a()})},_=function(e,r){var n=e(r);return n&&s.isFunction(n.then)?n.then(function(e){return s.merge(r,e),r}):(s.isPlainObject(n)&&s.merge(r,n),r)},h=function(){var e={},r=s.flatten(arguments);return f(r,function(r){return s.isFunction(r)?_(r,e):void 0}).then(function(){return e})},v=function(e){return new u(function(r,n){if(!s.isObject(e))return n({status:500,message:"Argument must be a class!"});var t=s.isFunction(e)?new e:e;t.$collection={};for(var i=Object.getOwnPropertyNames(t.constructor.prototype),c=[],u=1;u<i.length;u++){var a=i[u],o=a.match(/^set(.*)$/),_=null;o&&(_=o[1],_=_.charAt(0).toLowerCase()+_.slice(1)),"format"!==a&&c.push({prop:a,setter:_})}var h=function(e,r){t.$collection[e]=r,t[e]=r},v=function(e){var r=t[e.prop].apply(t);if(e.setter){if(l(r))return r.then(function(r){h(e.setter,r)});h(e.setter,r)}return r};return f(c,function(e){return v(e)}).then(function(){return s.isFunction(t.format)?v({prop:"format"}):void 0}).then(function(e){return r(e?e:t.$collection)})["catch"](n)})},g={each:f,chain:v,merge:h,service:function(){this.register.apply(this,arguments)},start:function(e){return g.require(e,function(e){e&&s.isFunction(e.main)&&e.main()})},module:function(e,r,n){n=n||{},n.cache=!0,this.register.apply(this,[e,r,n,!0])},register:function(e,r,n,t){var i=null,u=r;s.isArray(r)&&(i=r,u=n),c.__wires_services__=c.__wires_services__||{},c.__wires_services__[e]={name:e,target:u,args:i,cache:t}},isRegistered:function(e){return c.__wires_services__&&void 0!==c.__wires_services__[e]},requirePackage:function(e){var r={},n=this;return f(c.__wires_services__,function(t,i){var c=0===i.indexOf(e)?e:!1;return c[1]?n.require([i],function(e){r[i]=e}):void 0}).then(function(){return r})},storeModule:function(e,r){c.__wires_services_cached__[e]=r},require:function(){var e=i(arguments),r=this,n=e.localServices,a=s.isArray(e.source)?e.source:t(e.source),l=e.target,_=(e.callReady,e.instance),h=c.__wires_services__,v=new u(function(t,i){var u=[],v=s.merge(n,h);for(var g in a){var d=(a[g],a[g]);if(!v[d])return o.fatal("Error while injecting variable '"+d+"' into function \n"+e.source.toString()),i({status:500,message:"Service with name '"+d+"' was not found "});u.push(v[d])}return f(u,function(e){if(e.cache&&void 0!==c.__wires_services_cached__[e.name])return c.__wires_services_cached__[e.name];var t=e.target,i=e.args;if(s.isFunction(t)){var u=[];return u=i?[i,n,t]:[t,n],r.require.apply(r,u).then(function(n){return e.cache&&r.storeModule(e.name,n),n})}return t||e}).then(function(e){return l.apply(_||e,e)}).then(t)["catch"](i)});return v}};n.realm=g}("undefined"!=typeof module&&module.exports,"undefined"!=typeof module&&module.exports?global:this,this);