@tsed/di 8.0.0-beta.1 → 8.0.0-beta.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (99) hide show
  1. package/.barrelsby.json +1 -1
  2. package/lib/browser/di.umd.min.js +1 -1
  3. package/lib/browser/di.umd.min.js.map +1 -1
  4. package/lib/esm/common/decorators/autoInjectable.js +3 -5
  5. package/lib/esm/common/decorators/autoInjectable.js.map +1 -1
  6. package/lib/esm/common/decorators/constant.js +1 -4
  7. package/lib/esm/common/decorators/constant.js.map +1 -1
  8. package/lib/esm/common/decorators/controller.js +2 -5
  9. package/lib/esm/common/decorators/controller.js.map +1 -1
  10. package/lib/esm/common/decorators/inject.js +2 -7
  11. package/lib/esm/common/decorators/inject.js.map +1 -1
  12. package/lib/esm/common/decorators/injectable.js +4 -3
  13. package/lib/esm/common/decorators/injectable.js.map +1 -1
  14. package/lib/esm/common/decorators/intercept.js +1 -1
  15. package/lib/esm/common/decorators/intercept.js.map +1 -1
  16. package/lib/esm/common/decorators/interceptor.js +2 -2
  17. package/lib/esm/common/decorators/lazyInject.js +2 -3
  18. package/lib/esm/common/decorators/lazyInject.js.map +1 -1
  19. package/lib/esm/common/decorators/value.js +3 -3
  20. package/lib/esm/common/decorators/value.js.map +1 -1
  21. package/lib/esm/common/domain/ControllerProvider.js.map +1 -1
  22. package/lib/esm/common/domain/Provider.js +6 -1
  23. package/lib/esm/common/domain/Provider.js.map +1 -1
  24. package/lib/esm/common/domain/ProviderType.js +0 -2
  25. package/lib/esm/common/domain/ProviderType.js.map +1 -1
  26. package/lib/esm/common/fn/configuration.js +5 -0
  27. package/lib/esm/common/fn/configuration.js.map +1 -0
  28. package/lib/esm/common/fn/constant.js +5 -0
  29. package/lib/esm/common/fn/constant.js.map +1 -0
  30. package/lib/esm/common/fn/events.js +31 -0
  31. package/lib/esm/common/fn/events.js.map +1 -0
  32. package/lib/esm/common/fn/inject.js +26 -0
  33. package/lib/esm/common/fn/inject.js.map +1 -0
  34. package/lib/esm/common/fn/injectMany.js +6 -0
  35. package/lib/esm/common/fn/injectMany.js.map +1 -0
  36. package/lib/esm/common/fn/injectable.js +57 -0
  37. package/lib/esm/common/fn/injectable.js.map +1 -0
  38. package/lib/esm/common/fn/injector.js +36 -0
  39. package/lib/esm/common/fn/injector.js.map +1 -0
  40. package/lib/esm/common/fn/localsContainer.js +40 -0
  41. package/lib/esm/common/fn/localsContainer.js.map +1 -0
  42. package/lib/esm/common/fn/refValue.js +12 -0
  43. package/lib/esm/common/fn/refValue.js.map +1 -0
  44. package/lib/esm/common/index.js +9 -0
  45. package/lib/esm/common/index.js.map +1 -1
  46. package/lib/esm/common/registries/GlobalProviders.js +1 -5
  47. package/lib/esm/common/registries/GlobalProviders.js.map +1 -1
  48. package/lib/esm/common/registries/ProviderRegistry.js +2 -71
  49. package/lib/esm/common/registries/ProviderRegistry.js.map +1 -1
  50. package/lib/esm/common/services/DIConfiguration.js +1 -14
  51. package/lib/esm/common/services/DIConfiguration.js.map +1 -1
  52. package/lib/esm/common/services/InjectorService.js +5 -32
  53. package/lib/esm/common/services/InjectorService.js.map +1 -1
  54. package/lib/esm/node/decorators/injectContext.js +2 -10
  55. package/lib/esm/node/decorators/injectContext.js.map +1 -1
  56. package/lib/esm/node/domain/DIContext.js +15 -10
  57. package/lib/esm/node/domain/DIContext.js.map +1 -1
  58. package/lib/esm/node/fn/context.js +21 -0
  59. package/lib/esm/node/fn/context.js.map +1 -0
  60. package/lib/esm/node/fn/logger.js +16 -0
  61. package/lib/esm/node/fn/logger.js.map +1 -0
  62. package/lib/esm/node/index.js +2 -0
  63. package/lib/esm/node/index.js.map +1 -1
  64. package/lib/esm/node/services/DILogger.js +3 -8
  65. package/lib/esm/node/services/DILogger.js.map +1 -1
  66. package/lib/esm/node/services/DITest.js +23 -49
  67. package/lib/esm/node/services/DITest.js.map +1 -1
  68. package/lib/esm/node/utils/asyncHookContext.js +1 -2
  69. package/lib/esm/node/utils/asyncHookContext.js.map +1 -1
  70. package/lib/types/common/decorators/configuration.d.ts +1 -1
  71. package/lib/types/common/decorators/constant.d.ts +0 -2
  72. package/lib/types/common/decorators/controller.d.ts +1 -5
  73. package/lib/types/common/decorators/inject.d.ts +0 -3
  74. package/lib/types/common/decorators/interceptor.d.ts +2 -2
  75. package/lib/types/common/domain/ControllerProvider.d.ts +7 -3
  76. package/lib/types/common/domain/Provider.d.ts +1 -0
  77. package/lib/types/common/domain/ProviderType.d.ts +0 -2
  78. package/lib/types/common/fn/configuration.d.ts +2 -0
  79. package/lib/types/common/fn/constant.d.ts +2 -0
  80. package/lib/types/common/fn/events.d.ts +23 -0
  81. package/lib/types/common/fn/inject.d.ts +20 -0
  82. package/lib/types/common/fn/injectMany.d.ts +2 -0
  83. package/lib/types/common/fn/injectable.d.ts +23 -0
  84. package/lib/types/common/fn/injector.d.ts +24 -0
  85. package/lib/types/common/fn/localsContainer.d.ts +15 -0
  86. package/lib/types/common/fn/refValue.d.ts +25 -0
  87. package/lib/types/common/index.d.ts +9 -0
  88. package/lib/types/common/interfaces/DIConfigurationOptions.d.ts +5 -0
  89. package/lib/types/common/registries/ProviderRegistry.d.ts +1 -53
  90. package/lib/types/common/services/DIConfiguration.d.ts +0 -6
  91. package/lib/types/common/services/InjectorService.d.ts +2 -12
  92. package/lib/types/node/domain/DIContext.d.ts +0 -4
  93. package/lib/types/node/fn/context.d.ts +9 -0
  94. package/lib/types/node/fn/logger.d.ts +9 -0
  95. package/lib/types/node/index.d.ts +2 -0
  96. package/lib/types/node/services/DITest.d.ts +0 -5
  97. package/lib/types/node/utils/asyncHookContext.d.ts +1 -2
  98. package/package.json +7 -7
  99. package/readme.md +2 -4
package/.barrelsby.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "directory": ["./src/common", "./src/node"],
3
- "exclude": ["**/__mock__", "**/__mocks__", "**/*.spec.ts"],
3
+ "exclude": ["**/__mock__", "**/__mocks__", "**/*.spec.ts", "localsContainer.ts"],
4
4
  "delete": true
5
5
  }
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@tsed/core"),require("@tsed/schema")):"function"==typeof define&&define.amd?define(["@tsed/core","@tsed/schema"],t):"object"==typeof exports?exports["@tsed/di"]=t(require("@tsed/core"),require("@tsed/schema")):e["@tsed/di"]=t(e["@tsed/core"],e["@tsed/schema"])}(self,((e,t)=>(()=>{"use strict";var r={803:t=>{t.exports=e},953:e=>{e.exports=t}},s={};function o(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}};return r[e](n,n.exports,o),n.exports}o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{o.r(n),o.d(n,{AutoInjectable:()=>F,Configuration:()=>v,Constant:()=>G,Container:()=>S,Controller:()=>z,ControllerProvider:()=>ie,DIConfiguration:()=>_,DI_INJECTABLE_PROPS:()=>t,DI_INTERCEPTOR_OPTIONS:()=>i,DI_INVOKE_OPTIONS:()=>e,DI_USE_OPTIONS:()=>r,DI_USE_PARAM_OPTIONS:()=>s,GlobalProviderRegistry:()=>O,GlobalProviders:()=>E,Inject:()=>y,Injectable:()=>b,InjectablePropertyType:()=>K,InjectionError:()=>T,InjectorService:()=>V,Intercept:()=>J,Interceptor:()=>Q,InvalidPropertyTokenError:()=>l,LOGGER:()=>ae,LazyInject:()=>W,LocalsContainer:()=>h,Module:()=>X,OptionalLazyInject:()=>Y,Opts:()=>ee,OverrideProvider:()=>te,Provider:()=>m,ProviderScope:()=>a,ProviderType:()=>c,Scope:()=>Z,Service:()=>re,UseOpts:()=>se,Value:()=>ne,bindConstant:()=>U,bindIntercept:()=>B,bindValue:()=>oe,colors:()=>C,constant:()=>$,createContainer:()=>w,getConfiguration:()=>ue,getConstructorDependencies:()=>p,getInterceptorOptions:()=>H,getTokens:()=>j,inject:()=>g,injectMany:()=>f,mergeMount:()=>ce,registerController:()=>P,registerProvider:()=>I,registerValue:()=>k,resolveControllers:()=>D,setConstructorDependencies:()=>d});const e=Symbol("DI_INVOKE_OPTIONS"),t=Symbol("DI_INJECTABLE_PROPS"),r="DI_USE_OPTIONS",s="DI_USE_PARAM_OPTIONS",i="DI_INTERCEPTOR_OPTIONS";var a,c,u=o(803);class h extends Map{constructor(){super(...arguments),this.hooks=new u.Hooks}async destroy(){await this.hooks.asyncEmit("$onDestroy")}}Object.create,Object.create,"function"==typeof SuppressedError&&SuppressedError;class l extends Error{constructor(e,t){super(`Object isn't a valid token. Please check the token set on ${(0,u.nameOf)((0,u.classOf)(e))}.${t}.\n- Check that it is not a circular reference.\n- Check that the token (class or symbol) exists`),this.name="INVALID_TOKEN_ERROR"}}function p(e,t){return u.Metadata.getOwn("override:ctor:design:paramtypes",e,t)||[...u.Metadata.getParamTypes(e,t)]||[]}function d(e,t){u.Metadata.set("override:ctor:design:paramtypes",t,e)}function g(e,t){return V.getInstance().invoke(e,t?.locals||V.getLocals(),t)}function f(e,t){return V.getInstance().getMany(e,t?.locals||V.getLocals(),t)}function y(s,o={}){return o="function"==typeof o?{transform:o}:o,(n,i,a)=>{switch((0,u.decoratorTypeOf)([n,i,a])){case u.DecoratorTypes.PARAM_CTOR:s&&function(e,{target:t,propertyKey:r,parameterIndex:s}){const o=p(t,r),n=o[s];o[s]=n===Array?[e]:e,u.Metadata.setParamTypes(t,r,o),d(t,o)}(s,{target:n,propertyKey:i,parameterIndex:a});break;case u.DecoratorTypes.PROP:!function(s,o,{token:n,transform:i=(e=>e),useOpts:a}){const c=Symbol();s[t]||Reflect.defineProperty(s,t,{value:new Set,enumerable:!1,configurable:!1}),s[t].add(o),(0,u.catchError)((()=>Reflect.deleteProperty(s,o))),Reflect.defineProperty(s,o,{get(){const t=function(e,t,r){const s=e||u.Metadata.getType(t,r);if(s===Object)throw new l(t,String(r));return s}(n,s,o),h=u.Metadata.getType(s,o),p={rebuild:!!this[e]?.rebuild,locals:this[e]?.locals,useOpts:a||u.Store.from(s,o).get(r)};return void 0===this[c]&&(this[c]=h===Array?f(n,p):g(t,p)),[].concat(this[c]).forEach(((e,t)=>{(0,u.isPromise)(this[c])&&e.then((e=>{this[c][t]=e,h!==Array&&(this[c]=e)}))})),i(this[c],{self:this,target:s,propertyKey:o})}})}(n,i,{...o,token:s})}}}function v(e={}){return(...t)=>{switch((0,u.decoratorTypeOf)(t)){case u.DecoratorTypes.CLASS:(0,u.StoreSet)("configuration",e)(t[0]);break;default:case u.DecoratorTypes.PARAM_CTOR:return y(v)(t[0],t[1],t[2])}}}!function(e){e.SINGLETON="singleton",e.REQUEST="request",e.INSTANCE="instance"}(a||(a={})),function(e){e.VALUE="value",e.FACTORY="factory",e.SERVICE="service",e.PROVIDER="provider",e.MODULE="module",e.CONTROLLER="controller",e.INTERCEPTOR="interceptor",e.MIDDLEWARE="middleware"}(c||(c={}));class m{constructor(e,t={}){this.type=c.PROVIDER,this.provide=e,this.useClass=e,Object.assign(this,t)}get token(){return this._provide}get provide(){return this._provide}set provide(e){e&&(this._provide=(0,u.getClassOrSymbol)(e),this._tokenStore=this._store=u.Store.from(e))}get useClass(){return this._useClass}set useClass(e){(0,u.isClass)(e)&&(this._useClass=(0,u.classOf)(e),this._store=u.Store.from(e),this.hooks=(0,u.methodsOf)(this._useClass).reduce(((e,{propertyKey:t})=>String(t).startsWith("$")?{...e,[t]:(e,...r)=>e[t](...r)}:e),{}))}get className(){return this.name}get name(){return(0,u.nameOf)(this.provide)}get store(){return this._store}get path(){return this.store.get("path","/")}set path(e){this.store.set("path",e)}get scope(){return this.isAsync()?a.SINGLETON:this.get("scope")}set scope(e){this.store.set("scope",e)}get configuration(){return this.get("configuration")}set configuration(e){this.store.set("configuration",e)}get children(){return this.store.get("childrenControllers",[])}get(e){return this.store.get(e)||this._tokenStore.get(e)}isAsync(){return!!this.useAsyncFactory}clone(){return new((0,u.classOf)(this))(this._provide,this)}hasChildren(){return!!this.children.length}hasParent(){return!!this.store.get("parentController")}toString(){return["Token",this.name,this.useClass&&(0,u.nameOf)(this.useClass),this.useFactory&&"Factory",this.useValue&&"Value",this.useAsyncFactory&&"AsyncFactory"].filter(Boolean).join(":")}}class O extends Map{#e=new Map;get(e){return super.get((0,u.getClassOrSymbol)(e))}has(e){return super.has((0,u.getClassOrSymbol)(e))}set(e,t){return super.set((0,u.getClassOrSymbol)(e),t),this}merge(e,t){const r=this.createIfNotExists(e,t);return Object.keys(t).forEach((e=>{let s=t[e];r[e]=s})),this.set(e,r),r}delete(e){return super.delete((0,u.getClassOrSymbol)(e))}createRegistry(e,t,r={}){const s=this.getRegistrySettings(e);return r=Object.assign(s,{...r,model:t}),this.#e.set(e,r),this}onInvoke(e,t,r){const s=this.#e.get(e.type);s?.onInvoke&&s.onInvoke(e,t,r)}getRegistrySettings(e){let t=c.PROVIDER;if("string"==typeof e)t=e;else{const r=this.get(e);r&&(t=r.type)}return this.#e.get(t)||{model:m}}createRegisterFn(e){return(t,r)=>{t=Object.assign({instance:r},t,{type:e}),this.merge(t.provide,t)}}createIfNotExists(e,t){const r=t.type||c.PROVIDER;if(!this.has(e)){const{model:s=m}=this.#e.get(r)||{},o=new s(e,t);this.set(e,o)}return this.get(e)}}const E=new O;function I(e){if(!e.provide)throw new Error("Provider.provide is required");return E.merge(e.provide,e)}E.createRegistry(c.CONTROLLER,m);const k=(e,t)=>{e.provide||(e={provide:e}),e=Object.assign({scope:a.SINGLETON,useValue:t},e,{type:c.VALUE}),E.merge(e.provide,e)},P=E.createRegisterFn(c.CONTROLLER);function b(e={}){return t=>{I({...e,...e.provide?{useClass:t}:{provide:t}})}}class S extends Map{add(e,t={}){const r=E.get(e)?.clone()||new m(e);return Object.assign(r,t),super.set(e,r)}addProvider(e,t={}){return this.add(e,t)}hasProvider(e){return super.has(e)}setProvider(e,t){return super.set(e,t)}getProvider(e){return super.get(e)}getProviders(e){const t=[].concat(e).map(String);return[...this].reduce(((r,[s,o])=>t.includes(String(o.type))||!e?[...r,o]:r),[])}addProviders(e){e.forEach((e=>{this.hasProvider(e.provide)||this.setProvider(e.provide,e.clone())}))}}const R=e=>e=>(process.env.NO_COLOR,e),C={red:R(),yellow:R(),green:R()};class T extends Error{constructor(e,t){super((0,u.isString)(t)?t:""),this.name="INJECTION_ERROR",this.tokens=[],this.tokens=[e],t&&((0,u.isString)(t)?this.origin={message:t,stack:this.stack}:t.tokens?(this.tokens=this.tokens.concat(t.tokens),this.origin=t.origin):(this.origin=t,this.stack=t.stack));const r=this.origin?"\nOrigin: "+this.origin.message:"",s=this.tokens.map((e=>(0,u.nameOf)(e))).join(" > ");this.message=`Injection failed on ${s}${r}`}static throwInjectorError(e,t,r){throw t&&(0,u.isClass)(e)&&(r.message=function(e,t){let r="";const s=(0,u.getConstructorArgNames)(e).map(((e,s)=>(t.index===s&&(r=e,e=C.red(e)),`${e}: ${(0,u.nameOf)(t.deps[s])}`))).join(", "),o=(0,u.nameOf)(e)+"->constructor("+s+")",n=o.indexOf(r)-5;return"Unable to inject dependency. "+t.message+"\n\n"+o+"\n"+(n>-1?(e=>" ".repeat(e)+C.red("^"+"‾".repeat(r.length-1)))(n):"")}(e,{...t,message:r.message})),new T(e,r)}}function w(e){const t=new S(E.entries());return e&&t.delete(e),t}const N=["mount","imports"];function j(e){return e?(0,u.isArray)(e)?e.filter(u.isClass).map((e=>({token:e}))):Object.keys(e).reduce(((t,r)=>[...t,...[].concat(e[r]).filter(u.isClass).map((e=>({route:r,token:e})))]),[]):[]}function A(e){return e.map((({token:e})=>E.get(e))).filter((e=>e?.type===c.MODULE&&e.configuration)).flatMap((e=>D(e.configuration)))}function D(e){const t=N.flatMap((t=>j(e[t])));return[...A(t),...t].filter((e=>!!e.route))}class _{constructor(e={}){return this.default=new Map,this.map=new Map,Object.entries({scopes:{},resolvers:[],imports:[],routes:[],logger:{},...e}).forEach((([e,t])=>{this.default.set(e,t)})),(0,u.proxyDelegation)(this,{ownKeys:e=>[...e.default.keys(),...e.map.keys()]})}get version(){return this.get("version")}set version(e){this.map.set("version",e)}get rootDir(){return this.get("rootDir")}set rootDir(e){this.map.set("rootDir",e)}get env(){return this.map.get("env")}set env(e){this.map.set("env",e)}get scopes(){return this.map.get("scopes")}set scopes(e){this.map.set("scopes",e)}get resolvers(){return this.getRaw("resolvers")}set resolvers(e){this.map.set("resolvers",e)}get imports(){return this.get("imports")}set imports(e){this.map.set("imports",e)}get routes(){return this.get("routes")}set routes(e){this.map.set("routes",e)}get logger(){return this.get("logger")}set logger(e){const t={...this.logger,...e};this.map.set("logger",t)}get debug(){return"debug"===this.logger.level}set debug(e){this.logger={...this.logger,level:e?"debug":"info"}}forEach(e,t){return new Set([...Array.from(this.default.keys()),...Array.from(this.map.keys())]).forEach((t=>{e(this.getRaw(t),t,this.map)}),t)}set(e,t){return"string"==typeof e?Reflect.has(this,e)?this[e]=t:this.setRaw(e,t):Object.entries(e).forEach((([e,t])=>{this.set(e,t)})),this}setRaw(e,t){return(0,u.setValue)(this.map,e,t),this}get(e,t){return this.getRaw(e,t)}resolve(e){return e.replace("${rootDir}",this.rootDir)}getRaw(e,t){const r=(0,u.getValue)(this.map,e);return void 0!==r?r:(0,u.getValue)(this.default,e,t)}}var M;let L,x,V=M=class extends S{#t;#r;constructor(){super(),this.settings=new _,this.logger=console,this.resolvedConfiguration=!1,this.#t=new h,this.#r=new u.Hooks,this.#t.set(M,this),L=this}get resolvers(){return this.settings.resolvers}get scopes(){return this.settings.scopes||{}}static getInstance(){if(!L)throw new Error("InjectorService instance is not created yet.");return L}static getLocals(){return x||(x=new h)}static unsetLocals(){x=void 0}scopeOf(e){return e.scope||this.scopes[String(e.type)]||a.SINGLETON}toArray(){return[...this.#t.values()]}get(e,t={}){const r=this.getInstance(e);if(void 0!==r)return r;if(!this.hasProvider(e))for(const r of this.resolvers){const s=r.get(e,t);if(void 0!==s)return s}}getMany(e,t,r){return this.getProviders(e).map((e=>this.invoke(e.token,t,r)))}has(e){return void 0!==this.#t.get(e)}alias(e,t){return this.#t.set(t,this.#t.get(e)),this}invoke(e,t,r={}){let o=t?t.get(e):void 0;if(void 0!==o)return o;if(e===v)return this.settings;if(o=r.rebuild?void 0:this.getInstance(e),null!=o)return o;if(e===s)return r.useOpts;const n=this.ensureProvider(e),i=t=>{this.#t.set(e,t),n?.alias&&this.alias(e,n.alias)};if(!n||r.rebuild)return o=this.resolve(e,t,r),this.hasProvider(e)&&i(o),o;switch(o=this.resolve(e,t,r),this.scopeOf(n)){case a.SINGLETON:return n.hooks&&!r.rebuild&&this.registerHooks(n,o),n.isAsync()&&(0,u.isPromise)(o)?(i(o),o=o.then((e=>(i(e),e))),o):(i(o),o);case a.REQUEST:return t&&(t.set(e,o),n.hooks&&n.hooks.$onDestroy&&t.hooks.on("$onDestroy",((...e)=>n.hooks.$onDestroy(o,...e)))),o}return o}async loadAsync(){for(const[,e]of this)!this.has(e.token)&&e.isAsync()&&await this.invoke(e.token)}loadSync(){for(const[,e]of this)this.has(e.token)||this.scopeOf(e)!==a.SINGLETON||this.invoke(e.token)}bootstrap(e=w()){return this.addProviders(e),this.resolveConfiguration(),this.resolveImportsProviders(),this}loadModule(e){this.settings.routes=this.settings.routes.concat(D(this.settings));const t=w();return t.delete(e),t.addProvider(e,{type:"server:module",scope:a.SINGLETON}),this.load(t)}async load(e=w()){this.bootstrap(e),await this.loadAsync(),this.loadSync(),await this.emit("$beforeInit"),await this.emit("$onInit")}resolveConfiguration(){if(this.resolvedConfiguration)return;const e=new Map;super.forEach((t=>{t.configuration&&"server:module"!==t.type&&Object.entries(t.configuration).forEach((([t,r])=>{["resolvers","mount","imports"].includes(t)||(r=e.has(t)?(0,u.deepMerge)(e.get(t),r):(0,u.deepClone)(r),e.set(t,r))})),t.resolvers&&(this.settings.resolvers=this.settings.resolvers.concat(t.resolvers))})),e.forEach(((e,t)=>{this.settings.set(t,(0,u.deepMerge)(e,this.settings.get(t)))})),this.resolvedConfiguration=!0}async lazyInvoke(e){let t=this.getInstance(e);return t||(t=await this.invoke(e),(0,u.isFunction)(t?.$onInit)&&await t.$onInit()),t}emit(e,...t){return this.#r.asyncEmit(e,t)}alter(e,t,...r){return this.#r.alter(e,t,r)}alterAsync(e,t,...r){return this.#r.asyncAlter(e,t,r)}async destroy(){await this.emit("$onDestroy"),L=void 0}ensureProvider(e,t=!1){return this.hasProvider(e)||!E.has(e)&&!t||this.addProvider(e),this.getProvider(e)}getInstance(e){return this.#t.get(e)}resolve(t,r=new h,o={}){const n=this.mapInvokeOptions(t,r,o);if(!n)return;const{token:i,deps:a,construct:c,imports:l,provider:p}=n;let d;p&&E.onInvoke(p,r,{...n,injector:this});let g=!1;try{const e=e=>(t,n)=>{if(g={token:t,index:n,deps:a},(0,u.isArray)(t))return this.getMany(t[0],r,o);const i=p?.store?.get(`${s}:${n}`)||o.useOpts;return(0,u.isInheritedFrom)(t,m,1)?p:this.invoke(t,r,{parent:e,useOpts:i})};l.forEach(e());const t=a.map(e(i));g=!1,d=c(t)}catch(e){T.throwInjectorError(i,g,e)}if(void 0===d)throw new T(i,`Unable to create new instance from undefined value. Check your provider declaration for ${(0,u.nameOf)(i)}`);return d&&(0,u.isClass)((0,u.classOf)(d))&&Reflect.defineProperty(d,e,{get:()=>({rebuild:o.rebuild,locals:r})}),d}resolveImportsProviders(){this.settings.imports=this.settings.imports?.filter((e=>(0,u.isObject)(e)&&"token"in e&&e.token!==M)).map((e=>{if((0,u.isObject)(e)&&"token"in e){const{token:t,...r}=e,s=this.ensureProvider(t,!0);if(s){if(s.useValue=void 0,s.useAsyncFactory=void 0,s.useFactory=void 0,"useClass"in r)return void(s.useClass=r.useClass);if("useFactory"in r)return void(s.useFactory=r.useFactory);if("useAsyncFactory"in r)return void(s.useAsyncFactory=r.useAsyncFactory);if("use"in r)return void(s.useValue=r.use)}}return e})).filter(Boolean)}mapInvokeOptions(e,t,r){let o,n,i=r.imports,c=r.deps,h=r.scope;if(!e||e===Object)throw new Error("Given token is undefined. Could mean a circular dependency problem. Try to use @Inject(() => Token) to solve it.");if(this.hasProvider(e)?n=this.getProvider(e):(n=new m(e),this.resolvers.forEach((r=>{const o=r.get(e,t.get(s));void 0!==o&&(n.useFactory=()=>o)}))),h=h||this.scopeOf(n),c=c||n.deps,i=i||n.imports,void 0!==n.useValue)o=()=>(0,u.isFunction)(n.useValue)?n.useValue():n.useValue;else if(n.useFactory)o=e=>n.useFactory(...e);else if(n.useAsyncFactory)o=async e=>(e=await Promise.all(e),n.useAsyncFactory(...e));else{if(!n.useClass)return!1;c=c||p(n.useClass),o=e=>new n.useClass(...e)}return{token:e,scope:h||u.Store.from(e).get("scope")||a.SINGLETON,deps:c||[],imports:i||[],construct:o,provider:n}}registerHooks(e,t){e.hooks&&Object.entries(e.hooks).forEach((([r,s])=>{this.#r.on(r,((...r)=>s(this.get(e.token)||t,...r)))}))}};function F(){return e=>class extends e{constructor(...t){super(...function(e,t){const r=new h,s=V.getInstance(),o=p(e),n=[],i=Math.max(o.length,t.length);for(let a=0;a<i;a++)if(void 0!==t[a])n.push(t[a]);else{const t=o[a],i=(0,u.isArray)(t)?s.getMany(t[0],r,{parent:e}):s.invoke(t,r,{parent:e});n.push(i)}return n}(e,t))}}}function $(e,t){return V.getInstance().settings.get(e,t)}function U(e,t,r,s){const o=Symbol();(0,u.catchError)((()=>Reflect.deleteProperty(e,t))),Reflect.defineProperty(e,t,{get(){if(void 0!==this[o])return this[o];const e=$(r,s);return this[o]=Object.freeze((0,u.deepClone)(e)),this[o]},set(e){void 0===($(r,s)||this[o])&&void 0!==e&&(this[o]=e)},enumerable:!0,configurable:!0})}function G(e,t){return(r,s)=>U(r,s,e,t)}V=M=function(e,t,r,s){var o,n=arguments.length,i=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(i=(n<3?o(i):n>3?o(t,r,i):o(t,r))||i);return n>3&&i&&Object.defineProperty(t,r,i),i}([b({scope:a.SINGLETON}),function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}("design:paramtypes",[])],V);var K,q=o(953);function z(e){const{children:t=[],path:r,...s}=function(e){return"string"==typeof e||e instanceof RegExp||(0,u.isArrayOrArrayClass)(e)?{path:e}:e}(e);return(0,u.useDecorators)((e=>{P({provide:e,...s})}),r&&(0,q.Path)(r),(0,q.Children)(...t))}function H(e,t){return u.Store.fromMethod(e,t).get(i)}function B(t,r,s,o){const n=(0,u.classOf)(t),a=Reflect.getOwnPropertyDescriptor(n.prototype,r),c=a.value,h=Symbol();return u.Store.fromMethod(n,r).set(i,o),a.value=function(...n){const i=e=>{if(!e)return c.apply(this,n);throw e},a={target:t,propertyKey:r,args:n,options:o,next:i},u={rebuild:!!this[e]?.rebuild,locals:this[e]?.locals};return this[h]=this[h]||g(s,u),this[h].intercept({...a,options:o},i)},a}function J(e,t){return(...r)=>{const[s,o]=r;switch((0,u.decoratorTypeOf)(r)){case u.DecoratorTypes.CLASS:(0,u.decorateMethodsOf)(s,J(e,t));break;case u.DecoratorTypes.METHOD:return B(s,o,e,t)}}}function Q(){return b({type:c.INTERCEPTOR})}function W(e,t,{optional:r=!1,packageName:s=t.toString()}={}){return(o,n)=>{let i,a;(0,u.catchError)((()=>Reflect.deleteProperty(o,n))),Reflect.defineProperty(o,n,{async get(){if(!a||!i){const o=V.getInstance(),n=await(0,u.importPackage)(s,t,r);if(a=n[e],!a&&!r)throw new Error(`Unable to lazy load the "${e}". The token isn't a valid token provider.`);i=a?await o.lazyInvoke(a):{}}return i}})}}function Y(e,t){return W(e,t,{optional:!0})}function X(e={}){const{scopes:t,imports:r,resolvers:s,deps:o,scope:n,...i}=e;return(0,u.useDecorators)(v(i),b({type:c.MODULE,scope:a.SINGLETON,imports:r,deps:o,injectable:!1,resolvers:s}))}function Z(e=a.REQUEST){return(0,u.StoreSet)("scope",e)}function ee(e,t,r){Z(a.INSTANCE)((0,u.classOf)(e)),y(s)(e,t,r)}function te(e){return t=>{E.get(e).useClass=t}}function re(){return b()}function se(e){return(t,o,n)=>{switch((0,u.decoratorTypeOf)([t,o,n])){case u.DecoratorTypes.PARAM_CTOR:u.Store.from(t).merge(`${s}:${n}`,e);break;case u.DecoratorTypes.PROP:u.Store.from(t,o).set(r,e);break;default:throw new u.UnsupportedDecoratorType(se,[t,o,n])}}}function oe(e,t,r,s){const o={get:()=>V.getInstance().settings.get(r,s),set(e){V.getInstance().settings.set(r,e)},enumerable:!0,configurable:!0};(0,u.catchError)((()=>Reflect.deleteProperty(e,t))),(0,u.catchError)((()=>Reflect.defineProperty(e,t,o)))}function ne(e,t){return(r,s)=>oe(r,s,e,t)}class ie extends m{constructor(e,t={}){super(e,t),this.type=c.CONTROLLER}get middlewares(){return Object.assign({use:[],useAfter:[],useBefore:[]},this.store.get("middlewares",{}))}set middlewares(e){const t=this.middlewares;Object.keys(e).forEach((r=>{((e,t,r)=>{t[e]=t[e].concat(r[e])})(r,t,e)})),this.store.set("middlewares",t)}}!function(e){e.METHOD="method",e.PROPERTY="property",e.CONSTANT="constant",e.VALUE="value",e.INTERCEPTOR="interceptor"}(K||(K={}));const ae=Symbol.for("LOGGER");function ce(e={},t={}){return Object.entries(t).reduce(((e,[t,r])=>({...e,[t]:(e[t]||[]).concat(r)})),e)}function ue(e,t={}){const r=u.Store.from(e).get("configuration")||{};return{...r,...t,mount:ce(r.mount,t.mount)}}I({provide:ae,deps:[V],useFactory:e=>e.logger})})(),n})()));
1
+ !function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("@tsed/core"),require("@tsed/schema")):"function"==typeof define&&define.amd?define(["@tsed/core","@tsed/schema"],t):"object"==typeof exports?exports["@tsed/di"]=t(require("@tsed/core"),require("@tsed/schema")):e["@tsed/di"]=t(e["@tsed/core"],e["@tsed/schema"])}(self,((e,t)=>(()=>{"use strict";var r={803:t=>{t.exports=e},953:e=>{e.exports=t}},s={};function o(e){var t=s[e];if(void 0!==t)return t.exports;var n=s[e]={exports:{}};return r[e](n,n.exports,o),n.exports}o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),o.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var n={};return(()=>{o.r(n),o.d(n,{$alter:()=>be,$alterAsync:()=>ke,$emit:()=>Ee,AutoInjectable:()=>X,Configuration:()=>b,Constant:()=>te,Container:()=>L,Controller:()=>oe,ControllerProvider:()=>S,DIConfiguration:()=>B,DI_INJECTABLE_PROPS:()=>t,DI_INTERCEPTOR_OPTIONS:()=>i,DI_INVOKE_OPTIONS:()=>e,DI_USE_OPTIONS:()=>r,DI_USE_PARAM_OPTIONS:()=>s,GlobalProviderRegistry:()=>C,GlobalProviders:()=>T,Inject:()=>E,Injectable:()=>M,InjectablePropertyType:()=>re,InjectionError:()=>V,InjectorService:()=>J,Intercept:()=>ae,Interceptor:()=>ce,InvalidPropertyTokenError:()=>u,LOGGER:()=>Ie,LazyInject:()=>ue,LocalsContainer:()=>c,Module:()=>he,OptionalLazyInject:()=>le,Opts:()=>de,OverrideProvider:()=>ge,Provider:()=>R,ProviderScope:()=>P,ProviderType:()=>I,Scope:()=>pe,Service:()=>fe,UseOpts:()=>ye,Value:()=>me,bindConstant:()=>ee,bindIntercept:()=>ie,bindValue:()=>ve,cleanAllLocalsContainer:()=>y,colors:()=>F,configuration:()=>Oe,constant:()=>Z,controller:()=>_,createContainer:()=>$,destroyInjector:()=>Y,detachLocalsContainer:()=>f,getConfiguration:()=>Se,getConstructorDependencies:()=>O,getInterceptorOptions:()=>ne,getTokens:()=>G,hasInjector:()=>W,inject:()=>v,injectMany:()=>m,injectable:()=>N,injector:()=>Q,interceptor:()=>D,invokeOptions:()=>g,localsContainer:()=>d,mergeMount:()=>Re,providerBuilder:()=>j,refValue:()=>Pe,registerProvider:()=>w,resolveControllers:()=>z,setConstructorDependencies:()=>k});const e=Symbol("DI_INVOKE_OPTIONS"),t=Symbol("DI_INJECTABLE_PROPS"),r="DI_USE_OPTIONS",s="DI_USE_PARAM_OPTIONS",i="DI_INTERCEPTOR_OPTIONS";var a=o(803);class c extends Map{constructor(){super(...arguments),this.hooks=new a.Hooks}async destroy(){await this.hooks.asyncEmit("$onDestroy")}}Object.create,Object.create,"function"==typeof SuppressedError&&SuppressedError;class u extends Error{constructor(e,t){super(`Object isn't a valid token. Please check the token set on ${(0,a.nameOf)((0,a.classOf)(e))}.${t}.\n- Check that it is not a circular reference.\n- Check that the token (class or symbol) exists`),this.name="INVALID_TOKEN_ERROR"}}let l,h={};const p=[];function d({providers:e,rebuild:t}={}){return l&&!e||(l=new c,e&&(e.forEach((e=>{l.set(e.token,e.use)})),l.set(J,Q())),t&&(h.rebuild=t)),l}function g(){return{...h}}function f(){l&&p.push(l),l=void 0,h={}}function y(){f(),p.map((e=>e.clear()))}function v(e,t){return Q().invoke(e,t?.locals||d(),{...t,...g()})}function m(e,t){return Q().getMany(e,t?.locals||d(),t)}function O(e,t){return a.Metadata.getOwn("override:ctor:design:paramtypes",e,t)||[...a.Metadata.getParamTypes(e,t)]||[]}function k(e,t){a.Metadata.set("override:ctor:design:paramtypes",t,e)}function E(s,o={}){return o="function"==typeof o?{transform:o}:o,(n,i,c)=>{switch((0,a.decoratorTypeOf)([n,i,c])){case a.DecoratorTypes.PARAM_CTOR:s&&function(e,{target:t,propertyKey:r,parameterIndex:s}){const o=O(t,r),n=o[s];o[s]=n===Array?[e]:e,a.Metadata.setParamTypes(t,r,o),k(t,o)}(s,{target:n,propertyKey:i,parameterIndex:c});break;case a.DecoratorTypes.PROP:!function(s,o,{token:n,transform:i=(e=>e),useOpts:c}){const l=Symbol();s[t]||Reflect.defineProperty(s,t,{value:new Set,enumerable:!1,configurable:!1}),s[t].add(o),(0,a.catchError)((()=>Reflect.deleteProperty(s,o))),Reflect.defineProperty(s,o,{get(){const t=function(e,t,r){const s=e||a.Metadata.getType(t,r);if(s===Object)throw new u(t,String(r));return s}(n,s,o),h=a.Metadata.getType(s,o),p={rebuild:!!this[e]?.rebuild,locals:this[e]?.locals,useOpts:c||a.Store.from(s,o).get(r)};return void 0===this[l]&&(this[l]=h===Array?m(n,p):v(t,p)),[].concat(this[l]).forEach(((e,t)=>{(0,a.isPromise)(this[l])&&e.then((e=>{this[l][t]=e,h!==Array&&(this[l]=e)}))})),i(this[l],{self:this,target:s,propertyKey:o})}})}(n,i,{...o,token:s})}}}function b(e={}){return(...t)=>{switch((0,a.decoratorTypeOf)(t)){case a.DecoratorTypes.CLASS:(0,a.StoreSet)("configuration",e)(t[0]);break;default:case a.DecoratorTypes.PARAM_CTOR:return E(b)(t[0],t[1],t[2])}}}var P,I;!function(e){e.SINGLETON="singleton",e.REQUEST="request",e.INSTANCE="instance"}(P||(P={})),function(e){e.VALUE="value",e.PROVIDER="provider",e.MODULE="module",e.CONTROLLER="controller",e.INTERCEPTOR="interceptor",e.MIDDLEWARE="middleware"}(I||(I={}));class R{constructor(e,t={}){this.type=I.PROVIDER,this.provide=e,this.useClass=e,Object.assign(this,{...t})}get token(){return this._provide}get provide(){return this._provide}set provide(e){e&&(this._provide=(0,a.getClassOrSymbol)(e),this._tokenStore=this._store=a.Store.from(e))}get useClass(){return this._useClass}set useClass(e){(0,a.isClass)(e)&&(this._useClass=(0,a.classOf)(e),this._store=a.Store.from(e),this.hooks=(0,a.methodsOf)(this._useClass).reduce(((e,{propertyKey:t})=>String(t).startsWith("$")?{...e,[t]:(e,...r)=>e[t](...r)}:e),{}))}get className(){return this.name}get name(){return(0,a.nameOf)(this.provide)}get store(){return this._store}get path(){return this.store.get("path","/")}set path(e){this.store.set("path",e)}get scope(){return this.isAsync()?P.SINGLETON:this.get("scope")}set scope(e){this.store.set("scope",e)}get configuration(){return this.get("configuration")}set configuration(e){this.store.set("configuration",e)}get children(){return this.store.get("childrenControllers",[])}set children(e){this.store.set("childrenControllers",e)}get(e){return this.store.get(e)||this._tokenStore.get(e)}isAsync(){return!!this.useAsyncFactory}clone(){return new((0,a.classOf)(this))(this._provide,this)}hasChildren(){return!!this.children.length}hasParent(){return!!this.store.get("parentController")}toString(){return["Token",this.name,this.useClass&&(0,a.nameOf)(this.useClass),this.useFactory&&"Factory",this.useValue&&"Value",this.useAsyncFactory&&"AsyncFactory"].filter(Boolean).join(":")}}class S extends R{constructor(e,t={}){super(e,t),this.type=I.CONTROLLER}get middlewares(){return Object.assign({use:[],useAfter:[],useBefore:[]},this.store.get("middlewares",{}))}set middlewares(e){const t=this.middlewares;Object.keys(e).forEach((r=>{((e,t,r)=>{t[e]=t[e].concat(r[e])})(r,t,e)})),this.store.set("middlewares",t)}}class C extends Map{#e=new Map;get(e){return super.get((0,a.getClassOrSymbol)(e))}has(e){return super.has((0,a.getClassOrSymbol)(e))}set(e,t){return super.set((0,a.getClassOrSymbol)(e),t),this}merge(e,t){const r=this.createIfNotExists(e,t);return Object.keys(t).forEach((e=>{r[e]=t[e]})),this.set(e,r),r}delete(e){return super.delete((0,a.getClassOrSymbol)(e))}createRegistry(e,t,r={}){const s=this.getRegistrySettings(e);return r=Object.assign(s,{...r,model:t}),this.#e.set(e,r),this}onInvoke(e,t,r){const s=this.#e.get(e.type);s?.onInvoke&&s.onInvoke(e,t,r)}getRegistrySettings(e){let t=I.PROVIDER;if("string"==typeof e)t=e;else{const r=this.get(e);r&&(t=r.type)}return this.#e.get(t)||{model:R}}createRegisterFn(e){return(t,r)=>{t=Object.assign({instance:r},t,{type:e}),this.merge(t.provide,t)}}createIfNotExists(e,t){const r=t.type||I.PROVIDER;if(!this.has(e)){const{model:s=R}=this.#e.get(r)||{},o=new s(e,t);this.set(e,o)}return this.get(e)}}const T=new C;function w(e){return T.merge(e.provide,e)}function j(e,t={}){return(r,s={})=>{const o=T.merge(r,{...s,...t,provide:r});return e.reduce(((e,t)=>({...e,[t]:function(e){return o[t]=e,this}})),{factory(e){return o.useFactory=e,this},asyncFactory(e){return o.useAsyncFactory=e,this},value(e){return o.useValue=e,o.type=I.VALUE,this},class(e){return o.useClass=e,this},store:()=>o.store,inspect:()=>o,token:()=>o.token})}}T.createRegistry(I.CONTROLLER,S);const A=["type","scope","path","alias","hooks","deps","resolvers","imports","configuration"],N=j(A),D=j(A,{type:I.INTERCEPTOR}),_=j([...A,"middlewares"],{type:I.CONTROLLER});function M(e={}){return t=>{const r={...e,...e.provide?{useClass:t}:{provide:t}};N(r.provide,r)}}class L extends Map{add(e,t={}){const r=T.get(e)?.clone()||new R(e);return Object.assign(r,t),super.set(e,r)}addProvider(e,t={}){return this.add(e,t)}hasProvider(e){return super.has(e)}setProvider(e,t){return super.set(e,t)}getProvider(e){return super.get(e)}getProviders(e){const t=[].concat(e).map(String);return[...this].reduce(((r,[s,o])=>t.includes(String(o.type))||!e?[...r,o]:r),[])}addProviders(e){e.forEach((e=>{this.hasProvider(e.provide)||this.setProvider(e.provide,e.clone())}))}}const x=e=>e=>(process.env.NO_COLOR,e),F={red:x(),yellow:x(),green:x()};class V extends Error{constructor(e,t){super((0,a.isString)(t)?t:""),this.name="INJECTION_ERROR",this.tokens=[],this.tokens=[e],t&&((0,a.isString)(t)?this.origin={message:t,stack:this.stack}:t.tokens?(this.tokens=this.tokens.concat(t.tokens),this.origin=t.origin):(this.origin=t,this.stack=t.stack));const r=this.origin?"\nOrigin: "+this.origin.message:"",s=this.tokens.map((e=>(0,a.nameOf)(e))).join(" > ");this.message=`Injection failed on ${s}${r}`}static throwInjectorError(e,t,r){throw t&&(0,a.isClass)(e)&&(r.message=function(e,t){let r="";const s=(0,a.getConstructorArgNames)(e).map(((e,s)=>(t.index===s&&(r=e,e=F.red(e)),`${e}: ${(0,a.nameOf)(t.deps[s])}`))).join(", "),o=(0,a.nameOf)(e)+"->constructor("+s+")",n=o.indexOf(r)-5;return"Unable to inject dependency. "+t.message+"\n\n"+o+"\n"+(n>-1?(e=>" ".repeat(e)+F.red("^"+"‾".repeat(r.length-1)))(n):"")}(e,{...t,message:r.message})),new V(e,r)}}function $(e){const t=new L(T.entries());return e&&t.delete(e),t}const U=["mount","imports"];function G(e){return e?(0,a.isArray)(e)?e.filter(a.isClass).map((e=>({token:e}))):Object.keys(e).reduce(((t,r)=>[...t,...[].concat(e[r]).filter(a.isClass).map((e=>({route:r,token:e})))]),[]):[]}function K(e){return e.map((({token:e})=>T.get(e))).filter((e=>e?.type===I.MODULE&&e.configuration)).flatMap((e=>z(e.configuration)))}function z(e){const t=U.flatMap((t=>G(e[t])));return[...K(t),...t].filter((e=>!!e.route))}class B{constructor(e={}){this.default=new Map,this.map=new Map,Object.entries({scopes:{},resolvers:[],imports:[],routes:[],logger:{},...e}).forEach((([e,t])=>{this.default.set(e,t)}))}get version(){return this.get("version")}set version(e){this.map.set("version",e)}get rootDir(){return this.get("rootDir")}set rootDir(e){this.map.set("rootDir",e)}get env(){return this.map.get("env")}set env(e){this.map.set("env",e)}get scopes(){return this.map.get("scopes")}set scopes(e){this.map.set("scopes",e)}get resolvers(){return this.getRaw("resolvers")}set resolvers(e){this.map.set("resolvers",e)}get imports(){return this.get("imports")}set imports(e){this.map.set("imports",e)}get routes(){return this.get("routes")}set routes(e){this.map.set("routes",e)}get logger(){return this.get("logger")}set logger(e){const t={...this.logger,...e};this.map.set("logger",t)}get debug(){return"debug"===this.logger.level}set debug(e){this.logger={...this.logger,level:e?"debug":"info"}}forEach(e,t){return new Set([...Array.from(this.default.keys()),...Array.from(this.map.keys())]).forEach((t=>{e(this.getRaw(t),t,this.map)}),t)}set(e,t){return"string"==typeof e?Reflect.has(this,e)?this[e]=t:this.setRaw(e,t):Object.entries(e).forEach((([e,t])=>{this.set(e,t)})),this}setRaw(e,t){return(0,a.setValue)(this.map,e,t),this}get(e,t){return this.getRaw(e,t)}getRaw(e,t){const r=(0,a.getValue)(this.map,e);return void 0!==r?r:(0,a.getValue)(this.default,e,t)}}var H;let q,J=H=class extends L{#t;constructor(){super(),this.settings=new B,this.logger=console,this.resolvedConfiguration=!1,this.#t=new c,this.hooks=new a.Hooks,this.#t.set(H,this)}get resolvers(){return this.settings.resolvers}get scopes(){return this.settings.scopes||{}}scopeOf(e){return e.scope||this.scopes[String(e.type)]||P.SINGLETON}toArray(){return[...this.#t.values()]}get(e,t={}){const r=this.getInstance(e);if(void 0!==r)return r;if(!this.hasProvider(e))for(const r of this.resolvers){const s=r.get(e,t);if(void 0!==s)return s}}getMany(e,t,r){return this.getProviders(e).map((e=>this.invoke(e.token,t,r)))}has(e){return void 0!==this.#t.get(e)}alias(e,t){return this.#t.set(t,this.#t.get(e)),this}invoke(e,t,r={}){let o=t?t.get(e):void 0;if(void 0!==o)return o;if(e===b)return this.settings;if(o=r.rebuild?void 0:this.getInstance(e),null!=o)return o;if(e===s)return r.useOpts;const n=this.ensureProvider(e),i=t=>{this.#t.set(e,t),n?.alias&&this.alias(e,n.alias)};if(!n||r.rebuild)return o=this.resolve(e,t,r),this.hasProvider(e)&&i(o),o;switch(o=this.resolve(e,t,r),this.scopeOf(n)){case P.SINGLETON:return n.hooks&&!r.rebuild&&this.registerHooks(n,o),n.isAsync()&&(0,a.isPromise)(o)?(i(o),o=o.then((e=>(i(e),e))),o):(i(o),o);case P.REQUEST:return t&&(t.set(e,o),n.hooks&&n.hooks.$onDestroy&&t.hooks.on("$onDestroy",((...e)=>n.hooks.$onDestroy(o,...e)))),o}return o}async loadAsync(){for(const[,e]of this)!this.has(e.token)&&e.isAsync()&&await this.invoke(e.token)}loadSync(){for(const[,e]of this)this.has(e.token)||this.scopeOf(e)!==P.SINGLETON||this.invoke(e.token)}bootstrap(e=$()){return this.addProviders(e),this.resolveConfiguration(),this.resolveImportsProviders(),this}loadModule(e){this.settings.routes=this.settings.routes.concat(z(this.settings));const t=$();return t.delete(e),t.addProvider(e,{type:"server:module",scope:P.SINGLETON}),this.load(t)}async load(e=$()){this.bootstrap(e),await this.loadAsync(),this.loadSync(),await this.emit("$beforeInit"),await this.emit("$onInit")}resolveConfiguration(){if(this.resolvedConfiguration)return;const e=new Map;super.forEach((t=>{t.configuration&&"server:module"!==t.type&&Object.entries(t.configuration).forEach((([t,r])=>{["resolvers","mount","imports"].includes(t)||(r=e.has(t)?(0,a.deepMerge)(e.get(t),r):(0,a.deepClone)(r),e.set(t,r))})),t.resolvers&&(this.settings.resolvers=this.settings.resolvers.concat(t.resolvers))})),e.forEach(((e,t)=>{this.settings.set(t,(0,a.deepMerge)(e,this.settings.get(t)))})),this.resolvedConfiguration=!0}async lazyInvoke(e){let t=this.getInstance(e);return t||(t=await this.invoke(e),(0,a.isFunction)(t?.$onInit)&&await t.$onInit()),t}emit(e,...t){return this.hooks.asyncEmit(e,t)}alter(e,t,...r){return this.hooks.alter(e,t,r)}alterAsync(e,t,...r){return this.hooks.asyncAlter(e,t,r)}async destroy(){await this.emit("$onDestroy")}ensureProvider(e,t=!1){return this.hasProvider(e)||!T.has(e)&&!t||this.addProvider(e),this.getProvider(e)}getInstance(e){return this.#t.get(e)}resolve(t,r=new c,o={}){const n=this.mapInvokeOptions(t,r,o);if(!n)return;const{token:i,deps:u,construct:l,imports:h,provider:p}=n;let d;p&&T.onInvoke(p,r,{...n,injector:this});let g=!1;try{const e=e=>(t,n)=>{if(g={token:t,index:n,deps:u},(0,a.isArray)(t))return this.getMany(t[0],r,o);const i=p?.store?.get(`${s}:${n}`)||o.useOpts;return(0,a.isInheritedFrom)(t,R,1)?p:this.invoke(t,r,{parent:e,useOpts:i})};h.forEach(e());const t=u.map(e(i));g=!1,d=l(t)}catch(e){V.throwInjectorError(i,g,e)}if(void 0===d)throw new V(i,`Unable to create new instance from undefined value. Check your provider declaration for ${(0,a.nameOf)(i)}`);return d&&(0,a.isClass)((0,a.classOf)(d))&&Reflect.defineProperty(d,e,{get:()=>({rebuild:o.rebuild,locals:r})}),d}resolveImportsProviders(){this.settings.imports=this.settings.imports?.filter((e=>(0,a.isObject)(e)&&"token"in e&&e.token!==H)).map((e=>{if((0,a.isObject)(e)&&"token"in e){const{token:t,...r}=e,s=this.ensureProvider(t,!0);if(s){if(s.useValue=void 0,s.useAsyncFactory=void 0,s.useFactory=void 0,"useClass"in r)return void(s.useClass=r.useClass);if("useFactory"in r)return void(s.useFactory=r.useFactory);if("useAsyncFactory"in r)return void(s.useAsyncFactory=r.useAsyncFactory);if("use"in r)return void(s.useValue=r.use)}}return e})).filter(Boolean)}mapInvokeOptions(e,t,r){let o,n,i=r.imports,c=r.deps,u=r.scope;if(!e||e===Object)throw new Error("Given token is undefined. Could mean a circular dependency problem. Try to use @Inject(() => Token) to solve it.");if(this.hasProvider(e)?n=this.getProvider(e):(n=new R(e),this.resolvers.forEach((r=>{const o=r.get(e,t.get(s));void 0!==o&&(n.useFactory=()=>o)}))),u=u||this.scopeOf(n),c=c||n.deps,i=i||n.imports,void 0!==n.useValue)o=()=>(0,a.isFunction)(n.useValue)?n.useValue():n.useValue;else if(n.useFactory)o=e=>n.useFactory(...e);else if(n.useAsyncFactory)o=async e=>(e=await Promise.all(e),n.useAsyncFactory(...e));else{if(!n.useClass)return!1;c=c||O(n.useClass),o=e=>new n.useClass(...e)}return{token:e,scope:u||a.Store.from(e).get("scope")||P.SINGLETON,deps:c||[],imports:i||[],construct:o,provider:n}}registerHooks(e,t){e.hooks&&Object.entries(e.hooks).forEach((([r,s])=>{this.hooks.on(r,((...r)=>s(this.get(e.token)||t,...r)))}))}};function Q(e){return q&&!e?.rebuild||(q=new J,e&&e.logger&&(q.logger=e.logger),e?.settings&&q.settings.set(e.settings)),q}function W(){return!!q}async function Y(){await(q?.destroy()),q=void 0}function X(){return e=>class extends e{constructor(...t){super(...function(e,t){const r=Q(),s=new c,o=O(e),n=[],i=Math.max(o.length,t.length);for(let c=0;c<i;c++)if(void 0!==t[c])n.push(t[c]);else{const t=o[c],i=(0,a.isArray)(t)?r.getMany(t[0],s,{parent:e}):r.invoke(t,s,{parent:e});n.push(i)}return n}(e,t))}}}function Z(e,t){return Q().settings.get(e,t)}function ee(e,t,r,s){const o=Symbol();(0,a.catchError)((()=>Reflect.deleteProperty(e,t))),Reflect.defineProperty(e,t,{get(){if(void 0!==this[o])return this[o];const e=Z(r,s);return this[o]=Object.freeze((0,a.deepClone)(e)),this[o]},set(e){void 0===(Z(r,s)||this[o])&&void 0!==e&&(this[o]=e)},enumerable:!0,configurable:!0})}function te(e,t){return(r,s)=>ee(r,s,e,t)}J=H=function(e,t,r,s){var o,n=arguments.length,i=n<3?t:null===s?s=Object.getOwnPropertyDescriptor(t,r):s;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,r,s);else for(var a=e.length-1;a>=0;a--)(o=e[a])&&(i=(n<3?o(i):n>3?o(t,r,i):o(t,r))||i);return n>3&&i&&Object.defineProperty(t,r,i),i}([M({scope:P.SINGLETON}),function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}("design:paramtypes",[])],J);var re,se=o(953);function oe(e){const{children:t=[],path:r,...s}=function(e){return"string"==typeof e||e instanceof RegExp||(0,a.isArrayOrArrayClass)(e)?{path:e}:e}(e);return(0,a.useDecorators)((e=>{_(e,s)}),r&&(0,se.Path)(r),(0,se.Children)(...t))}function ne(e,t){return a.Store.fromMethod(e,t).get(i)}function ie(t,r,s,o){const n=(0,a.classOf)(t),c=Reflect.getOwnPropertyDescriptor(n.prototype,r),u=c.value,l=Symbol();return a.Store.fromMethod(n,r).set(i,o),c.value=function(...n){const i=e=>{if(!e)return u.apply(this,n);throw e},a={target:t,propertyKey:r,args:n,options:o,next:i},c={rebuild:!!this[e]?.rebuild,locals:this[e]?.locals};return this[l]=this[l]||v(s,c),this[l].intercept({...a,options:o},i)},c}function ae(e,t){return(...r)=>{const[s,o]=r;switch((0,a.decoratorTypeOf)(r)){case a.DecoratorTypes.CLASS:(0,a.decorateMethodsOf)(s,ae(e,t));break;case a.DecoratorTypes.METHOD:return ie(s,o,e,t)}}}function ce(){return M({type:I.INTERCEPTOR})}function ue(e,t,{optional:r=!1,packageName:s=t.toString()}={}){return(o,n)=>{let i,c;(0,a.catchError)((()=>Reflect.deleteProperty(o,n))),Reflect.defineProperty(o,n,{async get(){if(!c||!i){const o=await(0,a.importPackage)(s,t,r);if(c=o[e],!c&&!r)throw new Error(`Unable to lazy load the "${e}". The token isn't a valid token provider.`);i=c?await Q().lazyInvoke(c):{}}return i}})}}function le(e,t){return ue(e,t,{optional:!0})}function he(e={}){const{scopes:t,imports:r,resolvers:s,deps:o,scope:n,...i}=e;return(0,a.useDecorators)(b(i),M({type:I.MODULE,scope:P.SINGLETON,imports:r,deps:o,injectable:!1,resolvers:s}))}function pe(e=P.REQUEST){return(0,a.StoreSet)("scope",e)}function de(e,t,r){pe(P.INSTANCE)((0,a.classOf)(e)),E(s)(e,t,r)}function ge(e){return t=>{T.get(e).useClass=t}}function fe(){return M()}function ye(e){return(t,o,n)=>{switch((0,a.decoratorTypeOf)([t,o,n])){case a.DecoratorTypes.PARAM_CTOR:a.Store.from(t).merge(`${s}:${n}`,e);break;case a.DecoratorTypes.PROP:a.Store.from(t,o).set(r,e);break;default:throw new a.UnsupportedDecoratorType(ye,[t,o,n])}}}function ve(e,t,r,s){const o={get:()=>Q().settings.get(r,s),set(e){Q().settings.set(r,e)},enumerable:!0,configurable:!0};(0,a.catchError)((()=>Reflect.deleteProperty(e,t))),(0,a.catchError)((()=>Reflect.defineProperty(e,t,o)))}function me(e,t){return(r,s)=>ve(r,s,e,t)}function Oe(){return Q().settings}function ke(e,t,...r){return Q().hooks.asyncAlter(e,t,r)}function Ee(e,...t){return Q().hooks.asyncEmit(e,t)}function be(e,t,...r){return Q().hooks.alter(e,t,r)}function Pe(e,t){return Object.freeze({get value(){return Q().settings.get(e,t)},set value(t){Q().settings.set(e,t)}})}!function(e){e.METHOD="method",e.PROPERTY="property",e.CONSTANT="constant",e.VALUE="value",e.INTERCEPTOR="interceptor"}(re||(re={}));const Ie=Symbol.for("LOGGER");function Re(e={},t={}){return Object.entries(t).reduce(((e,[t,r])=>({...e,[t]:(e[t]||[]).concat(r)})),e)}function Se(e,t={}){const r=a.Store.from(e).get("configuration")||{};return{...r,...t,mount:Re(r.mount,t.mount)}}w({provide:Ie,deps:[J],useFactory:e=>e.logger})})(),n})()));
2
2
  //# sourceMappingURL=di.umd.min.js.map