UNPKG

@fancy-crud/bus

Version:

Utility package to use command responsibility segregation

2 lines (1 loc) 2.26 kB
(function(t,s){typeof exports=="object"&&typeof module<"u"?s(exports):typeof define=="function"&&define.amd?define(["exports"],s):(t=typeof globalThis<"u"?globalThis:t||self,s(t["@fancy-crud/bus"]={}))})(this,function(t){"use strict";var A=Object.defineProperty;var B=(t,s,i)=>s in t?A(t,s,{enumerable:!0,configurable:!0,writable:!0,value:i}):t[s]=i;var w=(t,s,i)=>(B(t,typeof s!="symbol"?s+"":s,i),i);class s{constructor(){w(this,"$meta")}}class i{}const c=new Map,d=new Map;class o extends Error{constructor(e){super(`Handler not found for command: ${e}`),Object.setPrototypeOf(this,o.prototype),this.name="HandlerDoesNotExist"}}class H{hasImplicitHandler(e){return e.meta!==void 0}implicitHandler(e,n){let r;return n&&Array.isArray(n)?r=e.meta.Handler(...n):r=e.meta.Handler(),r.execute(e)}mapHandler(e,n){const r=c.get(e.constructor.name);let l;return n&&Array.isArray(n)?l=new r(...n):l=new r,l.execute(e)}execute(e,n){return this.hasImplicitHandler(e)?this.implicitHandler(e,n):this.mapHandler(e,n)}}class y{execute(e){const n=c.get(e);if(!n)throw new o(e);return n}}class p{execute(e){let n=[];return n=e.map(r=>{const l=d.get(r);if(!l)return null;const C=l.provider,M=this.execute(l.dependencies);return new C(...M)}).filter(r=>r!==null),n}}class u{execute(e,n){let r;if(typeof e=="string"){if(!n)throw new Error("Should specify a provider for naming providers");r=e,d.set(r,n)}else r=e.name,d.set(r,e);return r}}const f=new u().execute;class m{execute(e,n){const r=typeof e=="string"?e:e.name;if(!n)throw new Error("Should specify a handler for naming handlers");return c.set(r,n),r}}const h=new m().execute;function g(a){let e;typeof a=="string"?e=a:e=a.name;const n=d.get(e);if(!n)throw new Error(`Unable to get provider ${e}`);return new n}const I=g;function j(a){return{Handler(...e){const n=c.get(a.name);let r;if(!n)throw new o(a.name);return e&&Array.isArray(e)?r=new n(...e):r=new n,r}}}function b(a,e){f(a,e),h(a,e)}t.Bus=H,t.HandlerDoesNotExist=o,t.IBaseCommand=s,t.IBaseHandler=i,t.MapCommands=y,t.MapDependencies=p,t.RegisterCommandHandler=m,t.RegisterProvider=u,t.handlers=c,t.inject=g,t.injectable=f,t.injecting=I,t.meta=j,t.providers=d,t.register=b,t.registerCommandHandler=h,Object.defineProperty(t,Symbol.toStringTag,{value:"Module"})});