wires-domain
Version:
Restfull service with dependency injection
1 lines • 3.41 kB
JavaScript
!function(e,r,n){function i(e){var r=/((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm,n=/([^\s,]+)/g,i=e.toString().replace(r,""),t=i.slice(i.indexOf("(")+1,i.indexOf(")")).match(n);return null===t&&(t=[]),t}function t(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 i=s.isString(e[0])||s.isArray(e[0]);i?(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,a,o={},u={};if(e){c=r,a=require("promise"),s=require("lodash");var l=require("log4js").getLogger("domain");u.fatal=function(e){l.fatal(e)},u.log=function(e){l.log(e)},u.warn=function(){l.warn(msg)}}else n._||console.warn("Lodash is required for wires-domain!"),s=n._,c={},a=n.Promise,u={fatal:function(e){console.error(e)},log:function(e){console.log(e)},warn:function(e){console.warn(e)}};c.__wires_services_cached__=c.__wires_services_cached__||{};var _=function(e){return e&&s.isFunction(e.then)&&s.isFunction(e["catch"])},f=function(e,r){return new a(function(n,i){var t=[],c=s.isPlainObject(e),a=-1,o=function(){if(a++,!(a<s.size(e)))return n(t);var u,l;if(c?(u=s.keys(e)[a],l=e[u]):(u=a,l=e[a]),_(l))l.then(function(e){t.push(e),o()})["catch"](i);else{var f=r.call(r,l,u);_(f)?f.then(function(e){t.push(e),o()})["catch"](i):(t.push(f),o())}};o()})},o={each:f,service:function(){this.register.apply(this,arguments)},module:function(e,r,n){n=n||{},n.cache=!0,this.register.apply(this,[e,r,n])},register:function(e,r,n){var i=null,t=r;s.isArray(r)&&(i=r,t=n);var a=!1;s.isPlainObject(n)&&(a=n.cache===!0),c.__wires_services__=c.__wires_services__||{},c.__wires_services__[e]={name:e,target:t,args:i,cache:a}},isServiceRegistered: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(i,t){var c=t.split(".")[0];return c===e?n.require([t],function(e){r[t]=e}):void 0}).then(function(){return r})},promise:function(e){return new a(e)},storeModule:function(e,r){c.__wires_services_cached__[e]=r},require:function(){var e=t(arguments),r=this,n=e.localServices,o=s.isArray(e.source)?e.source:i(e.source),l=e.target,_=(e.callReady,e.instance),h=c.__wires_services__,v=new a(function(i,t){var a=[],v=s.merge(n,h);for(var g in o){var d=(o[g],o[g]);if(!v[d])return console.log(u),u.fatal("Error while injecting variable '"+d+"' into function \n"+e.source.toString()),t({status:500,message:"Service with name '"+d+"' was not found "});a.push(v[d])}return f(a,function(e){if(e.cache&&c.__wires_services_cached__[e.name])return c.__wires_services_cached__[e.name];var i=e.target,t=e.args;if(s.isFunction(i)){var a=[];return a=t?[t,n,i]:[i,n],r.require.apply(r,a).then(function(n){return e.cache&&r.storeModule(e.name,n),n})}return i||e}).then(function(e){return l.apply(_||e,e)}).then(i)["catch"](t)});return v}};n.domain=o}("undefined"!=typeof module&&module.exports,"undefined"!=typeof module&&module.exports?global:this,this);