@tsed/di 8.8.2 → 8.8.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"di.umd.min.js","mappings":"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","sources":["webpack://@tsed/di/webpack/universalModuleDefinition","webpack://@tsed/di/external umd \"@tsed/core\"","webpack://@tsed/di/external umd \"@tsed/hooks\"","webpack://@tsed/di/external umd \"@tsed/schema\"","webpack://@tsed/di/webpack/bootstrap","webpack://@tsed/di/webpack/runtime/define property getters","webpack://@tsed/di/webpack/runtime/hasOwnProperty shorthand","webpack://@tsed/di/webpack/runtime/make namespace object","webpack://@tsed/di/./src/common/constants/constants.ts","webpack://@tsed/di/./src/common/domain/ProviderScope.ts","webpack://@tsed/di/./src/common/domain/ProviderType.ts","webpack://@tsed/di/./src/common/domain/LocalsContainer.ts","webpack://@tsed/di/./src/common/utils/discoverHooks.ts","webpack://@tsed/di/./src/common/domain/Provider.ts","webpack://@tsed/di/./src/common/registries/GlobalProviders.ts","webpack://@tsed/di/./src/common/domain/Container.ts","webpack://@tsed/di/./src/common/utils/colors.ts","webpack://@tsed/di/./src/common/errors/InjectionError.ts","webpack://@tsed/di/./src/common/utils/createContainer.ts","webpack://@tsed/di/./src/common/utils/getConstructorDependencies.ts","webpack://@tsed/di/./src/common/services/DIConfiguration.ts","webpack://@tsed/di/./src/common/services/InjectorService.ts","webpack://@tsed/di/./src/common/fn/injector.ts","webpack://@tsed/di/./src/common/decorators/autoInjectable.ts","webpack://@tsed/di/./src/common/fn/configuration.ts","webpack://@tsed/di/./src/common/domain/ControllerProvider.ts","webpack://@tsed/di/./src/common/registries/ProviderRegistry.ts","webpack://@tsed/di/./src/common/utils/providerBuilder.ts","webpack://@tsed/di/./src/common/fn/injectable.ts","webpack://@tsed/di/./src/common/errors/InvalidPropertyTokenError.ts","webpack://@tsed/di/./src/common/fn/localsContainer.ts","webpack://@tsed/di/./src/common/fn/inject.ts","webpack://@tsed/di/./src/common/fn/injectMany.ts","webpack://@tsed/di/./src/common/decorators/inject.ts","webpack://@tsed/di/./src/common/decorators/configuration.ts","webpack://@tsed/di/./src/common/fn/constant.ts","webpack://@tsed/di/./src/common/decorators/constant.ts","webpack://@tsed/di/./src/common/domain/InjectablePropertyType.ts","webpack://@tsed/di/./src/common/decorators/controller.ts","webpack://@tsed/di/./src/common/decorators/injectable.ts","webpack://@tsed/di/./src/common/decorators/intercept.ts","webpack://@tsed/di/./src/common/decorators/interceptor.ts","webpack://@tsed/di/./src/common/fn/lazyInject.ts","webpack://@tsed/di/./src/common/decorators/lazyInject.ts","webpack://@tsed/di/./src/common/decorators/module.ts","webpack://@tsed/di/./src/common/decorators/scope.ts","webpack://@tsed/di/./src/common/decorators/opts.ts","webpack://@tsed/di/./src/common/decorators/overrideProvider.ts","webpack://@tsed/di/./src/common/decorators/service.ts","webpack://@tsed/di/./src/common/decorators/useOpts.ts","webpack://@tsed/di/./src/common/decorators/value.ts","webpack://@tsed/di/./src/common/fn/refValue.ts","webpack://@tsed/di/./src/common/services/DILogger.ts","webpack://@tsed/di/./src/common/utils/getConfiguration.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@tsed/core\"), require(\"@tsed/hooks\"), require(\"@tsed/schema\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@tsed/core\", \"@tsed/hooks\", \"@tsed/schema\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@tsed/di\"] = factory(require(\"@tsed/core\"), require(\"@tsed/hooks\"), require(\"@tsed/schema\"));\n\telse\n\t\troot[\"@tsed/di\"] = factory(root[\"@tsed/core\"], root[\"@tsed/hooks\"], root[\"@tsed/schema\"]);\n})(self, (__WEBPACK_EXTERNAL_MODULE__414__, __WEBPACK_EXTERNAL_MODULE__171__, __WEBPACK_EXTERNAL_MODULE__538__) => {\nreturn ","module.exports = __WEBPACK_EXTERNAL_MODULE__414__;","module.exports = __WEBPACK_EXTERNAL_MODULE__171__;","module.exports = __WEBPACK_EXTERNAL_MODULE__538__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export const DI_INVOKE_OPTIONS = Symbol(\"DI_INVOKE_OPTIONS\");\nexport const DI_INJECTABLE_PROPS = Symbol(\"DI_INJECTABLE_PROPS\");\nexport const DI_USE_OPTIONS = \"DI_USE_OPTIONS\";\nexport const DI_USE_PARAM_OPTIONS = \"DI_USE_PARAM_OPTIONS\";\nexport const DI_INTERCEPTOR_OPTIONS = \"DI_INTERCEPTOR_OPTIONS\";\n","export enum ProviderScope {\n SINGLETON = \"singleton\",\n REQUEST = \"request\",\n INSTANCE = \"instance\"\n}\n","export enum ProviderType {\n VALUE = \"value\",\n PROVIDER = \"provider\",\n MODULE = \"module\",\n CONTROLLER = \"controller\",\n INTERCEPTOR = \"interceptor\",\n MIDDLEWARE = \"middleware\"\n}\n","import {Hooks} from \"@tsed/hooks\";\n\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\n\nexport class LocalsContainer extends Map<TokenProvider, any> {\n readonly hooks = new Hooks();\n\n async destroy() {\n await this.hooks.asyncEmit(\"$onDestroy\");\n }\n}\n","import {type AbstractType, methodsOf, type Type} from \"@tsed/core\";\n\nexport function discoverHooks(token: Type | AbstractType<any>) {\n return methodsOf(token).reduce((hooks, {propertyKey}) => {\n if (String(propertyKey).startsWith(\"$\")) {\n const listener = (instance: any, ...args: any[]) => instance?.[propertyKey](...args);\n\n return {\n ...hooks,\n [propertyKey]: listener\n };\n }\n return hooks;\n }, {} as any);\n}\n","import {type AbstractType, classOf, getClassOrSymbol, isClass, nameOf, Store, Type} from \"@tsed/core\";\n\nimport {DI_USE_PARAM_OPTIONS} from \"../constants/constants.js\";\nimport type {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {discoverHooks} from \"../utils/discoverHooks.js\";\nimport {ProviderScope} from \"./ProviderScope.js\";\nimport {ProviderType} from \"./ProviderType.js\";\n\nexport type ProviderHookCallback<T = any> = (instance: T, ...args: unknown[]) => Promise<void> | void;\n\nexport class Provider<T = any> implements ProviderOpts<T> {\n /**\n * Token group provider to retrieve all provider from the same type\n */\n public type: ProviderType | TokenProvider = ProviderType.PROVIDER;\n public deps: TokenProvider[];\n public imports: (TokenProvider | [TokenProvider])[];\n public alias: string;\n public priority: number;\n public useFactory?: Function;\n public useAsyncFactory?: Function;\n public useValue?: unknown;\n public hooks: Record<string, ProviderHookCallback<T>> = {};\n #useClass: Type<T>;\n #token: TokenProvider;\n #store: Store;\n #tokenStore: Store;\n\n [key: string]: any;\n\n constructor(token: TokenProvider<T>, options: Partial<Provider> = {}) {\n this.token = token;\n this.useClass = token as Type<T>;\n\n Object.assign(this, options);\n\n if (options instanceof Provider) {\n this.#useClass = options.#useClass;\n this.#store = options.#store;\n this.#tokenStore = options.#tokenStore;\n }\n }\n\n get token() {\n return this.#token;\n }\n\n set token(value: TokenProvider) {\n if (value) {\n this.#token = getClassOrSymbol(value);\n this.#tokenStore = this.#store = Store.from(value);\n }\n }\n\n /**\n * @deprecated\n */\n get provide(): TokenProvider {\n return this.token;\n }\n\n /**\n * @deprecated\n * @param value\n */\n set provide(value: TokenProvider) {\n this.token = value;\n }\n\n get useClass(): Type<T> {\n return this.#useClass;\n }\n\n /**\n * Create a new store if the given value is a class. Otherwise, the value is ignored.\n * @param value\n */\n set useClass(value: Type<T> | AbstractType<T>) {\n if (isClass(value)) {\n this.#useClass = classOf(value);\n this.#store = Store.from(value);\n this.hooks = discoverHooks(this.#useClass);\n }\n }\n\n get className() {\n return this.name;\n }\n\n get name() {\n return nameOf(this.token);\n }\n\n get store(): Store {\n return this.#store;\n }\n\n get path() {\n return this.store.get(\"path\", \"/\");\n }\n\n set path(path: string) {\n this.store.set(\"path\", path);\n }\n\n /**\n * Get the scope of the provider.\n *\n * ::: tip Note\n * Async provider is always a SINGLETON\n * :::\n *\n * @returns {boolean}\n */\n get scope(): ProviderScope {\n if (this.isAsync()) {\n return ProviderScope.SINGLETON;\n }\n\n return this.get<ProviderScope>(\"scope\", ProviderScope.SINGLETON);\n }\n\n /**\n * Change the scope value of the provider.\n * @param scope\n */\n set scope(scope: ProviderScope) {\n this.store.set(\"scope\", scope);\n }\n\n get configuration(): Partial<TsED.Configuration> {\n return this.get(\"configuration\")!;\n }\n\n set configuration(configuration: Partial<TsED.Configuration>) {\n this.store.set(\"configuration\", configuration);\n }\n\n get children(): TokenProvider[] {\n return this.store.get(\"childrenControllers\", []);\n }\n\n set children(children: TokenProvider[]) {\n this.store.set(\"childrenControllers\", children);\n }\n\n getArgOpts(index: number) {\n return this.store.get(`${DI_USE_PARAM_OPTIONS}:${index}`);\n }\n\n /**\n * Retrieves a value from the provider's store.\n * @param key The key to look up\n * @returns The value if found, undefined otherwise\n */\n get<Type = unknown>(key: string): Type | undefined;\n /**\n * Retrieves a value from the provider's store with a default fallback.\n * @param key The key to look up\n * @param defaultValue The value to return if key is not found\n * @returns The found value or defaultValue\n */\n get<Type = unknown>(key: string, defaultValue: Type): Type;\n get<Type = unknown>(key: string, defaultValue?: Type): Type | undefined {\n return this.store.get(key) || this.#tokenStore.get(key) || defaultValue;\n }\n\n isAsync(): boolean {\n return !!this.useAsyncFactory;\n }\n\n clone(): Provider {\n return new (classOf(this))(this.token, this);\n }\n\n /**\n *\n * @returns {boolean}\n */\n public hasChildren(): boolean {\n return !!this.children.length;\n }\n\n /**\n *\n * @returns {boolean}\n */\n public hasParent(): boolean {\n return !!this.store.get(\"parentController\");\n }\n\n toString() {\n return [\n \"Token\",\n this.name,\n this.useClass && nameOf(this.useClass),\n this.useFactory && \"Factory\",\n this.useValue && \"Value\",\n this.useAsyncFactory && \"AsyncFactory\"\n ]\n .filter(Boolean)\n .join(\":\");\n }\n}\n","import {getClassOrSymbol, Type} from \"@tsed/core\";\n\nimport {Provider} from \"../domain/Provider.js\";\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\nimport {RegistrySettings} from \"../interfaces/RegistrySettings.js\";\nimport {TokenProvider} from \"../interfaces/TokenProvider.js\";\n\nexport class GlobalProviderRegistry extends Map<TokenProvider, Provider> {\n #settings: Map<TokenProvider, RegistrySettings> = new Map();\n\n /**\n * The get() method returns a specified element from a Map object.\n * @param key Required. The key of the element to return from the Map object.\n * @returns {T} Returns the element associated with the specified key or undefined if the key can't be found in the Map object.\n */\n get(key: TokenProvider): Provider | undefined {\n return super.get(getClassOrSymbol(key));\n }\n\n /**\n * The has() method returns a boolean indicating whether an element with the specified key exists or not.\n * @param key\n * @returns {boolean}\n */\n has(key: TokenProvider): boolean {\n return super.has(getClassOrSymbol(key));\n }\n\n /**\n * The set() method adds or updates an element with a specified key and value to a Map object.\n * @param key Required. The key of the element to add to the Map object.\n * @param metadata Required. The value of the element to add to the Map object.\n */\n set(key: TokenProvider, metadata: Provider): this {\n super.set(getClassOrSymbol(key), metadata);\n\n return this;\n }\n\n /**\n *\n * @param target\n * @param options\n */\n merge(target: TokenProvider, options: Partial<ProviderOpts>) {\n if (options.global === false) {\n return GlobalProviders.createProvider(target, options);\n }\n\n const meta = this.createIfNotExists(target, options);\n\n Object.keys(options).forEach((key) => {\n meta[key] = (options as never)[key];\n });\n\n this.set(target, meta);\n\n return meta;\n }\n\n /**\n * The delete() method removes the specified element from a Map object.\n * @param key Required. The key of the element to remove from the Map object.\n * @returns {boolean} Returns true if an element in the Map object existed and has been removed, or false if the element does not exist.\n */\n delete(key: TokenProvider): boolean {\n return super.delete(getClassOrSymbol(key));\n }\n\n createRegistry(type: string | symbol, model: Type<Provider>, options: Partial<RegistrySettings> = {}) {\n const defaultOptions = this.getRegistrySettings(type);\n\n options = Object.assign(defaultOptions, {\n ...options,\n model\n });\n\n this.#settings.set(type, options);\n\n return this;\n }\n\n getRegistrySettings(target: TokenProvider): RegistrySettings {\n let type: TokenProvider | ProviderType = ProviderType.PROVIDER;\n\n if (typeof target === \"string\") {\n type = target;\n } else {\n const provider = this.get(target);\n if (provider) {\n type = provider.type;\n }\n }\n\n return (\n this.#settings.get(type) || {\n model: Provider\n }\n );\n }\n\n protected createProvider(key: TokenProvider, options: Partial<ProviderOpts<any>>) {\n const type = options.type || ProviderType.PROVIDER;\n const {model = Provider} = this.#settings.get(type) || {};\n\n return new model(key, options);\n }\n\n /**\n *\n * @param key\n * @param options\n */\n protected createIfNotExists(key: TokenProvider, options: Partial<ProviderOpts>): Provider {\n if (!this.has(key)) {\n const item = this.createProvider(key, options);\n\n this.set(key, item);\n }\n\n return this.get(key)!;\n }\n}\n\n/**\n *\n * @type {GlobalProviders}\n */\n// tslint:disable-next-line: variable-name\nexport const GlobalProviders = new GlobalProviderRegistry();\n","import type {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {GlobalProviders} from \"../registries/GlobalProviders.js\";\nimport {Provider} from \"./Provider.js\";\nimport type {ProviderType} from \"./ProviderType.js\";\n\nexport class Container extends Map<TokenProvider, Provider> {\n /**\n *\n * @param token\n * @param settings\n */\n public add(token: TokenProvider, settings: Partial<ProviderOpts> = {}): this {\n const provider = GlobalProviders.get(token)?.clone() || new Provider(token);\n\n Object.assign(provider, settings);\n\n return super.set(token, provider);\n }\n\n /**\n * Add a provider to the\n * @param token\n * @param settings\n */\n public addProvider(token: TokenProvider, settings: Partial<ProviderOpts> = {}): this {\n return this.add(token, settings);\n }\n\n /**\n *\n * @param token\n */\n public hasProvider(token: TokenProvider) {\n return super.has(token);\n }\n\n /**\n * Add a provider to the\n * @param token\n * @param provider\n */\n public setProvider(token: TokenProvider, provider: Provider) {\n return super.set(token, provider);\n }\n\n /**\n * The getProvider() method returns a specified element from a Map object.\n * @returns {T} Returns the element associated with the specified key or undefined if the key can't be found in the Map object.\n * @param token\n */\n public getProvider<T extends Provider = Provider>(token: TokenProvider | undefined): T | undefined {\n return super.get(token!) as T;\n }\n\n /**\n * Get all providers registered in the injector container.\n *\n * @param type Filter the list by the given ProviderType.\n * @returns {[TokenProvider , Provider<any>][]}\n */\n public getProviders(type?: TokenProvider | ProviderType | string | string[]): Provider[] {\n const types = ([] as (string | ProviderType)[]).concat(type as never).map(String);\n\n return [...this].reduce((providers, [_, provider]) => {\n if (types.includes(String(provider.type)) || !type) {\n return [...providers, provider];\n }\n return providers;\n }, []);\n }\n\n public addProviders(container: Map<TokenProvider, Provider>) {\n container.forEach((provider) => {\n if (!this.hasProvider(provider.token)) {\n this.setProvider(provider.token, provider.clone());\n }\n });\n }\n}\n","type ColorTextFn = (text: string) => string;\n\n// istanbul ignore next\nconst colorIfAllowed = (colorFn: ColorTextFn) => (text: string) =>\n !process.env.NO_COLOR && process.env.NODE_ENV !== \"production\" ? colorFn(text) : text;\n\nconst red = colorIfAllowed((text: string) => `\\x1B[31m${text}\\x1B[39m`);\nconst yellow = colorIfAllowed((text: string) => `\\x1B[33m${text}\\x1B[39m`);\nconst green = colorIfAllowed((text: string) => `\\x1B[32m${text}\\x1B[39m`);\n\nexport const colors = {red, yellow, green};\n","import {getConstructorArgNames, isClass, isString, nameOf} from \"@tsed/core\";\n\nimport {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {colors} from \"../utils/colors.js\";\n\nexport class InjectionError extends Error {\n name = \"INJECTION_ERROR\";\n\n public tokens: TokenProvider[] = [];\n public origin: any;\n\n constructor(token: TokenProvider, origin?: any) {\n super(isString(origin) ? origin : \"\");\n\n this.tokens = [token];\n\n if (origin) {\n if (isString(origin)) {\n this.origin = {\n message: origin,\n stack: this.stack\n };\n } else {\n if (origin.tokens) {\n this.tokens = this.tokens.concat(origin.tokens);\n this.origin = origin.origin;\n } else {\n this.origin = origin;\n this.stack = origin.stack;\n }\n }\n }\n\n const originMessage = this.origin ? \"\\nOrigin: \" + this.origin.message : \"\";\n const tokensMessage = this.tokens.map((token) => nameOf(token)).join(\" > \");\n\n this.message = `Injection failed on ${tokensMessage}${originMessage}`;\n }\n\n static throwInjectorError(token: any, currentDependency: any, error: any) {\n if (currentDependency && isClass(token)) {\n error.message = printDependencyInjectionError(token, {...currentDependency, message: error.message});\n }\n\n throw new InjectionError(token, error);\n }\n}\n\nfunction printDependencyInjectionError(token: any, options: {token: any; index: number; deps: any[]; message: string}) {\n let erroredArg = \"\";\n\n const args = getConstructorArgNames(token)\n .map((arg, index) => {\n if (options.index === index) {\n erroredArg = arg;\n arg = colors.red(arg);\n }\n\n return `${arg}: ${nameOf(options.deps[index])}`;\n })\n .join(\", \");\n\n const signature = nameOf(token) + \"->constructor(\" + args + \")\";\n const indexOf = signature.indexOf(erroredArg) - 5;\n const drawline = (indexOf: number) => \" \".repeat(indexOf) + colors.red(\"^\" + \"‾\".repeat(erroredArg.length - 1));\n\n return \"Unable to inject dependency. \" + options.message + \"\\n\\n\" + signature + \"\\n\" + (indexOf > -1 ? drawline(indexOf) : \"\");\n}\n","import {Type} from \"@tsed/core\";\n\nimport {Container} from \"../domain/Container.js\";\nimport {GlobalProviders} from \"../registries/GlobalProviders.js\";\n\nexport function createContainer(rootModule?: Type<any>) {\n const container = new Container(GlobalProviders.entries());\n\n if (rootModule) {\n container.delete(rootModule);\n }\n\n return container;\n}\n","import {Metadata} from \"@tsed/core\";\n\nexport function getConstructorDependencies(target: any, propertyKey?: string | symbol | undefined) {\n return Metadata.getOwn(\"override:ctor:design:paramtypes\", target, propertyKey) || [...Metadata.getParamTypes(target, propertyKey)] || [];\n}\n\nexport function setConstructorDependencies(target: any, deps: any[]) {\n Metadata.set(\"override:ctor:design:paramtypes\", deps, target);\n}\n","import {Env, getValue, setValue} from \"@tsed/core\";\n\nimport type {DILoggerOptions} from \"../interfaces/DILoggerOptions.js\";\nimport type {ImportTokenProviderOpts} from \"../interfaces/ImportTokenProviderOpts.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport type {TokenRoute} from \"../interfaces/TokenRoute.js\";\n\nexport const CONFIGURATION = Symbol.for(\"CONFIGURATION\");\n\nexport class DIConfiguration {\n readonly default: Map<string, any> = new Map();\n protected map: Map<string, any> = new Map();\n\n constructor(initialProps = {}) {\n Object.entries({\n imports: [],\n routes: [],\n logger: {},\n ...initialProps\n }).forEach(([key, value]) => {\n this.default.set(key, value);\n });\n }\n\n get version() {\n return this.get(\"version\")!;\n }\n\n set version(v: string) {\n this.map.set(\"version\", v);\n }\n\n get rootDir() {\n return this.get(\"rootDir\")!;\n }\n\n set rootDir(value: string) {\n this.map.set(\"rootDir\", value);\n }\n\n get env(): Env {\n return this.map.get(\"env\");\n }\n\n set env(value: Env) {\n this.map.set(\"env\", value);\n }\n\n get imports(): (TokenProvider | ImportTokenProviderOpts)[] {\n return this.get(\"imports\")!;\n }\n\n set imports(imports: (TokenProvider | ImportTokenProviderOpts)[]) {\n this.map.set(\"imports\", imports);\n }\n\n get routes(): TokenRoute[] {\n return this.get(\"routes\")!;\n }\n\n set routes(routes: TokenRoute[]) {\n this.map.set(\"routes\", routes);\n }\n\n get logger(): Partial<DILoggerOptions> {\n return this.get(\"logger\")!;\n }\n\n set logger(value: Partial<DILoggerOptions>) {\n const logger = {...this.logger, ...value};\n this.map.set(\"logger\", logger);\n }\n\n get debug(): boolean {\n return this.logger.level === \"debug\";\n }\n\n set debug(debug: boolean) {\n this.logger = {...this.logger, level: debug ? \"debug\" : \"info\"};\n }\n\n /**\n *\n * @param callbackfn\n * @param thisArg\n */\n forEach(callbackfn: (value: any, index: string, map: Map<string, any>) => void, thisArg?: any) {\n return new Set([...Array.from(this.default.keys()), ...Array.from(this.map.keys())]).forEach((key) => {\n callbackfn(this.getRaw(key), key, this.map);\n }, thisArg);\n }\n\n /**\n *\n * @param propertyKey\n * @param value\n */\n set(propertyKey: string | Partial<TsED.Configuration>, value?: any): this {\n if (typeof propertyKey === \"string\") {\n if (Reflect.has(this, propertyKey)) {\n // @ts-ignore\n this[propertyKey] = value;\n } else {\n this.setRaw(propertyKey, value);\n }\n } else {\n Object.entries(propertyKey).forEach(([key, value]) => {\n this.set(key, value);\n });\n }\n\n return this;\n }\n\n setRaw(propertyKey: string, value: any) {\n setValue(this.map, propertyKey, value);\n\n return this;\n }\n\n /**\n *\n * @param propertyKey\n * @param defaultValue\n * @returns {undefined|any}\n */\n get<T = any>(propertyKey: string, defaultValue?: T): T {\n return this.getRaw(propertyKey, defaultValue);\n }\n\n protected getRaw(propertyKey: string, defaultValue?: any): any {\n const value = getValue(this.map, propertyKey);\n\n if (value !== undefined) {\n return value;\n }\n\n return getValue(this.default, propertyKey, defaultValue);\n }\n}\n","import {classOf, deepClone, deepMerge, isArray, isClass, isFunction, isInheritedFrom, isObject, isPromise, nameOf} from \"@tsed/core\";\nimport {$alter, $asyncAlter, $asyncEmit, $emit, $off, $on} from \"@tsed/hooks\";\n\nimport {DI_INVOKE_OPTIONS, DI_USE_PARAM_OPTIONS} from \"../constants/constants.js\";\nimport {Container} from \"../domain/Container.js\";\nimport {LocalsContainer} from \"../domain/LocalsContainer.js\";\nimport {Provider} from \"../domain/Provider.js\";\nimport {ProviderScope} from \"../domain/ProviderScope.js\";\nimport {InjectionError} from \"../errors/InjectionError.js\";\nimport type {DILogger} from \"../interfaces/DILogger.js\";\nimport type {ImportTokenProviderOpts} from \"../interfaces/ImportTokenProviderOpts.js\";\nimport type {InvokeOptions} from \"../interfaces/InvokeOptions.js\";\nimport type {ResolvedInvokeOptions} from \"../interfaces/ResolvedInvokeOptions.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {GlobalProviders} from \"../registries/GlobalProviders.js\";\nimport {createContainer} from \"../utils/createContainer.js\";\nimport {getConstructorDependencies} from \"../utils/getConstructorDependencies.js\";\nimport {DIConfiguration} from \"./DIConfiguration.js\";\n\nconst EXCLUDED_CONFIGURATION_KEYS = [\"mount\", \"imports\"];\n\n/**\n * This service contain all services collected by `@Service` or services declared manually with `InjectorService.factory()` or `InjectorService.service()`.\n *\n * ### Example:\n *\n * ```typescript\n * import {InjectorService} from \"@tsed/di\";\n *\n * // Import the services (all services are decorated with @Service()\";\n * import MyService1 from \"./services/service1.js\";\n * import MyService2 from \"./services/service2.js\";\n * import MyService3 from \"./services/service3.js\";\n *\n * // When all services are imported, you can load InjectorService.\n *\n * await injector().load();\n *\n * const myService1 = injector.get<MyService1>(MyService1);\n * ```\n */\nexport class InjectorService extends Container {\n public logger: DILogger = console;\n private resolvedConfiguration: boolean = false;\n #cache = new LocalsContainer();\n #loaded: boolean = false;\n\n constructor() {\n super();\n this.#cache.set(InjectorService, this);\n this.#cache.set(DIConfiguration, new DIConfiguration());\n }\n\n get settings(): DIConfiguration {\n return this.#cache.get(DIConfiguration);\n }\n\n set settings(settings: DIConfiguration) {\n this.#cache.set(DIConfiguration, settings);\n }\n\n isLoaded() {\n return this.#loaded;\n }\n\n /**\n * Return a list of instance build by the injector.\n */\n public toArray(): any[] {\n return [...this.#cache.values()];\n }\n\n /**\n * Get a service or factory already constructed from his symbol or class.\n *\n * #### Example\n *\n * ```typescript\n * import {InjectorService} from \"@tsed/di\";\n * import MyService from \"./services.js\";\n *\n * class OtherService {\n * constructor(injectorService: InjectorService) {\n * const myService = injectorService.get<MyService>(MyService);\n * }\n * }\n * ```\n *\n * @param token The class or symbol registered in InjectorService.\n * @param options\n */\n get<T = any>(token: TokenProvider<T>, options?: Partial<InvokeOptions>): T {\n if (!this.has(token)) {\n return this.resolve(token, options);\n }\n\n return this.#cache.get(token);\n }\n\n /**\n * Return all instance of the same provider type\n */\n getMany<Type = any>(type: any, options?: Partial<InvokeOptions>): Type[] {\n return this.getProviders(type).map((provider) => {\n return this.resolve<Type>(provider.token, options);\n });\n }\n\n /**\n * The has() method returns a boolean indicating whether an element with the specified key exists or not.\n */\n has(token: TokenProvider): boolean {\n return this.#cache.get(token) !== undefined;\n }\n\n /**\n * Declare an alias for a given token.\n */\n alias(token: TokenProvider, alias: TokenProvider) {\n this.#cache.set(alias, this.#cache.get(token));\n\n return this;\n }\n\n /**\n * Resolve the token depending on his provider configuration.\n *\n * If the token isn't cached, the injector will invoke the provider and cache the result.\n *\n * #### Example\n *\n * ```typescript\n * import {InjectorService} from \"@tsed/di\";\n * import MyService from \"./services.js\";\n *\n * class OtherService {\n * constructor(injectorService: InjectorService) {\n * const myService = injectorService.invoke<MyService>(MyService);\n * }\n * }\n * ```\n *\n * @param token The injectable class to invoke. Class parameters are injected according constructor signature.\n * @param options {InvokeOptions} Optional options to invoke the class.\n * @returns {Type} The class constructed.\n */\n public resolve<Type = any>(token: TokenProvider<Type>, options: Partial<InvokeOptions> = {}): Type {\n let instance: any = options.locals ? options.locals.get(token) : undefined;\n\n if (instance !== undefined) {\n return instance;\n }\n\n if (token === DI_USE_PARAM_OPTIONS) {\n return options.useOpts as Type;\n }\n\n instance = !options.rebuild ? this.#cache.get(token) : undefined;\n\n if (instance != undefined) {\n return instance;\n }\n\n const provider = this.ensureProvider(token);\n\n // maybe not necessary\n if (!provider || options.rebuild) {\n instance = this.invokeToken(token, options);\n\n if (provider) {\n return this.setToCache(provider!, instance);\n }\n\n return instance;\n }\n\n instance = this.invokeToken(token, options);\n\n switch (provider.scope) {\n case ProviderScope.SINGLETON:\n if (!options.rebuild) {\n this.registerHooks(provider, options);\n }\n\n return this.setToCache(provider, instance);\n case ProviderScope.REQUEST:\n if (options.locals) {\n options.locals.set(provider.token, instance);\n\n this.registerHooks(provider, options);\n }\n\n return instance;\n }\n\n return instance;\n }\n\n /**\n * Resolve the token depending on his provider configuration.\n *\n * If the token isn't cached, the injector will invoke the provider and cache the result.\n *\n * #### Example\n *\n * ```typescript\n * import {InjectorService} from \"@tsed/di\";\n * import MyService from \"./services.js\";\n *\n * class OtherService {\n * constructor(injectorService: InjectorService) {\n * const myService = injectorService.invoke<MyService>(MyService);\n * }\n * }\n * ```\n *\n * @param token The injectable class to invoke. Class parameters are injected according constructor signature.\n * @param options {InvokeOptions} Optional options to invoke the class.\n * @returns {Type} The class constructed.\n * @alias InjectorService.resolve\n */\n public invoke<Type = any>(token: TokenProvider<Type>, options: Partial<InvokeOptions> = {}): Type {\n return this.resolve(token, options);\n }\n\n /**\n * Build only providers which are asynchronous.\n */\n async loadAsync() {\n for (const [, provider] of this) {\n if (!this.has(provider.token) && provider.isAsync()) {\n await this.resolve(provider.token);\n }\n }\n }\n\n /**\n * Build only providers which are synchronous.\n */\n loadSync() {\n for (const [, provider] of this) {\n // TODO try to lazy provider instead initiate all providers (&& provider.hasRegisteredHooks())\n if (!this.has(provider.token) && provider.scope === ProviderScope.SINGLETON) {\n this.resolve(provider.token);\n }\n }\n }\n\n /**\n * Build all providers from given container (or GlobalProviders) and emit `$onInit` event.\n *\n * @param container\n */\n async load(container: Container = createContainer()) {\n // avoid provider registration in the GlobalContainer during the loading phase\n // using injectable() or providerBuilder()\n this.#loaded = true;\n\n await $asyncEmit(\"$beforeInit\");\n\n this.bootstrap(container);\n\n // build async and sync provider\n await this.loadAsync();\n\n // load sync provider\n this.loadSync();\n\n await $asyncEmit(\"$onInit\");\n }\n\n /**\n * Load all configurations registered on providers via @Configuration decorator.\n * It inspects for each provider some fields like imports, mount, etc. to resolve the configuration.\n */\n resolveConfiguration() {\n if (this.resolvedConfiguration) {\n return;\n }\n const mergedConfiguration = new Map();\n\n super.forEach((provider) => {\n if (provider.configuration && provider.type !== \"server:module\") {\n Object.entries(provider.configuration).forEach(([key, value]) => {\n if (!EXCLUDED_CONFIGURATION_KEYS.includes(key)) {\n value = mergedConfiguration.has(key) ? deepMerge(mergedConfiguration.get(key), value) : deepClone(value);\n mergedConfiguration.set(key, value);\n }\n });\n }\n });\n\n mergedConfiguration.forEach((value, key) => {\n this.settings.set(key, deepMerge(value, this.settings.get(key)));\n });\n\n this.resolvedConfiguration = true;\n }\n\n /**\n * Emit an event to all service. See service [lifecycle hooks](/docs/hooks.md#lifecycle-hooks).\n * @param eventName The event name to emit at all services.\n * @param args List of the parameters to give to each service.\n * @returns A list of promises.\n * @deprecated use $asyncEmit instead\n */\n public emit(eventName: string, ...args: unknown[]) {\n return $asyncEmit(eventName, args);\n }\n\n /**\n * Alter value attached to an event.\n * @param eventName\n * @param value\n * @param args\n * @deprecated use $alter instead\n */\n public alter<T = any>(eventName: string, value: any, ...args: any[]): T {\n return $alter(eventName, value, args);\n }\n\n /**\n * Alter value attached to an event asynchronously.\n * @param eventName\n * @param value\n * @param args\n * @deprecated use $asyncAlter instead\n */\n public alterAsync<T = any>(eventName: string, value: any, ...args: any[]): Promise<T> {\n return $asyncAlter(eventName, value, args);\n }\n\n /**\n * Destroy the injector and all services.\n */\n async destroy() {\n await $asyncEmit(\"$onDestroy\");\n this.#cache.forEach((_, token) => {\n $off(token);\n });\n }\n\n /**\n * Bootstrap injector from container, resolve configuration and providers.\n *\n * @param container\n */\n protected bootstrap(container: Container = createContainer()) {\n // Clone all providers in the container\n this.addProviders(container);\n\n // Resolve all configuration\n this.resolveConfiguration();\n\n // allow mocking or changing provider instance before loading injector\n this.resolveImportsProviders();\n\n return this;\n }\n\n /**\n * Ensure that a provider is added to the container.\n * @protected\n */\n protected ensureProvider(token: TokenProvider, force: true): Provider;\n protected ensureProvider(token: TokenProvider, force: false): Provider | undefined;\n protected ensureProvider(token: TokenProvider): Provider | undefined;\n protected ensureProvider(token: TokenProvider, force = false): Provider | undefined {\n if (!this.hasProvider(token) && (GlobalProviders.has(token) || force)) {\n this.addProvider(token);\n }\n\n return this.getProvider(token)!;\n }\n\n /**\n * Invoke a class method and inject service.\n *\n * #### IInjectableMethod options\n *\n * * **target**: Optional. The class instance.\n * * **methodName**: `string` Optional. The method name.\n * * **designParamTypes**: `any[]` Optional. List of injectable types.\n * * **locals**: `Map<Function, any>` Optional. If preset then any argument Class are read from this object first, before the `InjectorService` is consulted.\n *\n * #### Example\n *\n * @param target\n * @param options\n * @private\n */\n protected invokeToken<T>(target: TokenProvider, options: Partial<InvokeOptions> = {}): T | Promise<T> {\n const resolvedOpts = this.mapInvokeOptions(target, options);\n\n if (!resolvedOpts) {\n return undefined as T;\n }\n\n const {token, deps, construct, imports, provider} = resolvedOpts;\n\n $emit(\"$beforeInvoke\", token, [resolvedOpts]);\n $emit(`$beforeInvoke:${String(provider.type)}`, [resolvedOpts]);\n\n let instance: any;\n let currentDependency: any = false;\n\n try {\n const invokeDependency =\n (parent?: any) =>\n (token: TokenProvider | [TokenProvider], index: number): any => {\n currentDependency = {token, index, deps};\n\n if (isArray(token)) {\n return this.getMany(token[0], options);\n }\n\n return isInheritedFrom(token, Provider, 1)\n ? provider\n : this.resolve(token, {\n parent,\n locals: options.locals,\n useOpts: provider?.getArgOpts(index) || options.useOpts\n });\n };\n\n // Invoke manually imported providers\n imports.forEach(invokeDependency());\n\n // Inject dependencies\n const services = deps.map(invokeDependency(token));\n\n currentDependency = false;\n\n instance = construct(services);\n } catch (error) {\n InjectionError.throwInjectorError(token, currentDependency, error);\n }\n\n if (instance === undefined) {\n throw new InjectionError(\n token,\n `Unable to create new instance from undefined value. Check your provider declaration for ${nameOf(token)}`\n );\n }\n\n if (instance && isClass(classOf(instance))) {\n Reflect.defineProperty(instance, DI_INVOKE_OPTIONS, {\n get: () => ({rebuild: options.rebuild, locals: options.locals})\n });\n }\n\n $emit(\"$afterInvoke\", token, [instance, resolvedOpts]);\n\n return instance;\n }\n\n private resolveImportsProviders() {\n this.settings.imports = this.settings.imports\n ?.filter((meta) => isObject(meta) && \"token\" in meta && meta.token !== InjectorService)\n .map((meta) => {\n if (isObject(meta) && \"token\" in meta) {\n const {token, ...props} = meta;\n\n const provider = this.ensureProvider(token, true);\n\n if (provider) {\n provider.useValue = undefined;\n provider.useAsyncFactory = undefined;\n provider.useFactory = undefined;\n\n if (\"useClass\" in props) {\n provider.useClass = props.useClass;\n return;\n }\n\n if (\"useFactory\" in props) {\n provider.useFactory = props.useFactory as never;\n return;\n }\n\n if (\"useAsyncFactory\" in props) {\n provider.useAsyncFactory = props.useAsyncFactory as never;\n return;\n }\n\n if (\"use\" in props) {\n provider.useValue = props.use;\n return;\n }\n }\n }\n\n return meta;\n })\n .filter(Boolean) as unknown as (TokenProvider | ImportTokenProviderOpts)[];\n }\n\n /**\n * Create options to invoke a provider or class.\n * @param token\n * @param options\n */\n private mapInvokeOptions(token: TokenProvider, options: Partial<InvokeOptions>): ResolvedInvokeOptions | false {\n const locals = options.locals || new LocalsContainer();\n\n options.locals = locals;\n\n let imports: (TokenProvider | [TokenProvider])[] | undefined = options.imports;\n let deps: TokenProvider[] | undefined = options.deps;\n let construct;\n\n if (!token || token === Object) {\n throw new Error(\"Given token is undefined. Could mean a circular dependency problem. Try to use @Inject(() => Token) to solve it.\");\n }\n\n let provider: Provider;\n\n if (!this.hasProvider(token)) {\n provider = new Provider(token);\n } else {\n provider = this.getProvider(token)!;\n }\n\n deps = deps || provider.deps;\n imports = imports || provider.imports;\n\n if (provider.useValue !== undefined) {\n construct = () => (isFunction(provider.useValue) ? provider.useValue() : provider.useValue);\n } else if (provider.useFactory) {\n construct = (deps: any[]) => provider.useFactory!(...deps);\n } else if (provider.useAsyncFactory) {\n construct = async (deps: any[]) => {\n deps = await Promise.all(deps);\n return provider.useAsyncFactory!(...deps);\n };\n } else if (provider.useClass) {\n // useClass\n deps = deps || getConstructorDependencies(provider.useClass);\n construct = (deps: TokenProvider[]) => new provider.useClass(...deps);\n } else {\n return false;\n }\n\n return {\n token,\n deps: deps! || [],\n imports: imports || [],\n construct,\n provider,\n locals\n };\n }\n\n private registerHooks(provider: Provider, options: Partial<InvokeOptions>) {\n if (provider.hooks) {\n if (provider.scope === ProviderScope.REQUEST) {\n if (options.locals && provider.hooks?.$onDestroy) {\n const {locals} = options;\n\n options.locals.hooks.on(\"$onDestroy\", (...args: unknown[]) => {\n return provider.hooks?.$onDestroy?.(locals.get(provider.token), ...args);\n });\n }\n\n return;\n }\n\n Object.entries(provider.hooks).forEach(([event, cb]) => {\n const callback = (...args: any[]) => {\n return cb(this.#cache.get(provider.token), ...args);\n };\n\n $on(event, provider.token, callback);\n });\n }\n }\n\n private setToCache(provider: Provider, instance: any) {\n const set = (instance: any) => {\n this.#cache.set(provider.token, instance);\n provider?.alias && this.alias(provider.token, provider.alias);\n };\n\n if (\"isAsync\" in provider && !provider.isAsync() && !isPromise(instance)) {\n set(instance);\n\n return instance;\n }\n\n // store promise to lock token in cache\n set(instance);\n\n instance = instance.then((instance: any) => {\n set(instance);\n\n return instance;\n });\n\n return instance;\n }\n}\n","import {InjectorService} from \"../services/InjectorService.js\";\n\nlet globalInjector: InjectorService = new InjectorService();\n\n/**\n * Return the existing injector service.\n *\n * Example:\n *\n * ```typescript\n * import {injector, Injectable} from \"@tsed/di\";\n *\n * @Injectable()\n * class MyService {\n * injector = injector();\n * }\n * ```\n */\nexport function injector(): InjectorService {\n return globalInjector;\n}\n\nexport async function destroyInjector() {\n await globalInjector.destroy();\n globalInjector = new InjectorService();\n}\n","import {isArray, type Type} from \"@tsed/core\";\n\nimport {LocalsContainer} from \"../domain/LocalsContainer.js\";\nimport {injector} from \"../fn/injector.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {getConstructorDependencies} from \"../utils/getConstructorDependencies.js\";\n\nfunction resolveAutoInjectableArgs(token: Type, args: unknown[]) {\n const inj = injector();\n const locals = new LocalsContainer();\n const deps: TokenProvider[] = getConstructorDependencies(token);\n const list: any[] = [];\n const length = Math.max(deps.length, args.length);\n\n for (let i = 0; i < length; i++) {\n if (args[i] !== undefined) {\n list.push(args[i]);\n } else {\n const value = deps[i];\n const instance = isArray(value) ? inj.getMany(value[0], {locals, parent: token}) : inj.invoke(value, {locals, parent: token});\n\n list.push(instance);\n }\n }\n\n return list;\n}\n\n/**\n * AutoInjectable decorator is used to automatically inject dependencies in the constructor.\n *\n * @example\n * ```typescript\n * @AutoInjectable()\n * class UserService {\n * constructor(\n * private database: Database, // automatically injected\n * customConfig?: Config // can be passed manually\n * ) {}\n * }\n * ```\n *\n * @description\n * When applied to a class, this decorator:\n * - Automatically resolves and injects dependencies based on constructor parameter types\n * - Preserves the ability to manually pass arguments which override automatic injection\n *\n * @decorator\n * @returns {ClassDecorator} A class decorator that enables automatic dependency injection\n */\nexport function AutoInjectable() {\n return <T extends {new (...args: any[]): NonNullable<unknown>}>(constr: T): T => {\n return class AutoInjectable extends constr {\n constructor(...args: any[]) {\n super(...resolveAutoInjectableArgs(constr, args));\n }\n } as unknown as T;\n };\n}\n","import {Store} from \"@tsed/core\";\n\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {DIConfiguration} from \"../services/DIConfiguration.js\";\nimport {injector} from \"./injector.js\";\n\nexport function configuration(): TsED.DIConfiguration & DIConfiguration;\nexport function configuration(token: TokenProvider): Partial<TsED.Configuration>;\nexport function configuration(token: TokenProvider, configuration: Partial<TsED.Configuration>): Partial<TsED.Configuration>;\nexport function configuration(token?: TokenProvider, configuration?: Partial<TsED.Configuration>) {\n if (token) {\n const store = Store.from(token);\n\n if (configuration) {\n store.set(\"configuration\", configuration);\n }\n\n return store.get(\"configuration\", configuration);\n }\n\n return injector().settings as TsED.DIConfiguration & DIConfiguration;\n}\n","import {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {Provider} from \"./Provider.js\";\nimport {ProviderType} from \"./ProviderType.js\";\n\nexport interface ControllerMiddlewares {\n useBefore: TokenProvider[];\n use: TokenProvider[];\n useAfter: TokenProvider[];\n}\n\nexport class ControllerProvider<T = any> extends Provider<T> {\n public tokenRouter: string;\n\n constructor(token: TokenProvider, options: Partial<Provider> = {}) {\n super(token, options);\n this.type = ProviderType.CONTROLLER;\n }\n\n /**\n *\n * @returns {any[]}\n */\n get middlewares(): Partial<ControllerMiddlewares> {\n return Object.assign(\n {\n use: [],\n useAfter: [],\n useBefore: []\n },\n this.store.get(\"middlewares\", {})\n );\n }\n\n /**\n *\n * @param middlewares\n */\n set middlewares(middlewares: Partial<ControllerMiddlewares>) {\n const mdlwrs = this.middlewares;\n const concat = (key: string, a: any, b: any) => (a[key] = a[key].concat(b[key]));\n\n Object.keys(middlewares).forEach((key: string) => {\n concat(key, mdlwrs, middlewares);\n });\n\n this.store.set(\"middlewares\", mdlwrs);\n }\n}\n","import {ControllerProvider} from \"../domain/ControllerProvider.js\";\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {injectable} from \"../fn/injectable.js\";\nimport type {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {GlobalProviders} from \"./GlobalProviders.js\";\n\nGlobalProviders.createRegistry(ProviderType.CONTROLLER, ControllerProvider);\n\ntype Opts<Type = any> = Partial<ProviderOpts<Type>> &\n (\n | {\n token: TokenProvider<Type>;\n }\n | {\n /**\n * @deprecated use token prop instead\n */\n provide: TokenProvider<Type>;\n }\n );\n\n/**\n * Register a provider configuration.\n * @deprecated Since v8. Use injectable() function instead.\n */\nexport function registerProvider<Type = any>({token, provide, ...opts}: Opts<Type>) {\n return injectable(token || provide, {\n ...opts,\n token: token || provide\n } as unknown as Partial<ProviderOpts>).inspect();\n}\n","import \"../registries/ProviderRegistry.js\";\n\nimport {Store, type Type} from \"@tsed/core\";\n\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {injector} from \"../fn/injector.js\";\nimport type {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {GlobalProviders} from \"../registries/GlobalProviders.js\";\n\ntype ProviderBuilder<Token extends TokenProvider, BaseProvider, T extends object> = {\n [K in keyof T as T[K] extends (...args: any[]) => any ? never : K]: (value: T[K]) => ProviderBuilder<Token, BaseProvider, T>;\n} & {\n inspect(): BaseProvider;\n store(): Store;\n token(): Token;\n factory(f: (...args: unknown[]) => unknown): ProviderBuilder<Token, BaseProvider, T>;\n asyncFactory(f: (...args: unknown[]) => Promise<unknown>): ProviderBuilder<Token, BaseProvider, T>;\n value(v: unknown): ProviderBuilder<Token, BaseProvider, T>;\n class(c: Type): ProviderBuilder<Token, BaseProvider, T>;\n};\n\nexport function providerBuilder<Provider, Picked extends keyof Provider>(props: string[], baseOpts: Partial<ProviderOpts<Provider>> = {}) {\n return <Token extends TokenProvider>(\n token: Token,\n options: Partial<ProviderOpts<Type>> = {}\n ): ProviderBuilder<Token, Provider, Pick<Provider, Picked>> => {\n const merged = {\n global: !injector().isLoaded(),\n ...options,\n ...baseOpts,\n token\n };\n\n const provider = GlobalProviders.merge(token, merged);\n\n if (!merged.global) {\n injector().setProvider(token, provider);\n }\n\n return props.reduce(\n (acc, prop) => {\n return {\n ...acc,\n [prop]: function (value: any) {\n (provider as any)[prop] = value;\n return this;\n }\n };\n },\n {\n factory(factory: any) {\n provider.useFactory = factory;\n return this;\n },\n asyncFactory(asyncFactory: any) {\n provider.useAsyncFactory = asyncFactory;\n return this;\n },\n value(value: any) {\n provider.useValue = value;\n provider.type = ProviderType.VALUE;\n return this;\n },\n class(k: any) {\n provider.useClass = k;\n return this;\n },\n store() {\n return provider.store;\n },\n inspect() {\n return provider;\n },\n token() {\n return provider.token as Token;\n }\n } as ProviderBuilder<Token, Provider, Pick<Provider, Picked>>\n );\n };\n}\n","import {ControllerProvider} from \"../domain/ControllerProvider.js\";\nimport type {Provider} from \"../domain/Provider.js\";\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {providerBuilder} from \"../utils/providerBuilder.js\";\n\ntype PickedProps = \"scope\" | \"path\" | \"alias\" | \"hooks\" | \"deps\" | \"imports\" | \"configuration\" | \"priority\";\n\nconst Props = [\"type\", \"scope\", \"path\", \"alias\", \"hooks\", \"deps\", \"imports\", \"configuration\", \"priority\"];\nexport const injectable = providerBuilder<Provider, PickedProps | \"type\">(Props);\nexport const interceptor = providerBuilder<Provider, PickedProps | \"type\">(Props, {\n type: ProviderType.INTERCEPTOR\n});\nexport const controller = providerBuilder<ControllerProvider, PickedProps | \"children\" | \"middlewares\">([...Props, \"middlewares\"], {\n type: ProviderType.CONTROLLER\n});\n","import {classOf, nameOf} from \"@tsed/core\";\n\nexport class InvalidPropertyTokenError extends Error {\n name = \"INVALID_TOKEN_ERROR\";\n\n constructor(target: any, propertyKey: string) {\n super(\n `Object isn't a valid token. Please check the token set on ${nameOf(\n classOf(target)\n )}.${propertyKey}.\\n- Check that it is not a circular reference.\\n- Check that the token (class or symbol) exists`\n );\n }\n}\n","import {LocalsContainer} from \"../domain/LocalsContainer.js\";\nimport type {UseImportTokenProviderOpts} from \"../interfaces/ImportTokenProviderOpts.js\";\nimport {InjectorService} from \"../services/InjectorService.js\";\nimport {injector} from \"./injector.js\";\n\nlet globalLocals: LocalsContainer | undefined;\nlet globalInvOpts: any = {};\nconst stagedLocals: LocalsContainer[] = [];\n\n/**\n * Get the locals container initiated by DITest or .bootstrap() method.\n */\nexport function localsContainer({\n providers,\n rebuild\n}: {\n providers?: UseImportTokenProviderOpts[];\n rebuild?: boolean;\n} = {}) {\n if (!globalLocals || providers) {\n globalLocals = new LocalsContainer();\n\n if (providers) {\n providers.forEach((p) => {\n globalLocals!.set(p.token, p.use);\n });\n\n globalLocals.set(InjectorService, injector());\n }\n\n if (rebuild) {\n globalInvOpts.rebuild = rebuild;\n }\n }\n\n return globalLocals;\n}\n\nexport function invokeOptions() {\n return {...globalInvOpts};\n}\n\n/**\n * Reset the locals container.\n */\nexport function detachLocalsContainer() {\n globalLocals && stagedLocals.push(globalLocals);\n globalLocals = undefined;\n globalInvOpts = {};\n}\n\nexport function cleanAllLocalsContainer() {\n detachLocalsContainer();\n stagedLocals.map((item) => item.clear());\n}\n","import type {InvokeOptions} from \"../interfaces/InvokeOptions.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {injector} from \"./injector.js\";\nimport {invokeOptions, localsContainer} from \"./localsContainer.js\";\n\n/**\n * Inject a provider to another provider.\n *\n * Use this function to inject a custom provider on constructor parameter or property.\n *\n * ```typescript\n * @Injectable()\n * export class MyService {\n * connection = inject(CONNECTION);\n * }\n * ```\n *\n * @param token A token provider or token provider group\n * @param opts\n * @returns {Function}\n * @decorator\n */\nexport function inject<T>(token: TokenProvider<T>, opts?: Partial<Pick<InvokeOptions, \"useOpts\" | \"rebuild\" | \"locals\">>): T {\n return injector().resolve(token, {\n ...opts,\n ...invokeOptions(),\n locals: opts?.locals || localsContainer()\n });\n}\n","import type {InvokeOptions} from \"../interfaces/InvokeOptions.js\";\nimport {injector} from \"./injector.js\";\nimport {localsContainer} from \"./localsContainer.js\";\n\n/**\n * Injects multiple instances of a given token using the injector service.\n * @param token - The injection token to resolve\n * @param opts - Optional configuration for the injection\n * @param opts.useOpts - Options for instance creation\n * @param opts.rebuild - Whether to rebuild the instance\n * @param opts.locals - Local container overrides\n * @returns Array of resolved instances\n */\nexport function injectMany<T>(token: string | symbol, opts?: Partial<Pick<InvokeOptions, \"useOpts\" | \"rebuild\" | \"locals\">>): T[] {\n return injector().getMany<T>(token, {...opts, locals: opts?.locals || localsContainer()} as InvokeOptions);\n}\n","import {catchError, decoratorTypeOf, DecoratorTypes, isPromise, Metadata, Store, type Type} from \"@tsed/core\";\n\nimport {DI_INJECTABLE_PROPS, DI_INVOKE_OPTIONS, DI_USE_OPTIONS} from \"../constants/constants.js\";\nimport {InvalidPropertyTokenError} from \"../errors/InvalidPropertyTokenError.js\";\nimport {inject} from \"../fn/inject.js\";\nimport {injectMany} from \"../fn/injectMany.js\";\nimport type {InvokeOptions} from \"../interfaces/InvokeOptions.js\";\nimport {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {getConstructorDependencies, setConstructorDependencies} from \"../utils/getConstructorDependencies.js\";\n\nfunction setToken(\n token: TokenProvider,\n {\n target,\n propertyKey,\n parameterIndex\n }: {\n target: any;\n propertyKey: string | symbol | undefined;\n parameterIndex: number;\n }\n) {\n const paramTypes = getConstructorDependencies(target, propertyKey);\n const type = paramTypes[parameterIndex];\n\n paramTypes[parameterIndex] = type === Array ? [token] : token;\n\n Metadata.setParamTypes(target, propertyKey!, paramTypes);\n setConstructorDependencies(target, paramTypes);\n}\n\nfunction getTokenType(token: TokenProvider | (() => TokenProvider) | undefined, target: any, propertyKey: string | symbol) {\n const useType = token || Metadata.getType(target, propertyKey);\n\n if (useType === Object) {\n throw new InvalidPropertyTokenError(target, String(propertyKey));\n }\n\n return useType;\n}\n\nexport type TransformInjectedProviderCB<T, Klass = any> = (\n instance: T,\n {target, propertyKey}: {self: Klass; target: Type<Klass>; propertyKey: symbol | string}\n) => unknown;\n\nexport interface BindInjectablePropertyOpts<T = any> {\n token?: TokenProvider;\n useOpts?: Record<string, unknown>;\n transform?: TransformInjectedProviderCB<T>;\n}\n\nfunction bindInjectableProperty<T = any>(\n target: any,\n propertyKey: string | symbol,\n {token, transform = (o) => o, useOpts}: BindInjectablePropertyOpts<T>\n) {\n const symbol = Symbol();\n\n if (!target[DI_INJECTABLE_PROPS]) {\n Reflect.defineProperty(target, DI_INJECTABLE_PROPS, {\n value: new Set(),\n enumerable: false,\n configurable: false\n });\n }\n\n target[DI_INJECTABLE_PROPS].add(propertyKey);\n\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n Reflect.defineProperty(target, propertyKey, {\n get() {\n const useType = getTokenType(token, target, propertyKey!);\n const originalType = Metadata.getType(target, propertyKey);\n\n const invokeOpts: Partial<InvokeOptions> = {\n rebuild: !!this[DI_INVOKE_OPTIONS]?.rebuild,\n locals: this[DI_INVOKE_OPTIONS]?.locals,\n useOpts: useOpts || Store.from(target, propertyKey).get(DI_USE_OPTIONS)\n };\n\n if (this[symbol] === undefined) {\n this[symbol] = originalType === Array ? injectMany(token as string, invokeOpts) : inject(useType, invokeOpts);\n }\n\n [].concat(this[symbol]).forEach((instance: any, index) => {\n if (isPromise(this[symbol])) {\n instance.then((result: any) => {\n this[symbol]![index] = result;\n if (originalType !== Array) {\n this[symbol] = result;\n }\n });\n }\n });\n\n return transform(this[symbol], {self: this, target, propertyKey});\n }\n });\n}\n\n/**\n * Inject a provider to another provider.\n *\n * Use this decorator to inject a custom provider on constructor parameter or property.\n *\n * ```typescript\n * @Injectable()\n * export class MyService {\n * @Inject(CONNECTION)\n * connection: CONNECTION;\n * }\n * ```\n *\n * @param token A token provider or token provider group\n * @param transform\n * @returns {Function}\n * @decorator\n */\nexport function Inject<T = any>(token?: TokenProvider<T> | (() => TokenProvider<T>), transform?: TransformInjectedProviderCB<T>): any;\nexport function Inject<T = any>(\n token?: TokenProvider<T> | (() => TokenProvider<T>),\n opts?: Partial<Omit<BindInjectablePropertyOpts<T>, \"token\">>\n): any;\nexport function Inject<T = any>(\n token?: TokenProvider<T> | (() => TokenProvider<T>),\n opts: TransformInjectedProviderCB<T> | Partial<Omit<BindInjectablePropertyOpts<T>, \"token\">> = {}\n) {\n opts = typeof opts === \"function\" ? {transform: opts} : opts;\n\n return (target: any, propertyKey: string | symbol | undefined, index?: number) => {\n const bindingType = decoratorTypeOf([target, propertyKey, index]);\n\n switch (bindingType) {\n case DecoratorTypes.PARAM_CTOR:\n if (token) {\n setToken(token, {target, propertyKey, parameterIndex: index!});\n }\n break;\n case DecoratorTypes.PROP:\n bindInjectableProperty(target, propertyKey!, {...opts, token});\n }\n };\n}\n","import {DecoratorParameters, decoratorTypeOf, DecoratorTypes} from \"@tsed/core\";\n\nimport {configuration} from \"../fn/configuration.js\";\nimport {injectable} from \"../fn/injectable.js\";\nimport {injector} from \"../fn/injector.js\";\nimport {CONFIGURATION, DIConfiguration} from \"../services/DIConfiguration.js\";\nimport {Inject} from \"./inject.js\";\n\n/**\n * Get or set Configuration on a class.\n *\n * @decorator\n */\nexport function Configuration(): any;\nexport function Configuration(settings: Partial<TsED.Configuration>): ClassDecorator;\nexport function Configuration(settings: Partial<TsED.Configuration> = {}): Function {\n return (...args: DecoratorParameters) => {\n switch (decoratorTypeOf(args)) {\n case DecoratorTypes.CLASS:\n configuration(args[0], settings);\n\n break;\n default:\n case DecoratorTypes.PARAM_CTOR:\n return Inject(DIConfiguration)(args[0], args[1], args[2] as number);\n }\n };\n}\n\nexport type Configuration = TsED.DIConfiguration & DIConfiguration;\n\n// To maintain compatibility with the previous implementation, we need to declare Configuration as\n// injectable token.\ninjectable(Configuration).factory(() => injector().settings);\n","import {injector} from \"./injector.js\";\n\nexport function constant<Type>(expression: string): Type | undefined;\nexport function constant<Type>(expression: string, defaultValue: Type | undefined): Type;\nexport function constant<Type>(expression: string, defaultValue?: Type | undefined): Type | undefined {\n return injector().settings.get(expression, defaultValue);\n}\n","import {catchError, deepClone} from \"@tsed/core\";\n\nimport {constant} from \"../fn/constant.js\";\n\nexport function bindConstant(target: any, propertyKey: string | symbol, expression: string, defaultValue?: any) {\n const symbol = Symbol();\n\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n Reflect.defineProperty(target, propertyKey, {\n get() {\n if (this[symbol] !== undefined) {\n return this[symbol];\n }\n\n const value = constant(expression, defaultValue);\n\n this[symbol] = Object.freeze(deepClone(value));\n\n return this[symbol];\n },\n set(value: unknown) {\n const bean = constant(expression, defaultValue) || this[symbol];\n\n if (bean === undefined && value !== undefined) {\n this[symbol] = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n}\n\n/**\n * Return value from Configuration.\n *\n * ## Example\n *\n * ```typescript\n * import {Env} from \"@tsed/core\";\n * import {Constant, Value} from \"@tsed/di\";\n *\n * export class MyClass {\n *\n * @Constant(\"env\")\n * env: Env;\n *\n * @Value(\"swagger.path\")\n * swaggerPath: string;\n *\n * @Value(\"swagger.path\", \"defaultValue\")\n * swaggerPath: string;\n *\n * constructor() {\n * console.log(this.swaggerPath) // undefined. Not available on constructor\n * }\n *\n * $onInit() {\n * console.log(this.swaggerPath) // something\n * }\n * }\n * ```\n *\n * @param {string} expression\n * @param defaultValue\n * @returns {(targetClass: any, attributeName: string) => any}\n * @decorator\n */\nexport function Constant<Type = unknown>(expression: string, defaultValue?: Type): PropertyDecorator {\n return (target, propertyKey) => {\n return bindConstant(target, propertyKey, expression, defaultValue);\n };\n}\n","export enum InjectablePropertyType {\n METHOD = \"method\",\n PROPERTY = \"property\",\n CONSTANT = \"constant\",\n VALUE = \"value\",\n INTERCEPTOR = \"interceptor\"\n}\n","import {isArrayOrArrayClass, Type, useDecorators} from \"@tsed/core\";\nimport {Children, Path} from \"@tsed/schema\";\n\nimport type {ControllerMiddlewares} from \"../domain/ControllerProvider.js\";\nimport {controller} from \"../fn/injectable.js\";\nimport {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\n\nexport type PathType = string | RegExp | (string | RegExp)[];\n\nexport interface ControllerOptions extends Partial<ProviderOpts<any>> {\n path?: PathType;\n children?: Type<any>[];\n middlewares?: Partial<ControllerMiddlewares>;\n}\n\nfunction mapOptions(options: any): ControllerOptions {\n if (typeof options === \"string\" || options instanceof RegExp || isArrayOrArrayClass(options)) {\n return {\n path: options\n };\n }\n\n return options;\n}\n\n/**\n * Declare a new controller with his Rest path. His methods annotated will be collected to build the routing list.\n * This routing listing will be built with the `express.Router` object.\n *\n * ::: tip\n * See [Controllers](/docs/controllers.md) section for more details\n * :::\n *\n * ```typescript\n * @Controller(\"/calendars\")\n * export class CalendarCtrl {\n *\n * @Get(\"/:id\")\n * public get(\n * @Req() request: Req,\n * @Res() response: Res,\n * @Next() next: Next\n * ): void {\n *\n * }\n * }\n * ```\n *\n * @param options\n * @controller\n * @decorator\n * @classDecorator\n */\nexport function Controller(options: PathType | ControllerOptions): ClassDecorator {\n const {children = [], path, ...opts} = mapOptions(options);\n\n return useDecorators(\n (target: Type) => {\n controller(target, opts);\n },\n path && Path(path as any),\n Children(...children)\n );\n}\n","import {injectable} from \"../fn/injectable.js\";\nimport type {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\n\n/**\n * The decorators `@Injectable()` declare a new service can be injected in other service, controller, interceptor, etc.. on there `constructor`.\n * All classes annotated with `@Injectable()` are built one time, excepted if you change the default provider configuration.\n *\n * ::: tip\n * `@Injectable()` use the `reflect-metadata` to collect and inject the built provided to other services.\n * :::\n *\n * ### Options\n *\n * - type (@@ProviderType@@ or `string`): Kind of provider. (Default: `ProviderType.PROVIDER`)\n * - scope (@@ProviderScope@@): Kind of provider. (Default: `ProviderScope.SINGLETON`)\n * - token (@@TokenProvider@@): An injection token (Note: This option override default metadata generated by Typescript).\n * - deps (`Type<any>`): List of class or provider which will be injected to the constructor (Note: This options override default metadata generated by Typescript).\n *\n * @returns {Function}\n * @decorator\n */\nexport function Injectable(options: Partial<ProviderOpts> = {}): ClassDecorator {\n return (target: any) => {\n const opts = {\n ...options,\n ...(options.token ? {useClass: target} : {token: target})\n };\n injectable(opts.token, opts);\n };\n}\n","import {classOf, decorateMethodsOf, DecoratorParameters, decoratorTypeOf, DecoratorTypes, nameOf, Store, Type} from \"@tsed/core\";\n\nimport {DI_INTERCEPTOR_OPTIONS, DI_INVOKE_OPTIONS} from \"../constants/constants.js\";\nimport {inject} from \"../fn/inject.js\";\nimport type {InterceptorContext} from \"../interfaces/InterceptorContext.js\";\nimport type {InterceptorMethods} from \"../interfaces/InterceptorMethods.js\";\nimport type {InvokeOptions} from \"../interfaces/InvokeOptions.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\n\nexport function getInterceptorOptions<T>(target: Type<any>, propertyKey: string | symbol) {\n return Store.fromMethod(target, propertyKey).get(DI_INTERCEPTOR_OPTIONS) as T;\n}\n\nexport function bindIntercept(target: any, propertyKey: string | symbol, token: TokenProvider, options: Record<string, unknown>) {\n const klass = classOf(target);\n const descriptor = Reflect.getOwnPropertyDescriptor(klass.prototype, propertyKey);\n const originalMethod = descriptor!.value;\n const symbol = Symbol();\n\n Store.fromMethod(klass, propertyKey).set(DI_INTERCEPTOR_OPTIONS, options);\n\n function newMethod(...args: any[]) {\n const next = (err?: Error) => {\n if (!err) {\n return originalMethod.apply(this, args);\n }\n\n throw err;\n };\n\n const context: InterceptorContext<any> = {\n target: klass,\n propertyKey,\n args,\n options,\n next\n };\n\n const invokeOpts: Partial<InvokeOptions> = {\n rebuild: !!this[DI_INVOKE_OPTIONS]?.rebuild,\n locals: this[DI_INVOKE_OPTIONS]?.locals\n };\n\n this[symbol] = this[symbol] || inject(token, invokeOpts)!;\n\n return this[symbol].intercept!(\n {\n ...context,\n options\n },\n next\n );\n }\n\n descriptor!.value = newMethod;\n\n Reflect.deleteProperty(klass.prototype, propertyKey);\n Reflect.defineProperty(klass.prototype, propertyKey, descriptor!);\n\n return descriptor;\n}\n\n/**\n * Attaches interceptor to method call and executes the before and after methods\n *\n * @param interceptor\n * @param options\n * @decorator\n */\nexport function Intercept<T extends InterceptorMethods>(interceptor: Type<T>, options?: any): any {\n return (...args: DecoratorParameters) => {\n const [target, propertyKey] = args;\n const type = decoratorTypeOf(args);\n switch (type) {\n case DecoratorTypes.CLASS:\n decorateMethodsOf(target, Intercept(interceptor, options));\n break;\n case DecoratorTypes.METHOD:\n return bindIntercept(target, propertyKey, interceptor, options);\n }\n };\n}\n","import {ProviderType} from \"../domain/ProviderType.js\";\nimport {Injectable} from \"./injectable.js\";\n\n/**\n * The decorators `@Interceptor()` declare a new service can be injected in other service or controller on there `constructor`.\n * All services annotated with `@Interceptor()` are constructed one time.\n *\n * > `@Service()` use the `reflect-metadata` to collect and inject service on controllers or other services.\n *\n * @returns {Function}\n * @decorator\n */\nexport function Interceptor(): Function {\n return Injectable({\n type: ProviderType.INTERCEPTOR\n });\n}\n","import {isFunction} from \"@tsed/core\";\n\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {inject} from \"./inject.js\";\nimport {injector} from \"./injector.js\";\n\n/**\n * Lazy load a provider from his package and invoke only when the provider is used.\n */\nexport async function lazyInject<Token>(factory: () => Promise<{default: TokenProvider<Token>}>): Promise<Token> {\n const {default: token} = await factory();\n\n if (!injector().has(token)) {\n const instance = await inject(token);\n\n const instanceWithHook = instance as unknown as {$onInit?: () => Promise<void>};\n\n if (\"$onInit\" in instanceWithHook && isFunction(instanceWithHook.$onInit)) {\n await instanceWithHook.$onInit();\n }\n }\n\n return injector().get(token) as unknown as Promise<Token>;\n}\n\nexport async function optionalLazyInject<Token>(\n factory: () => Promise<{\n default: TokenProvider;\n }>\n): Promise<Token | undefined> {\n try {\n return await lazyInject(factory);\n } catch (er) {\n return undefined;\n }\n}\n","import {catchError, isFunction} from \"@tsed/core\";\n\nimport {lazyInject, optionalLazyInject} from \"../fn/lazyInject.js\";\n\nfunction mapOptions(args: any[], optional = false) {\n function wrap(key: string, resolver: any) {\n return async () => {\n try {\n const {[key]: token} = await resolver();\n\n return {default: token};\n } catch (er) {\n if (!optional) {\n throw er;\n }\n\n return;\n }\n };\n }\n\n if (isFunction(args[0])) {\n return wrap(\"default\", args[0]);\n }\n\n return wrap(args[0], args[1]);\n}\n\n/**\n * Lazy load a provider from his package and invoke only when the provider is used\n *\n * ```typescript\n * import type {PlatformException} from \"@tsed/platform-exceptions\";\n *\n * @Injectable()\n * export class MyService {\n * @LazyInject(() => import(\"@tsed/platform-exceptions\"))\n * exceptions: Promise<PlatformException>;\n * }\n * ```\n *\n * @param key - The named export to import from the module.\n * @param resolver - A function that returns a promise resolving to the module.\n * @returns {Function}\n * @decorator\n */\nexport function LazyInject(resolver: () => Promise<{default: unknown}>): PropertyDecorator;\nexport function LazyInject(key: string, resolver: () => Promise<{default: unknown}>): PropertyDecorator;\nexport function LazyInject(...args: any[]): PropertyDecorator {\n let resolver = mapOptions(args);\n\n return (target: any, propertyKey: string | symbol): any | void => {\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n Reflect.defineProperty(target, propertyKey, {\n async get() {\n return lazyInject<any>(resolver as any);\n }\n });\n };\n}\n\n/**\n * Optionally Lazy load a provider from his package and invoke only when the provider is used\n *\n * ```typescript\n * import type {PlatformException} from \"@tsed/platform-exceptions\";\n *\n * @Injectable()\n * export class MyService {\n * @OptionalLazyInject(() => import(\"@tsed/platform-exceptions\"))\n * exceptions: Promise<PlatformException>;\n * }\n * ```\n * @param key - The named export to import from the module.\n * @param resolver - A function that returns a promise resolving to the module.\n * @decorator\n */\nexport function OptionalLazyInject(resolver: () => Promise<{default: unknown}>): PropertyDecorator;\nexport function OptionalLazyInject(key: string, resolver: () => Promise<{default: unknown}>): PropertyDecorator;\nexport function OptionalLazyInject(...args: any[]): PropertyDecorator {\n const resolver = mapOptions(args, true);\n\n return (target: any, propertyKey: string | symbol): any | void => {\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n Reflect.defineProperty(target, propertyKey, {\n async get() {\n return optionalLazyInject(resolver as any);\n }\n });\n };\n}\n","import {useDecorators} from \"@tsed/core\";\n\nimport {ProviderScope} from \"../domain/ProviderScope.js\";\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {Configuration} from \"./configuration.js\";\nimport {Injectable} from \"./injectable.js\";\n\nexport interface ModuleOptions extends Omit<TsED.Configuration, \"scopes\"> {\n /**\n * Provider scope\n */\n scope?: ProviderScope;\n /**\n * Providers must be initialized before building this module\n */\n imports?: TokenProvider[];\n /**\n * Explicit token must be injected in the constructor\n */\n deps?: TokenProvider[];\n\n /**\n * Additional properties are stored as provider configuration.\n */\n [key: string]: any;\n}\n\n/**\n * Declare a new Ts.ED module\n *\n * ## Options\n * - imports: List of Provider which must be built by injector before invoking the module\n * - deps: List of provider must be injected to the module constructor (explicit declaration)\n *\n * @param options\n * @decorator\n */\nexport function Module(options: Partial<ModuleOptions> = {}) {\n const {scopes, imports, deps, scope, ...configuration} = options;\n\n return useDecorators(\n Configuration(configuration),\n Injectable({\n type: ProviderType.MODULE,\n scope: ProviderScope.SINGLETON,\n imports,\n deps,\n injectable: false\n })\n );\n}\n","import {StoreSet} from \"@tsed/core\";\n\nimport {ProviderScope} from \"../domain/ProviderScope.js\";\n\n/**\n *\n * @param {\"request\" | \"singleton\" | ProviderScope} scope\n * @returns {Function}\n * @constructor\n */\nexport function Scope(scope: \"request\" | \"singleton\" | ProviderScope = ProviderScope.REQUEST) {\n return StoreSet(\"scope\", scope);\n}\n","import {classOf} from \"@tsed/core\";\n\nimport {DI_USE_PARAM_OPTIONS} from \"../constants/constants.js\";\nimport {ProviderScope} from \"../domain/ProviderScope.js\";\nimport {Inject} from \"./inject.js\";\nimport {Scope} from \"./scope.js\";\n\n/**\n * Get instance options. This options depending on his invocation context.\n *\n * ```typescript\n * import {Injectable, Opts, UseOpts} from \"@tsed/di\";\n *\n * @Injectable()\n * class MyConfigurableService {\n * source: string;\n * constructor(@Opts options: any = {}) {\n * console.log(\"Hello \", options.source); // log: Hello Service1 then Hello Service2\n *\n * this.source = options.source;\n * }\n * }\n *\n * @Injectable()\n * class MyService1 {\n * constructor(@UseOpts({source: 'Service1'}) service: MyConfigurableService) {\n * console.log(service.source) // log: Service1\n * }\n * }\n *\n * @Injectable()\n * class MyService2 {\n * constructor(@UseOpts({source: 'Service2'}) service: MyConfigurableService) {\n * console.log(service.source) // log: Service2\n * }\n * }\n * ```\n *\n * ::: warning\n * Using @@Opts@@ decorator on a constructor parameter change the Scope of the provider to `ProviderScope.INSTANCE`.\n * :::\n *\n * @param target\n * @param propertyKey\n * @param index\n * @decorator\n */\nexport function Opts(target: any, propertyKey: string | symbol | undefined, index: number) {\n Scope(ProviderScope.INSTANCE)(classOf(target));\n Inject(DI_USE_PARAM_OPTIONS)(target, propertyKey, index);\n}\n","import {Type} from \"@tsed/core\";\n\nimport {GlobalProviders} from \"../registries/GlobalProviders.js\";\n\n/**\n * Override a provider which is already registered in ProviderRegistry.\n * @returns {Function}\n * @decorators\n * @param originalProvider\n */\nexport function OverrideProvider(originalProvider: Type<any>): Function {\n return (target: Type<any>): void => {\n GlobalProviders.get(originalProvider)!.useClass = target;\n };\n}\n","import {Injectable} from \"./injectable.js\";\n\n/**\n * The decorators `@Service()` declare a new service can be injected in other service or controller on there `constructor`.\n * All services annotated with `@Service()` are constructed one time.\n *\n * > `@Service()` use the `reflect-metadata` to collect and inject service on controllers or other services.\n *\n * @returns {Function}\n * @decorator\n */\nexport function Service(): Function {\n return Injectable();\n}\n","import {decoratorTypeOf, DecoratorTypes, Store, UnsupportedDecoratorType} from \"@tsed/core\";\n\nimport {DI_USE_OPTIONS, DI_USE_PARAM_OPTIONS} from \"../constants/constants.js\";\n\n/**\n * Add options to invoke the Service.\n *\n * ```typescript\n * import {Injectable, Opts, UseOpts} from \"@tsed/di\";\n *\n * @Injectable()\n * class MyConfigurableService {\n * source: string;\n * constructor(@Opts options: any = {}) {\n * console.log(\"Hello \", options.source); // log: Hello Service1 then Hello Service2\n *\n * this.source = options.source;\n * }\n * }\n *\n * @Injectable()\n * class MyService1 {\n * constructor(@UseOpts({source: 'Service1'}) service: MyConfigurableService) {\n * console.log(service.source) // log: Service1\n * }\n * }\n *\n * @Injectable()\n * class MyService2 {\n * constructor(@UseOpts({source: 'Service2'}) service: MyConfigurableService) {\n * console.log(service.source) // log: Service2\n * }\n * }\n * ```\n *\n * ::: warning\n * Using @@Opts@@ decorator on a constructor parameter change the Scope of the provider to `ProviderScope.INSTANCE`.\n * :::\n *\n * @returns {Function}\n * @decorator\n * @param options\n */\nexport function UseOpts(options: {[key: string]: any}): Function {\n return (target: Object, propertyKey: string | symbol, index?: number): any => {\n const bindingType = decoratorTypeOf([target, propertyKey, index]);\n\n switch (bindingType) {\n case DecoratorTypes.PARAM_CTOR:\n Store.from(target).merge(`${DI_USE_PARAM_OPTIONS}:${index}`, options);\n break;\n\n case DecoratorTypes.PROP:\n Store.from(target, propertyKey).set(DI_USE_OPTIONS, options);\n break;\n\n default:\n throw new UnsupportedDecoratorType(UseOpts, [target, propertyKey, index]);\n }\n };\n}\n","import {catchError} from \"@tsed/core\";\n\nimport {injector} from \"../fn/injector.js\";\n\nexport function bindValue(target: any, propertyKey: string | symbol, expression: string, defaultValue?: any) {\n const descriptor = {\n get() {\n return injector().settings.get(expression, defaultValue);\n },\n set(value: unknown) {\n injector().settings.set(expression, value);\n },\n enumerable: true,\n configurable: true\n };\n\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n catchError(() => Reflect.defineProperty(target, propertyKey, descriptor));\n}\n\n/**\n * Return value from Configuration.\n *\n * ## Example\n *\n * ```typescript\n * import {Env} from \"@tsed/core\";\n * import {Constant, Value} from \"@tsed/di\";\n *\n * export class MyClass {\n *\n * @Constant(\"env\")\n * env: Env;\n *\n * @Value(\"swagger.path\")\n * swaggerPath: string;\n *\n * @Value(\"swagger.path\", \"defaultValue\")\n * swaggerPath: string;\n *\n * constructor() {\n * console.log(this.swaggerPath) // undefined. Not available on constructor\n * }\n *\n * $onInit() {\n * console.log(this.swaggerPath) // something\n * }\n * }\n * ```\n *\n * @param expression\n * @param defaultValue\n * @returns {(targetClass: any, attributeName: string) => any}\n * @decorator\n */\nexport function Value(expression: string, defaultValue?: unknown): PropertyDecorator {\n return (target, propertyKey) => {\n return bindValue(target, propertyKey, expression, defaultValue);\n };\n}\n","import {injector} from \"./injector.js\";\n\n/**\n * Get a value from the `injector.settings`.\n *\n * ## Example\n *\n * ```ts\n * import {refValue, Injectable} from \"@tsed/di\";\n *\n * @Injectable()\n * class Test {\n * test = refValue(\"logger.level\", \"default value\");\n *\n * constructor() {\n * console.log(this.test.value); // \"off\"\n * }\n * }\n *\n * @param expression The expression to get the value from the `injector.settings`.\n */\nexport function refValue<Type>(expression: string): {value: Type | undefined};\nexport function refValue<Type>(expression: string, defaultValue: Type | undefined): {value: Type};\nexport function refValue<Type>(expression: string, defaultValue?: Type | undefined): {value: Type | undefined} {\n return Object.freeze({\n get value() {\n return injector().settings.get(expression, defaultValue);\n },\n set value(value: Type) {\n injector().settings.set(expression, value);\n }\n });\n}\n","import {injectable} from \"../fn/injectable.js\";\nimport {injector} from \"../fn/injector.js\";\nimport {DILogger} from \"../interfaces/DILogger.js\";\n\nexport const LOGGER = Symbol.for(\"LOGGER\");\nexport type LOGGER = DILogger;\n\ninjectable(LOGGER).factory(() => injector().logger);\n","import {Store, Type} from \"@tsed/core\";\n\nexport function mergeMount(m1: any = {}, m2: any = {}) {\n return Object.entries(m2).reduce((mount, [key, controllers]) => {\n return {\n ...mount,\n [key]: (mount[key] || []).concat(controllers)\n };\n }, m1);\n}\n\nexport function getConfiguration(module: Type<any>, configuration: any = {}) {\n const store = Store.from(module).get(\"configuration\") || {};\n\n return {\n ...store,\n ...configuration,\n mount: mergeMount(store.mount, configuration.mount)\n };\n}\n"],"names":["root","factory","exports","module","require","define","amd","self","__WEBPACK_EXTERNAL_MODULE__414__","__WEBPACK_EXTERNAL_MODULE__171__","__WEBPACK_EXTERNAL_MODULE__538__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","DI_INVOKE_OPTIONS","DI_INJECTABLE_PROPS","DI_USE_OPTIONS","DI_USE_PARAM_OPTIONS","DI_INTERCEPTOR_OPTIONS","ProviderScope","ProviderType","LocalsContainer","Map","hooks","Hooks","destroy","this","asyncEmit","discoverHooks","token","methodsOf","reduce","propertyKey","String","startsWith","listener","instance","args","Provider","constructor","options","type","PROVIDER","useClass","assign","getClassOrSymbol","Store","from","provide","isClass","classOf","className","name","nameOf","store","path","set","scope","isAsync","SINGLETON","configuration","children","getArgOpts","index","defaultValue","useAsyncFactory","clone","hasChildren","length","hasParent","toString","useFactory","useValue","filter","Boolean","join","GlobalProviderRegistry","super","has","metadata","merge","target","global","GlobalProviders","createProvider","meta","createIfNotExists","keys","forEach","delete","createRegistry","model","defaultOptions","getRegistrySettings","provider","item","Container","add","settings","addProvider","hasProvider","setProvider","getProvider","getProviders","types","concat","map","providers","_","includes","addProviders","container","colorIfAllowed","colorFn","text","process","env","NO_COLOR","colors","red","yellow","green","InjectionError","Error","origin","isString","tokens","message","stack","originMessage","tokensMessage","throwInjectorError","currentDependency","error","erroredArg","getConstructorArgNames","arg","deps","signature","indexOf","repeat","drawline","printDependencyInjectionError","createContainer","rootModule","entries","getConstructorDependencies","Metadata","getOwn","getParamTypes","setConstructorDependencies","CONFIGURATION","for","DIConfiguration","initialProps","default","imports","routes","logger","version","v","rootDir","debug","level","callbackfn","thisArg","Set","Array","getRaw","Reflect","setRaw","setValue","getValue","EXCLUDED_CONFIGURATION_KEYS","InjectorService","console","resolvedConfiguration","isLoaded","toArray","values","resolve","getMany","alias","locals","useOpts","rebuild","ensureProvider","invokeToken","setToCache","registerHooks","REQUEST","invoke","loadAsync","loadSync","load","$asyncEmit","bootstrap","resolveConfiguration","mergedConfiguration","deepMerge","deepClone","emit","eventName","alter","$alter","alterAsync","$asyncAlter","$off","resolveImportsProviders","force","resolvedOpts","mapInvokeOptions","construct","$emit","invokeDependency","parent","isArray","isInheritedFrom","services","isObject","props","use","isFunction","async","Promise","all","$onDestroy","on","event","cb","$on","isPromise","then","globalInjector","injector","destroyInjector","AutoInjectable","constr","inj","list","Math","max","i","push","resolveAutoInjectableArgs","ControllerProvider","CONTROLLER","middlewares","useAfter","useBefore","mdlwrs","a","b","registerProvider","opts","injectable","inspect","providerBuilder","baseOpts","merged","acc","asyncFactory","VALUE","k","Props","interceptor","INTERCEPTOR","controller","InvalidPropertyTokenError","globalLocals","globalInvOpts","stagedLocals","localsContainer","p","invokeOptions","detachLocalsContainer","cleanAllLocalsContainer","clear","inject","injectMany","Inject","transform","decoratorTypeOf","DecoratorTypes","PARAM_CTOR","parameterIndex","paramTypes","setParamTypes","setToken","PROP","symbol","configurable","catchError","deleteProperty","useType","getType","getTokenType","originalType","invokeOpts","result","bindInjectableProperty","Configuration","CLASS","constant","expression","bindConstant","freeze","Constant","InjectablePropertyType","Controller","RegExp","isArrayOrArrayClass","mapOptions","useDecorators","Path","Children","Injectable","getInterceptorOptions","fromMethod","bindIntercept","klass","descriptor","getOwnPropertyDescriptor","originalMethod","next","err","apply","context","intercept","Intercept","decorateMethodsOf","METHOD","Interceptor","lazyInject","instanceWithHook","$onInit","optionalLazyInject","er","optional","wrap","resolver","LazyInject","OptionalLazyInject","Module","scopes","MODULE","Scope","StoreSet","Opts","INSTANCE","OverrideProvider","originalProvider","Service","UseOpts","UnsupportedDecoratorType","bindValue","Value","refValue","LOGGER","mergeMount","m1","m2","mount","controllers","getConfiguration"],"sourceRoot":""}
1
+ {"version":3,"file":"di.umd.min.js","mappings":"CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,EAAQG,QAAQ,cAAeA,QAAQ,eAAgBA,QAAQ,iBACvD,mBAAXC,QAAyBA,OAAOC,IAC9CD,OAAO,CAAC,aAAc,cAAe,gBAAiBJ,GAC5B,iBAAZC,QACdA,QAAQ,YAAcD,EAAQG,QAAQ,cAAeA,QAAQ,eAAgBA,QAAQ,iBAErFJ,EAAK,YAAcC,EAAQD,EAAK,cAAeA,EAAK,eAAgBA,EAAK,gBAC1E,CATD,CASGO,MAAM,CAACC,EAAkCC,EAAkCC,I,kCCT9EP,EAAOD,QAAUM,C,UCAjBL,EAAOD,QAAUO,C,UCAjBN,EAAOD,QAAUQ,C,GCCbC,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBE,IAAjBD,EACH,OAAOA,EAAaZ,QAGrB,IAAIC,EAASQ,EAAyBE,GAAY,CAGjDX,QAAS,CAAC,GAOX,OAHAc,EAAoBH,GAAUV,EAAQA,EAAOD,QAASU,GAG/CT,EAAOD,OACf,CCrBAU,EAAoBK,EAAI,CAACf,EAASgB,KACjC,IAAI,IAAIC,KAAOD,EACXN,EAAoBQ,EAAEF,EAAYC,KAASP,EAAoBQ,EAAElB,EAASiB,IAC5EE,OAAOC,eAAepB,EAASiB,EAAK,CAAEI,YAAY,EAAMC,IAAKN,EAAWC,IAE1E,ECNDP,EAAoBQ,EAAI,CAACK,EAAKC,IAAUL,OAAOM,UAAUC,eAAeC,KAAKJ,EAAKC,GCClFd,EAAoBkB,EAAK5B,IACH,oBAAX6B,QAA0BA,OAAOC,aAC1CX,OAAOC,eAAepB,EAAS6B,OAAOC,YAAa,CAAEC,MAAO,WAE7DZ,OAAOC,eAAepB,EAAS,aAAc,CAAE+B,OAAO,GAAO,E,y2CCLvD,MAAMC,EAAoBH,OAAO,qBAC3BI,EAAsBJ,OAAO,uBAC7BK,EAAiB,iBACjBC,EAAuB,uBACvBC,EAAyB,yB,ICJ1BC,ECAAC,E,kBCIL,MAAMC,UAAwBC,IAArC,c,oBACW,KAAAC,MAAQ,IAAI,EAAAC,KAKvB,CAHE,aAAMC,SACEC,KAAKH,MAAMI,UAAU,aAC7B,ECPK,SAASC,EAAcC,GAC5B,OAAO,IAAAC,WAAUD,GAAOE,QAAO,CAACR,GAAQS,kBACtC,GAAIC,OAAOD,GAAaE,WAAW,KAAM,CACvC,MAAMC,EAAW,CAACC,KAAkBC,IAAgBD,IAAWJ,MAAgBK,GAE/E,MAAO,IACFd,EACH,CAACS,GAAcG,EAEnB,CACA,OAAOZ,CAAK,GACX,CAAC,EACN,EHdA,SAAYJ,GACV,wBACA,oBACA,qBACD,CAJD,CAAYA,IAAAA,EAAa,KCAzB,SAAYC,GACV,gBACA,sBACA,kBACA,0BACA,4BACA,yBACD,CAPD,CAAYA,IAAAA,EAAY,KGWjB,MAAMkB,EAaX,GACA,GACA,GACA,GAIA,WAAAC,CAAYV,EAAyBW,EAA6B,CAAC,GAhB5D,KAAAC,KAAqCrB,EAAasB,SAQlD,KAAAnB,MAAiD,CAAC,EASvDG,KAAKG,MAAQA,EACbH,KAAKiB,SAAWd,EAEhB5B,OAAO2C,OAAOlB,KAAMc,GAEhBA,aAAmBF,IACrBZ,MAAK,EAAYc,GAAQ,EACzBd,MAAK,EAASc,GAAQ,EACtBd,MAAK,EAAcc,GAAQ,EAE/B,CAEA,SAAIX,GACF,OAAOH,MAAK,CACd,CAEA,SAAIG,CAAMhB,GACJA,IACFa,MAAK,GAAS,IAAAmB,kBAAiBhC,GAC/Ba,MAAK,EAAcA,MAAK,EAAS,EAAAoB,MAAMC,KAAKlC,GAEhD,CAKA,WAAImC,GACF,OAAOtB,KAAKG,KACd,CAMA,WAAImB,CAAQnC,GACVa,KAAKG,MAAQhB,CACf,CAEA,YAAI8B,GACF,OAAOjB,MAAK,CACd,CAMA,YAAIiB,CAAS9B,IACP,IAAAoC,SAAQpC,KACVa,MAAK,GAAY,IAAAwB,SAAQrC,GACzBa,MAAK,EAAS,EAAAoB,MAAMC,KAAKlC,GACzBa,KAAKH,MAAQK,EAAcF,MAAK,GAEpC,CAEA,aAAIyB,GACF,OAAOzB,KAAK0B,IACd,CAEA,QAAIA,GACF,OAAO,IAAAC,QAAO3B,KAAKG,MACrB,CAEA,SAAIyB,GACF,OAAO5B,MAAK,CACd,CAEA,QAAI6B,GACF,OAAO7B,KAAK4B,MAAMlD,IAAI,OAAQ,IAChC,CAEA,QAAImD,CAAKA,GACP7B,KAAK4B,MAAME,IAAI,OAAQD,EACzB,CAWA,SAAIE,GACF,OAAI/B,KAAKgC,UACAvC,EAAcwC,UAGhBjC,KAAKtB,IAAmB,QAASe,EAAcwC,UACxD,CAMA,SAAIF,CAAMA,GACR/B,KAAK4B,MAAME,IAAI,QAASC,EAC1B,CAEA,iBAAIG,GACF,OAAOlC,KAAKtB,IAAI,gBAClB,CAEA,iBAAIwD,CAAcA,GAChBlC,KAAK4B,MAAME,IAAI,gBAAiBI,EAClC,CAEA,YAAIC,GACF,OAAOnC,KAAK4B,MAAMlD,IAAI,sBAAuB,GAC/C,CAEA,YAAIyD,CAASA,GACXnC,KAAK4B,MAAME,IAAI,sBAAuBK,EACxC,CAEA,UAAAC,CAAWC,GACT,OAAOrC,KAAK4B,MAAMlD,IAAI,GAAGa,KAAwB8C,IACnD,CAeA,GAAA3D,CAAoBL,EAAaiE,GAC/B,OAAOtC,KAAK4B,MAAMlD,IAAIL,IAAQ2B,MAAK,EAAYtB,IAAIL,IAAQiE,CAC7D,CAEA,OAAAN,GACE,QAAShC,KAAKuC,eAChB,CAEA,KAAAC,GACE,OAAO,KAAK,IAAAhB,SAAQxB,MAAb,CAAoBA,KAAKG,MAAOH,KACzC,CAMO,WAAAyC,GACL,QAASzC,KAAKmC,SAASO,MACzB,CAMO,SAAAC,GACL,QAAS3C,KAAK4B,MAAMlD,IAAI,mBAC1B,CAEA,QAAAkE,GACE,MAAO,CACL,QACA5C,KAAK0B,KACL1B,KAAKiB,WAAY,IAAAU,QAAO3B,KAAKiB,UAC7BjB,KAAK6C,YAAc,UACnB7C,KAAK8C,UAAY,QACjB9C,KAAKuC,iBAAmB,gBAEvBQ,OAAOC,SACPC,KAAK,IACV,CAEA,KAAAC,GAKE,OAJAlD,KAAK8C,cAAW7E,EAChB+B,KAAK6C,gBAAa5E,EAClB+B,KAAKuC,qBAAkBtE,EAEhB+B,IACT,EC3MK,MAAMmD,UAA+BvD,IAC1C,GAAkD,IAAIA,IAOtD,GAAAlB,CAAIL,GACF,OAAO+E,MAAM1E,KAAI,IAAAyC,kBAAiB9C,GACpC,CAOA,GAAAgF,CAAIhF,GACF,OAAO+E,MAAMC,KAAI,IAAAlC,kBAAiB9C,GACpC,CAOA,GAAAyD,CAAIzD,EAAoBiF,GAGtB,OAFAF,MAAMtB,KAAI,IAAAX,kBAAiB9C,GAAMiF,GAE1BtD,IACT,CAOA,KAAAuD,CAAMC,EAAuB1C,GAC3B,IAAuB,IAAnBA,EAAQ2C,OACV,OAAOC,EAAgBC,eAAeH,EAAQ1C,GAGhD,MAAM8C,EAAO5D,KAAK6D,kBAAkBL,EAAQ1C,GAQ5C,OANAvC,OAAOuF,KAAKhD,GAASiD,SAAS1F,IAC5BuF,EAAKvF,GAAQyC,EAAkBzC,EAAI,IAGrC2B,KAAK8B,IAAI0B,EAAQI,GAEVA,CACT,CAOA,OAAOvF,GACL,OAAO+E,MAAMY,QAAO,IAAA7C,kBAAiB9C,GACvC,CAEA,cAAA4F,CAAelD,EAAuBmD,EAAuBpD,EAAqC,CAAC,GACjG,MAAMqD,EAAiBnE,KAAKoE,oBAAoBrD,GAShD,OAPAD,EAAUvC,OAAO2C,OAAOiD,EAAgB,IACnCrD,EACHoD,UAGFlE,MAAK,EAAU8B,IAAIf,EAAMD,GAElBd,IACT,CAEA,mBAAAoE,CAAoBZ,GAClB,IAAIzC,EAAqCrB,EAAasB,SAEtD,GAAsB,iBAAXwC,EACTzC,EAAOyC,MACF,CACL,MAAMa,EAAWrE,KAAKtB,IAAI8E,GACtBa,IACFtD,EAAOsD,EAAStD,KAEpB,CAEA,OACEf,MAAK,EAAUtB,IAAIqC,IAAS,CAC1BmD,MAAOtD,EAGb,CAEU,cAAA+C,CAAetF,EAAoByC,GAC3C,MAAMC,EAAOD,EAAQC,MAAQrB,EAAasB,UACpC,MAACkD,EAAQtD,GAAYZ,MAAK,EAAUtB,IAAIqC,IAAS,CAAC,EAExD,OAAO,IAAImD,EAAM7F,EAAKyC,EACxB,CAOU,iBAAA+C,CAAkBxF,EAAoByC,GAC9C,IAAKd,KAAKqD,IAAIhF,GAAM,CAClB,MAAMiG,EAAOtE,KAAK2D,eAAetF,EAAKyC,GAEtCd,KAAK8B,IAAIzD,EAAKiG,EAChB,CAEA,OAAOtE,KAAKtB,IAAIL,EAClB,EAQK,MAAMqF,EAAkB,IAAIP,EC5H5B,MAAMoB,UAAkB3E,IAMtB,GAAA4E,CAAIrE,EAAsBsE,EAAkC,CAAC,GAClE,MAAMJ,EAAWX,EAAgBhF,IAAIyB,IAAQqC,SAAW,IAAI5B,EAAST,GAIrE,OAFA5B,OAAO2C,OAAOmD,EAAUI,GAEjBrB,MAAMtB,IAAI3B,EAAOkE,EAC1B,CAOO,WAAAK,CAAYvE,EAAsBsE,EAAkC,CAAC,GAC1E,OAAOzE,KAAKwE,IAAIrE,EAAOsE,EACzB,CAMO,WAAAE,CAAYxE,GACjB,OAAOiD,MAAMC,IAAIlD,EACnB,CAOO,WAAAyE,CAAYzE,EAAsBkE,GACvC,OAAOjB,MAAMtB,IAAI3B,EAAOkE,EAC1B,CAOO,WAAAQ,CAA2C1E,GAChD,OAAOiD,MAAM1E,IAAIyB,EACnB,CAQO,YAAA2E,CAAa/D,GAClB,MAAMgE,EAAS,GAAiCC,OAAOjE,GAAekE,IAAI1E,QAE1E,MAAO,IAAIP,MAAMK,QAAO,CAAC6E,GAAYC,EAAGd,KAClCU,EAAMK,SAAS7E,OAAO8D,EAAStD,SAAWA,EACrC,IAAImE,EAAWb,GAEjBa,GACN,GACL,CAEO,YAAAG,CAAaC,GAClBA,EAAUvB,SAASM,IACZrE,KAAK2E,YAAYN,EAASlE,QAC7BH,KAAK4E,YAAYP,EAASlE,MAAOkE,EAAS7B,QAC5C,GAEJ,EC3EF,MAAM+C,EAAkBC,GAA0BC,IAC/CC,QAAQC,IAAIC,SAAoEH,GAMtEI,EAAS,CAACC,IAJXP,IAIgBQ,OAHbR,IAGqBS,MAFtBT,KCHP,MAAMU,UAAuBC,MAMlC,WAAArF,CAAYV,EAAsBgG,GAChC/C,OAAM,IAAAgD,UAASD,GAAUA,EAAS,IANpC,KAAAzE,KAAO,kBAEA,KAAA2E,OAA0B,GAM/BrG,KAAKqG,OAAS,CAAClG,GAEXgG,KACE,IAAAC,UAASD,GACXnG,KAAKmG,OAAS,CACZG,QAASH,EACTI,MAAOvG,KAAKuG,OAGVJ,EAAOE,QACTrG,KAAKqG,OAASrG,KAAKqG,OAAOrB,OAAOmB,EAAOE,QACxCrG,KAAKmG,OAASA,EAAOA,SAErBnG,KAAKmG,OAASA,EACdnG,KAAKuG,MAAQJ,EAAOI,QAK1B,MAAMC,EAAgBxG,KAAKmG,OAAS,aAAenG,KAAKmG,OAAOG,QAAU,GACnEG,EAAgBzG,KAAKqG,OAAOpB,KAAK9E,IAAU,IAAAwB,QAAOxB,KAAQ8C,KAAK,OAErEjD,KAAKsG,QAAU,uBAAuBG,IAAgBD,GACxD,CAEA,yBAAOE,CAAmBvG,EAAYwG,EAAwBC,GAK5D,MAJID,IAAqB,IAAApF,SAAQpB,KAC/ByG,EAAMN,QAOZ,SAAuCnG,EAAYW,GACjD,IAAI+F,EAAa,GAEjB,MAAMlG,GAAO,IAAAmG,wBAAuB3G,GACjC8E,KAAI,CAAC8B,EAAK1E,KACLvB,EAAQuB,QAAUA,IACpBwE,EAAaE,EACbA,EAAMlB,EAAOC,IAAIiB,IAGZ,GAAGA,OAAQ,IAAApF,QAAOb,EAAQkG,KAAK3E,SAEvCY,KAAK,MAEFgE,GAAY,IAAAtF,QAAOxB,GAAS,iBAAmBQ,EAAO,IACtDuG,EAAUD,EAAUC,QAAQL,GAAc,EAGhD,MAAO,gCAAkC/F,EAAQwF,QAAU,OAASW,EAAY,MAAQC,GAAW,EAFlF,CAACA,GAAoB,IAAIC,OAAOD,GAAWrB,EAAOC,IAAI,IAAM,IAAIqB,OAAON,EAAWnE,OAAS,IAEL0E,CAASF,GAAW,GAC7H,CA1BsBG,CAA8BlH,EAAO,IAAIwG,EAAmBL,QAASM,EAAMN,WAGvF,IAAIL,EAAe9F,EAAOyG,EAClC,ECxCK,SAASU,EAAgBC,GAC9B,MAAMjC,EAAY,IAAIf,EAAUb,EAAgB8D,WAMhD,OAJID,GACFjC,EAAUtB,OAAOuD,GAGZjC,CACT,CCXO,SAASmC,EAA2BjE,EAAalD,GACtD,OAAO,EAAAoH,SAASC,OAAO,kCAAmCnE,EAAQlD,IAAgB,IAAI,EAAAoH,SAASE,cAAcpE,EAAQlD,KAAiB,EACxI,CAEO,SAASuH,EAA2BrE,EAAawD,GACtD,EAAAU,SAAS5F,IAAI,kCAAmCkF,EAAMxD,EACxD,CCDO,MAAMsE,EAAgB7I,OAAO8I,IAAI,iBAEjC,MAAMC,EAIX,WAAAnH,CAAYoH,EAAe,CAAC,GAHnB,KAAAC,QAA4B,IAAItI,IAC/B,KAAAqF,IAAwB,IAAIrF,IAGpCrB,OAAOiJ,QAAQ,CACbW,QAAS,GACTC,OAAQ,GACRC,OAAQ,CAAC,KACNJ,IACFlE,SAAQ,EAAE1F,EAAKc,MAChBa,KAAKkI,QAAQpG,IAAIzD,EAAKc,EAAM,GAEhC,CAEA,WAAImJ,GACF,OAAOtI,KAAKtB,IAAI,UAClB,CAEA,WAAI4J,CAAQC,GACVvI,KAAKiF,IAAInD,IAAI,UAAWyG,EAC1B,CAEA,WAAIC,GACF,OAAOxI,KAAKtB,IAAI,UAClB,CAEA,WAAI8J,CAAQrJ,GACVa,KAAKiF,IAAInD,IAAI,UAAW3C,EAC1B,CAEA,OAAIwG,GACF,OAAO3F,KAAKiF,IAAIvG,IAAI,MACtB,CAEA,OAAIiH,CAAIxG,GACNa,KAAKiF,IAAInD,IAAI,MAAO3C,EACtB,CAEA,WAAIgJ,GACF,OAAOnI,KAAKtB,IAAI,UAClB,CAEA,WAAIyJ,CAAQA,GACVnI,KAAKiF,IAAInD,IAAI,UAAWqG,EAC1B,CAEA,UAAIC,GACF,OAAOpI,KAAKtB,IAAI,SAClB,CAEA,UAAI0J,CAAOA,GACTpI,KAAKiF,IAAInD,IAAI,SAAUsG,EACzB,CAEA,UAAIC,GACF,OAAOrI,KAAKtB,IAAI,SAClB,CAEA,UAAI2J,CAAOlJ,GACT,MAAMkJ,EAAS,IAAIrI,KAAKqI,UAAWlJ,GACnCa,KAAKiF,IAAInD,IAAI,SAAUuG,EACzB,CAEA,SAAII,GACF,MAA6B,UAAtBzI,KAAKqI,OAAOK,KACrB,CAEA,SAAID,CAAMA,GACRzI,KAAKqI,OAAS,IAAIrI,KAAKqI,OAAQK,MAAOD,EAAQ,QAAU,OAC1D,CAOA,OAAA1E,CAAQ4E,EAAwEC,GAC9E,OAAO,IAAIC,IAAI,IAAIC,MAAMzH,KAAKrB,KAAKkI,QAAQpE,WAAYgF,MAAMzH,KAAKrB,KAAKiF,IAAInB,UAAUC,SAAS1F,IAC5FsK,EAAW3I,KAAK+I,OAAO1K,GAAMA,EAAK2B,KAAKiF,IAAI,GAC1C2D,EACL,CAOA,GAAA9G,CAAIxB,EAAmDnB,GAcrD,MAb2B,iBAAhBmB,EACL0I,QAAQ3F,IAAIrD,KAAMM,GAEpBN,KAAKM,GAAenB,EAEpBa,KAAKiJ,OAAO3I,EAAanB,GAG3BZ,OAAOiJ,QAAQlH,GAAayD,SAAQ,EAAE1F,EAAKc,MACzCa,KAAK8B,IAAIzD,EAAKc,EAAM,IAIjBa,IACT,CAEA,MAAAiJ,CAAO3I,EAAqBnB,GAG1B,OAFA,IAAA+J,UAASlJ,KAAKiF,IAAK3E,EAAanB,GAEzBa,IACT,CAQA,GAAAtB,CAAa4B,EAAqBgC,GAChC,OAAOtC,KAAK+I,OAAOzI,EAAagC,EAClC,CAEU,MAAAyG,CAAOzI,EAAqBgC,GACpC,MAAMnD,GAAQ,IAAAgK,UAASnJ,KAAKiF,IAAK3E,GAEjC,YAAcrC,IAAVkB,EACKA,GAGF,IAAAgK,UAASnJ,KAAKkI,QAAS5H,EAAagC,EAC7C,ECvHF,MAAM8G,EAA8B,CAAC,QAAS,WAsBvC,MAAMC,UAAwB9E,EAGnC,GACA,GAEA,WAAA1D,GACEuC,QANK,KAAAiF,OAAmBiB,QAClB,KAAAC,uBAAiC,EACzC,QAAS,IAAI5J,EACb,SAAmB,EAIjBK,MAAK,EAAO8B,IAAIuH,EAAiBrJ,MACjCA,MAAK,EAAO8B,IAAIkG,EAAiB,IAAIA,EACvC,CAEA,YAAIvD,GACF,OAAOzE,MAAK,EAAOtB,IAAIsJ,EACzB,CAEA,YAAIvD,CAASA,GACXzE,MAAK,EAAO8B,IAAIkG,EAAiBvD,EACnC,CAEA,QAAA+E,GACE,OAAOxJ,MAAK,CACd,CAKO,OAAAyJ,GACL,MAAO,IAAIzJ,MAAK,EAAO0J,SACzB,CAqBA,GAAAhL,CAAayB,EAAyBW,GACpC,OAAKd,KAAKqD,IAAIlD,GAIPH,MAAK,EAAOtB,IAAIyB,GAHdH,KAAK2J,QAAQxJ,EAAOW,EAI/B,CAKA,OAAA8I,CAAoB7I,EAAWD,GAC7B,OAAOd,KAAK8E,aAAa/D,GAAMkE,KAAKZ,GAC3BrE,KAAK2J,QAActF,EAASlE,MAAOW,IAE9C,CAKA,GAAAuC,CAAIlD,GACF,YAAkClC,IAA3B+B,MAAK,EAAOtB,IAAIyB,EACzB,CAKA,KAAA0J,CAAM1J,EAAsB0J,GAG1B,OAFA7J,MAAK,EAAO8B,IAAI+H,EAAO7J,MAAK,EAAOtB,IAAIyB,IAEhCH,IACT,CAwBO,OAAA2J,CAAoBxJ,EAA4BW,EAAkC,CAAC,GACxF,IAAIJ,EAAgBI,EAAQgJ,OAAShJ,EAAQgJ,OAAOpL,IAAIyB,QAASlC,EAEjE,QAAiBA,IAAbyC,EACF,OAAOA,EAGT,GAAIP,IAAUZ,EACZ,OAAOuB,EAAQiJ,QAKjB,GAFArJ,EAAYI,EAAQkJ,aAAmC/L,EAAzB+B,MAAK,EAAOtB,IAAIyB,GAE9BlC,MAAZyC,EACF,OAAOA,EAGT,MAAM2D,EAAWrE,KAAKiK,eAAe9J,GAGrC,IAAKkE,GAAYvD,EAAQkJ,QAGvB,OAFAtJ,EAAWV,KAAKkK,YAAY/J,EAAOW,GAE/BuD,EACKrE,KAAKmK,WAAW9F,EAAW3D,GAG7BA,EAKT,OAFAA,EAAWV,KAAKkK,YAAY/J,EAAOW,GAE3BuD,EAAStC,OACf,KAAKtC,EAAcwC,UAKjB,OAJKnB,EAAQkJ,SACXhK,KAAKoK,cAAc/F,EAAUvD,GAGxBd,KAAKmK,WAAW9F,EAAU3D,GACnC,KAAKjB,EAAc4K,QAOjB,OANIvJ,EAAQgJ,SACVhJ,EAAQgJ,OAAOhI,IAAIuC,EAASlE,MAAOO,GAEnCV,KAAKoK,cAAc/F,EAAUvD,IAGxBJ,EAGX,OAAOA,CACT,CAyBO,MAAA4J,CAAmBnK,EAA4BW,EAAkC,CAAC,GACvF,OAAOd,KAAK2J,QAAQxJ,EAAOW,EAC7B,CAKA,eAAMyJ,GACJ,IAAK,MAAO,CAAElG,KAAarE,MACpBA,KAAKqD,IAAIgB,EAASlE,QAAUkE,EAASrC,iBAClChC,KAAK2J,QAAQtF,EAASlE,MAGlC,CAKA,QAAAqK,GACE,IAAK,MAAO,CAAEnG,KAAarE,KAEpBA,KAAKqD,IAAIgB,EAASlE,QAAUkE,EAAStC,QAAUtC,EAAcwC,WAChEjC,KAAK2J,QAAQtF,EAASlE,MAG5B,CAOA,UAAMsK,CAAKnF,EAAuBgC,KAGhCtH,MAAK,GAAU,QAET,IAAA0K,YAAW,eAEjB1K,KAAK2K,UAAUrF,SAGTtF,KAAKuK,YAGXvK,KAAKwK,iBAEC,IAAAE,YAAW,UACnB,CAMA,oBAAAE,GACE,GAAI5K,KAAKuJ,sBACP,OAEF,MAAMsB,EAAsB,IAAIjL,IAEhCwD,MAAMW,SAASM,IACTA,EAASnC,eAAmC,kBAAlBmC,EAAStD,MACrCxC,OAAOiJ,QAAQnD,EAASnC,eAAe6B,SAAQ,EAAE1F,EAAKc,MAC/CiK,EAA4BhE,SAAS/G,KACxCc,EAAQ0L,EAAoBxH,IAAIhF,IAAO,IAAAyM,WAAUD,EAAoBnM,IAAIL,GAAMc,IAAS,IAAA4L,WAAU5L,GAClG0L,EAAoB/I,IAAIzD,EAAKc,GAC/B,GAEJ,IAGF0L,EAAoB9G,SAAQ,CAAC5E,EAAOd,KAClC2B,KAAKyE,SAAS3C,IAAIzD,GAAK,IAAAyM,WAAU3L,EAAOa,KAAKyE,SAAS/F,IAAIL,IAAM,IAGlE2B,KAAKuJ,uBAAwB,CAC/B,CASO,IAAAyB,CAAKC,KAAsBtK,GAChC,OAAO,IAAA+J,YAAWO,EAAWtK,EAC/B,CASO,KAAAuK,CAAeD,EAAmB9L,KAAewB,GACtD,OAAO,IAAAwK,QAAOF,EAAW9L,EAAOwB,EAClC,CASO,UAAAyK,CAAoBH,EAAmB9L,KAAewB,GAC3D,OAAO,IAAA0K,aAAYJ,EAAW9L,EAAOwB,EACvC,CAKA,aAAMZ,SACE,IAAA2K,YAAW,cACjB1K,MAAK,EAAO+D,SAAQ,CAACoB,EAAGhF,MACtB,IAAAmL,MAAKnL,EAAM,GAEf,CAOU,SAAAwK,CAAUrF,EAAuBgC,KAUzC,OARAtH,KAAKqF,aAAaC,GAGlBtF,KAAK4K,uBAGL5K,KAAKuL,0BAEEvL,IACT,CASU,cAAAiK,CAAe9J,EAAsBqL,GAAQ,GAKrD,OAJKxL,KAAK2E,YAAYxE,KAAWuD,EAAgBL,IAAIlD,KAAUqL,GAC7DxL,KAAK0E,YAAYvE,GAGZH,KAAK6E,YAAY1E,EAC1B,CAkBU,WAAA+J,CAAe1G,EAAuB1C,EAAkC,CAAC,GACjF,MAAM2K,EAAezL,KAAK0L,iBAAiBlI,EAAQ1C,GAEnD,IAAK2K,EACH,OAGF,MAAM,MAACtL,EAAK,KAAE6G,EAAI,UAAE2E,EAAS,QAAExD,EAAO,SAAE9D,GAAYoH,EAKpD,IAAI/K,GAHJ,IAAAkL,OAAM,gBAAiBzL,EAAO,CAACsL,KAC/B,IAAAG,OAAM,iBAAiBrL,OAAO8D,EAAStD,QAAS,CAAC0K,IAGjD,IAAI9E,GAAyB,EAE7B,IACE,MAAMkF,EACHC,GACD,CAAC3L,EAAwCkC,KACvCsE,EAAoB,CAACxG,QAAOkC,QAAO2E,SAE/B,IAAA+E,SAAQ5L,GACHH,KAAK4J,QAAQzJ,EAAM,GAAIW,IAGzB,IAAAkL,iBAAgB7L,EAAOS,EAAU,GACpCyD,EACArE,KAAK2J,QAAQxJ,EAAO,CAClB2L,SACAhC,OAAQhJ,EAAQgJ,OAChBC,QAAS1F,GAAUjC,WAAWC,IAAUvB,EAAQiJ,WAK1D5B,EAAQpE,QAAQ8H,KAGhB,MAAMI,EAAWjF,EAAK/B,IAAI4G,EAAiB1L,IAE3CwG,GAAoB,EAEpBjG,EAAWiL,EAAUM,EACvB,CAAE,MAAOrF,GACPX,EAAeS,mBAAmBvG,EAAOwG,EAAmBC,EAC9D,CAEA,QAAiB3I,IAAbyC,EACF,MAAM,IAAIuF,EACR9F,EACA,4FAA2F,IAAAwB,QAAOxB,MAYtG,OARIO,IAAY,IAAAa,UAAQ,IAAAC,SAAQd,KAC9BsI,QAAQxK,eAAekC,EAAUtB,EAAmB,CAClDV,IAAK,KAAM,CAAEsL,QAASlJ,EAAQkJ,QAASF,OAAQhJ,EAAQgJ,YAI3D,IAAA8B,OAAM,eAAgBzL,EAAO,CAACO,EAAU+K,IAEjC/K,CACT,CAEQ,uBAAA6K,GACNvL,KAAKyE,SAAS0D,QAAUnI,KAAKyE,SAAS0D,SAClCpF,QAAQa,IAAS,IAAAsI,UAAStI,IAAS,UAAWA,GAAQA,EAAKzD,QAAUkJ,IACtEpE,KAAKrB,IACJ,IAAI,IAAAsI,UAAStI,IAAS,UAAWA,EAAM,CACrC,MAAM,MAACzD,KAAUgM,GAASvI,EAEpBS,EAAWrE,KAAKiK,eAAe9J,GAAO,GAE5C,GAAIkE,EAAU,CAKZ,GAJAA,EAASvB,cAAW7E,EACpBoG,EAAS9B,qBAAkBtE,EAC3BoG,EAASxB,gBAAa5E,EAElB,aAAckO,EAEhB,YADA9H,EAASpD,SAAWkL,EAAMlL,UAI5B,GAAI,eAAgBkL,EAElB,YADA9H,EAASxB,WAAasJ,EAAMtJ,YAI9B,GAAI,oBAAqBsJ,EAEvB,YADA9H,EAAS9B,gBAAkB4J,EAAM5J,iBAInC,GAAI,QAAS4J,EAEX,YADA9H,EAASvB,SAAWqJ,EAAMC,IAG9B,CACF,CAEA,OAAOxI,CAAI,IAEZb,OAAOC,QACZ,CAOQ,gBAAA0I,CAAiBvL,EAAsBW,GAC7C,MAAMgJ,EAAShJ,EAAQgJ,QAAU,IAAInK,EAErCmB,EAAQgJ,OAASA,EAEjB,IAEI6B,EAMAtH,EARA8D,EAA2DrH,EAAQqH,QACnEnB,EAAoClG,EAAQkG,KAGhD,IAAK7G,GAASA,IAAU5B,OACtB,MAAM,IAAI2H,MAAM,oHAclB,GANE7B,EAHGrE,KAAK2E,YAAYxE,GAGTH,KAAK6E,YAAY1E,GAFjB,IAAIS,EAAST,GAK1B6G,EAAOA,GAAQ3C,EAAS2C,KACxBmB,EAAUA,GAAW9D,EAAS8D,aAEJlK,IAAtBoG,EAASvB,SACX6I,EAAY,KAAO,IAAAU,YAAWhI,EAASvB,UAAYuB,EAASvB,WAAauB,EAASvB,cAC7E,GAAIuB,EAASxB,WAClB8I,EAAa3E,GAAgB3C,EAASxB,cAAemE,QAChD,GAAI3C,EAAS9B,gBAClBoJ,EAAYW,MAAOtF,IACjBA,QAAauF,QAAQC,IAAIxF,GAClB3C,EAAS9B,mBAAoByE,QAEjC,KAAI3C,EAASpD,SAKlB,OAAO,EAHP+F,EAAOA,GAAQS,EAA2BpD,EAASpD,UACnD0K,EAAa3E,GAA0B,IAAI3C,EAASpD,YAAY+F,EAGlE,CAEA,MAAO,CACL7G,QACA6G,KAAMA,GAAS,GACfmB,QAASA,GAAW,GACpBwD,YACAtH,WACAyF,SAEJ,CAEQ,aAAAM,CAAc/F,EAAoBvD,GACxC,GAAIuD,EAASxE,MAAO,CAClB,GAAIwE,EAAStC,QAAUtC,EAAc4K,QAAS,CAC5C,GAAIvJ,EAAQgJ,QAAUzF,EAASxE,OAAO4M,WAAY,CAChD,MAAM,OAAC3C,GAAUhJ,EAEjBA,EAAQgJ,OAAOjK,MAAM6M,GAAG,cAAc,IAAI/L,IACjC0D,EAASxE,OAAO4M,aAAa3C,EAAOpL,IAAI2F,EAASlE,UAAWQ,IAEvE,CAEA,MACF,CAEApC,OAAOiJ,QAAQnD,EAASxE,OAAOkE,SAAQ,EAAE4I,EAAOC,OAK9C,IAAAC,KAAIF,EAAOtI,EAASlE,OAJH,IAAIQ,IACZiM,EAAG5M,MAAK,EAAOtB,IAAI2F,EAASlE,UAAWQ,IAGZ,GAExC,CACF,CAEQ,UAAAwJ,CAAW9F,EAAoB3D,GACrC,MAAMoB,EAAOpB,IACXV,MAAK,EAAO8B,IAAIuC,EAASlE,MAAOO,GAChC2D,GAAUwF,OAAS7J,KAAK6J,MAAMxF,EAASlE,MAAOkE,EAASwF,MAAM,EAG/D,QAAI,YAAaxF,IAAaA,EAASrC,YAAc,IAAA8K,WAAUpM,IAO/DoB,EAAIpB,GAEJA,EAAWA,EAASqM,MAAMrM,IACxBoB,EAAIpB,GAEGA,OAXPoB,EAAIpB,GAEGA,EAaX,ECrlBF,IAAIsM,EAAkC,IAAI3D,EAgBnC,SAAS4D,IACd,OAAOD,CACT,CAEOV,eAAeY,UACdF,EAAejN,UACrBiN,EAAiB,IAAI3D,CACvB,CCyBO,SAAS8D,IACd,OAAgEC,GACvD,cAA6BA,EAClC,WAAAvM,IAAeF,GACbyC,SA/CR,SAAmCjD,EAAaQ,GAC9C,MAAM0M,EAAMJ,IACNnD,EAAS,IAAInK,EACbqH,EAAwBS,EAA2BtH,GACnDmN,EAAc,GACd5K,EAAS6K,KAAKC,IAAIxG,EAAKtE,OAAQ/B,EAAK+B,QAE1C,IAAK,IAAI+K,EAAI,EAAGA,EAAI/K,EAAQ+K,IAC1B,QAAgBxP,IAAZ0C,EAAK8M,GACPH,EAAKI,KAAK/M,EAAK8M,QACV,CACL,MAAMtO,EAAQ6H,EAAKyG,GACb/M,GAAW,IAAAqL,SAAQ5M,GAASkO,EAAIzD,QAAQzK,EAAM,GAAI,CAAC2K,SAAQgC,OAAQ3L,IAAUkN,EAAI/C,OAAOnL,EAAO,CAAC2K,SAAQgC,OAAQ3L,IAEtHmN,EAAKI,KAAKhN,EACZ,CAGF,OAAO4M,CACT,CA4BiBK,CAA0BP,EAAQzM,GAC7C,EAGN,CCjDO,SAASuB,EAAc/B,EAAuB+B,GACnD,GAAI/B,EAAO,CACT,MAAMyB,EAAQ,EAAAR,MAAMC,KAAKlB,GAMzB,OAJI+B,GACFN,EAAME,IAAI,gBAAiBI,GAGtBN,EAAMlD,IAAI,gBAAiBwD,EACpC,CAEA,OAAO+K,IAAWxI,QACpB,CCXO,MAAMmJ,UAAoChN,EAG/C,WAAAC,CAAYV,EAAsBW,EAA6B,CAAC,GAC9DsC,MAAMjD,EAAOW,GACbd,KAAKe,KAAOrB,EAAamO,UAC3B,CAMA,eAAIC,GACF,OAAOvP,OAAO2C,OACZ,CACEkL,IAAK,GACL2B,SAAU,GACVC,UAAW,IAEbhO,KAAK4B,MAAMlD,IAAI,cAAe,CAAC,GAEnC,CAMA,eAAIoP,CAAYA,GACd,MAAMG,EAASjO,KAAK8N,YAGpBvP,OAAOuF,KAAKgK,GAAa/J,SAAS1F,IAFnB,EAACA,EAAa6P,EAAQC,KAAYD,EAAE7P,GAAO6P,EAAE7P,GAAK2G,OAAOmJ,EAAE9P,GAAM,EAG9E2G,CAAO3G,EAAK4P,EAAQH,EAAY,IAGlC9N,KAAK4B,MAAME,IAAI,cAAemM,EAChC,ECpBK,SAASG,GAA6B,MAACjO,EAAK,QAAEmB,KAAY+M,IAC/D,OAAOC,EAAWnO,GAASmB,EAAS,IAC/B+M,EACHlO,MAAOA,GAASmB,IACqBiN,SACzC,CCAO,SAASC,EACdrC,EACAsC,EAA4C,CAAC,GAE7C,MAAO,CAA+BtO,EAAeW,EAAuC,CAAC,KAC3F,MAAM4N,EAAS,CACbjL,QAASwJ,IAAWzD,cACjB1I,KACA2N,EACHtO,SAGIkE,EAAWX,EAAgBH,MAAMpD,EAAOuO,GAM9C,OAJKA,EAAOjL,QACVwJ,IAAWrI,YAAYzE,EAAOkE,GAGzB8H,EAAM9L,QACX,CAACsO,EAAK/P,KACG,IACF+P,EACH,CAAC/P,GAAO,SAAUO,GAEhB,OADCkF,EAAiBzF,GAAQO,EACnBa,IACT,KAGJ,CACE,OAAA7C,CAAQA,GAGN,OAFAkH,EAASnB,QACTmB,EAASxB,WAAa1F,EACf6C,IACT,EACA,YAAA4O,CAAaA,GAGX,OAFAvK,EAASnB,QACTmB,EAAS9B,gBAAkBqM,EACpB5O,IACT,EACA,KAAAb,CAAMA,GAIJ,OAHAkF,EAASnB,QACTmB,EAASvB,SAAW3D,EACpBkF,EAAStD,KAAOrB,EAAamP,MACtB7O,IACT,EACA,MAAM8O,GAGJ,OAFAzK,EAASnB,QACTmB,EAASpD,SAAW6N,EACb9O,IACT,EACA4B,MAAK,IACIyC,EAASzC,MAElB2M,QAAO,IACElK,EAETlE,MAAK,IACIkE,EAASlE,OAGrB,CAEL,CDtFAuD,EAAgBO,eAAevE,EAAamO,WAAYD,GEAxD,MAAMmB,EAAQ,CAAC,OAAQ,QAAS,OAAQ,QAAS,QAAS,OAAQ,UAAW,gBAAiB,YACjFT,EAAaE,EAAgDO,GAC7DC,EAAcR,EAAgDO,EAAO,CAChFhO,KAAMrB,EAAauP,cAERC,EAAaV,EAA8E,IAAIO,EAAO,eAAgB,CACjIhO,KAAMrB,EAAamO,aCXd,MAAMsB,UAAkCjJ,MAG7C,WAAArF,CAAY2C,EAAalD,GACvB8C,MACE,8DAA6D,IAAAzB,SAC3D,IAAAH,SAAQgC,OACLlD,qGANT,KAAAoB,KAAO,qBAQP,ECNF,IAAI0N,EACAC,EAAqB,CAAC,EAC1B,MAAMC,EAAkC,GAKjC,SAASC,GAAgB,UAC9BrK,EAAS,QACT8E,GAIE,CAAC,GAiBH,OAhBKoF,IAAgBlK,IACnBkK,EAAe,IAAIzP,EAEfuF,IACFA,EAAUnB,SAASyL,IACjBJ,EAActN,IAAI0N,EAAErP,MAAOqP,EAAEpD,IAAI,IAGnCgD,EAAatN,IAAIuH,EAAiB4D,MAGhCjD,IACFqF,EAAcrF,QAAUA,IAIrBoF,CACT,CAEO,SAASK,IACd,MAAO,IAAIJ,EACb,CAKO,SAASK,IACdN,GAAgBE,EAAa5B,KAAK0B,GAClCA,OAAenR,EACfoR,EAAgB,CAAC,CACnB,CAEO,SAASM,IACdD,IACAJ,EAAarK,KAAKX,GAASA,EAAKsL,SAClC,CChCO,SAASC,EACd1P,EACAkO,GAEA,OAAOpB,IAAWtD,QAAQxJ,EAAO,IAC5BkO,KACAoB,IACH3F,OAAQuE,GAAMvE,QAAUyF,KAE5B,CClBO,SAASO,EAAc3P,EAAwBkO,GACpD,OAAOpB,IAAWrD,QAAWzJ,EAAO,IAAIkO,EAAMvE,OAAQuE,GAAMvE,QAAUyF,KACxE,CC6GO,SAASQ,GACd5P,EACAkO,EAA+F,CAAC,GAIhG,OAFAA,EAAuB,mBAATA,EAAsB,CAAC2B,UAAW3B,GAAQA,EAEjD,CAAC7K,EAAalD,EAA0C+B,KAG7D,QAFoB,IAAA4N,iBAAgB,CAACzM,EAAQlD,EAAa+B,KAGxD,KAAK,EAAA6N,eAAeC,WACdhQ,GA7HZ,SACEA,GACA,OACEqD,EAAM,YACNlD,EAAW,eACX8P,IAOF,MAAMC,EAAa5I,EAA2BjE,EAAQlD,GAChDS,EAAOsP,EAAWD,GAExBC,EAAWD,GAAkBrP,IAAS+H,MAAQ,CAAC3I,GAASA,EAExD,EAAAuH,SAAS4I,cAAc9M,EAAQlD,EAAc+P,GAC7CxI,EAA2BrE,EAAQ6M,EACrC,CA2GUE,CAASpQ,EAAO,CAACqD,SAAQlD,cAAa8P,eAAgB/N,IAExD,MACF,KAAK,EAAA6N,eAAeM,MAvF1B,SACEhN,EACAlD,GACA,MAACH,EAAK,UAAE6P,EAAa1R,GAAMA,EAAC,QAAEyL,IAE9B,MAAM0G,EAASxR,SAEVuE,EAAOnE,IACV2J,QAAQxK,eAAegF,EAAQnE,EAAqB,CAClDF,MAAO,IAAI0J,IACXpK,YAAY,EACZiS,cAAc,IAIlBlN,EAAOnE,GAAqBmF,IAAIlE,IAEhC,IAAAqQ,aAAW,IAAM3H,QAAQ4H,eAAepN,EAAQlD,KAChD0I,QAAQxK,eAAegF,EAAQlD,EAAa,CAC1C,GAAA5B,GACE,MAAMmS,EAzCZ,SAAsB1Q,EAA0DqD,EAAalD,GAC3F,MAAMuQ,EAAU1Q,GAAS,EAAAuH,SAASoJ,QAAQtN,EAAQlD,GAElD,GAAIuQ,IAAYtS,OACd,MAAM,IAAI4Q,EAA0B3L,EAAQjD,OAAOD,IAGrD,OAAOuQ,CACT,CAiCsBE,CAAa5Q,EAAOqD,EAAQlD,GACtC0Q,EAAe,EAAAtJ,SAASoJ,QAAQtN,EAAQlD,GAExC2Q,EAAqC,CACzCjH,UAAWhK,KAAKZ,IAAoB4K,QACpCF,OAAQ9J,KAAKZ,IAAoB0K,OACjCC,QAASA,GAAW,EAAA3I,MAAMC,KAAKmC,EAAQlD,GAAa5B,IAAIY,IAkB1D,YAfqBrB,IAAjB+B,KAAKyQ,KACPzQ,KAAKyQ,GAAUO,IAAiBlI,MAAQgH,EAAW3P,EAAiB8Q,GAAcpB,EAAOgB,EAASI,IAGpG,GAAGjM,OAAOhF,KAAKyQ,IAAS1M,SAAQ,CAACrD,EAAe2B,MAC1C,IAAAyK,WAAU9M,KAAKyQ,KACjB/P,EAASqM,MAAMmE,IACblR,KAAKyQ,GAASpO,GAAS6O,EACnBF,IAAiBlI,QACnB9I,KAAKyQ,GAAUS,EACjB,GAEJ,IAGKlB,EAAUhQ,KAAKyQ,GAAS,CAAChT,KAAMuC,KAAMwD,SAAQlD,eACtD,GAEJ,CAyCQ6Q,CAAuB3N,EAAQlD,EAAc,IAAI+N,EAAMlO,UAC3D,CAEJ,CChIO,SAASiR,GAAc3M,EAAwC,CAAC,GACrE,MAAO,IAAI9D,KACT,QAAQ,IAAAsP,iBAAgBtP,IACtB,KAAK,EAAAuP,eAAemB,MAClBnP,EAAcvB,EAAK,GAAI8D,GAEvB,MACF,QACA,KAAK,EAAAyL,eAAeC,WAClB,OAAOJ,GAAO/H,EAAP+H,CAAwBpP,EAAK,GAAIA,EAAK,GAAIA,EAAK,IAC1D,CAEJ,CCvBO,SAAS2Q,GAAeC,EAAoBjP,GACjD,OAAO2K,IAAWxI,SAAS/F,IAAI6S,EAAYjP,EAC7C,CCFO,SAASkP,GAAahO,EAAalD,EAA8BiR,EAAoBjP,GAC1F,MAAMmO,EAASxR,UAEf,IAAA0R,aAAW,IAAM3H,QAAQ4H,eAAepN,EAAQlD,KAChD0I,QAAQxK,eAAegF,EAAQlD,EAAa,CAC1C,GAAA5B,GACE,QAAqBT,IAAjB+B,KAAKyQ,GACP,OAAOzQ,KAAKyQ,GAGd,MAAMtR,EAAQmS,GAASC,EAAYjP,GAInC,OAFAtC,KAAKyQ,GAAUlS,OAAOkT,QAAO,IAAA1G,WAAU5L,IAEhCa,KAAKyQ,EACd,EACA,GAAA3O,CAAI3C,QAGWlB,KAFAqT,GAASC,EAAYjP,IAAiBtC,KAAKyQ,UAEpBxS,IAAVkB,IACxBa,KAAKyQ,GAAUtR,EAEnB,EACAV,YAAY,EACZiS,cAAc,GAElB,CAqCO,SAASgB,GAAyBH,EAAoBjP,GAC3D,MAAO,CAACkB,EAAQlD,IACPkR,GAAahO,EAAQlD,EAAaiR,EAAYjP,EAEzD,CFtCAgM,EAAW8C,IAAejU,SAAQ,IAAM8P,IAAWxI,W,IGjCvCkN,G,UCqDL,SAASC,GAAW9Q,GACzB,MAAM,SAACqB,EAAW,GAAE,KAAEN,KAASwM,GAvCjC,SAAoBvN,GAClB,MAAuB,iBAAZA,GAAwBA,aAAmB+Q,SAAU,IAAAC,qBAAoBhR,GAC3E,CACLe,KAAMf,GAIHA,CACT,CA+ByCiR,CAAWjR,GAElD,OAAO,IAAAkR,gBACJxO,IACC0L,EAAW1L,EAAQ6K,EAAK,GAE1BxM,IAAQ,KAAAoQ,MAAKpQ,IACb,KAAAqQ,aAAY/P,GAEhB,CC1CO,SAASgQ,GAAWrR,EAAiC,CAAC,GAC3D,OAAQ0C,IACN,MAAM6K,EAAO,IACRvN,KACCA,EAAQX,MAAQ,CAACc,SAAUuC,GAAU,CAACrD,MAAOqD,IAEnD8K,EAAWD,EAAKlO,MAAOkO,EAAK,CAEhC,CCpBO,SAAS+D,GAAyB5O,EAAmBlD,GAC1D,OAAO,EAAAc,MAAMiR,WAAW7O,EAAQlD,GAAa5B,IAAIc,EACnD,CAEO,SAAS8S,GAAc9O,EAAalD,EAA8BH,EAAsBW,GAC7F,MAAMyR,GAAQ,IAAA/Q,SAAQgC,GAChBgP,EAAaxJ,QAAQyJ,yBAAyBF,EAAM1T,UAAWyB,GAC/DoS,EAAiBF,EAAYrT,MAC7BsR,EAASxR,SA0Cf,OAxCA,EAAAmC,MAAMiR,WAAWE,EAAOjS,GAAawB,IAAItC,EAAwBsB,GAmCjE0R,EAAYrT,MAjCZ,YAAsBwB,GACpB,MAAMgS,EAAQC,IACZ,IAAKA,EACH,OAAOF,EAAeG,MAAM7S,KAAMW,GAGpC,MAAMiS,CAAG,EAGLE,EAAmC,CACvCtP,OAAQ+O,EACRjS,cACAK,OACAG,UACA6R,QAGI1B,EAAqC,CACzCjH,UAAWhK,KAAKZ,IAAoB4K,QACpCF,OAAQ9J,KAAKZ,IAAoB0K,QAKnC,OAFA9J,KAAKyQ,GAAUzQ,KAAKyQ,IAAWZ,EAAO1P,EAAO8Q,GAEtCjR,KAAKyQ,GAAQsC,UAClB,IACKD,EACHhS,WAEF6R,EAEJ,EAIA3J,QAAQ4H,eAAe2B,EAAM1T,UAAWyB,GACxC0I,QAAQxK,eAAe+T,EAAM1T,UAAWyB,EAAakS,GAE9CA,CACT,CASO,SAASQ,GAAwChE,EAAsBlO,GAC5E,MAAO,IAAIH,KACT,MAAO6C,EAAQlD,GAAeK,EAE9B,QADa,IAAAsP,iBAAgBtP,IAE3B,KAAK,EAAAuP,eAAemB,OAClB,IAAA4B,mBAAkBzP,EAAQwP,GAAUhE,EAAalO,IACjD,MACF,KAAK,EAAAoP,eAAegD,OAClB,OAAOZ,GAAc9O,EAAQlD,EAAa0O,EAAalO,GAC3D,CAEJ,CCrEO,SAASqS,KACd,OAAOhB,GAAW,CAChBpR,KAAMrB,EAAauP,aAEvB,CCPO3C,eAAe8G,GAAkBjW,GACtC,MAAO+K,QAAS/H,SAAehD,IAE/B,IAAK8P,IAAW5J,IAAIlD,GAAQ,CAC1B,MAEMkT,QAFiBxD,EAAO1P,GAI1B,YAAakT,IAAoB,IAAAhH,YAAWgH,EAAiBC,gBACzDD,EAAiBC,SAE3B,CAEA,OAAOrG,IAAWvO,IAAIyB,EACxB,CAEOmM,eAAeiH,GACpBpW,GAIA,IACE,aAAaiW,GAAWjW,EAC1B,CAAE,MAAOqW,GACP,MACF,CACF,CC/BA,SAAS,GAAW7S,EAAa8S,GAAW,GAC1C,SAASC,EAAKrV,EAAasV,GACzB,OAAOrH,UACL,IACE,MAAO,CAACjO,GAAM8B,SAAewT,IAE7B,MAAO,CAACzL,QAAS/H,EACnB,CAAE,MAAOqT,GACP,IAAKC,EACH,MAAMD,EAGR,MACF,EAEJ,CAEA,OAAI,IAAAnH,YAAW1L,EAAK,IACX+S,EAAK,UAAW/S,EAAK,IAGvB+S,EAAK/S,EAAK,GAAIA,EAAK,GAC5B,CAsBO,SAASiT,MAAcjT,GAC5B,IAAIgT,EAAW,GAAWhT,GAE1B,MAAO,CAAC6C,EAAalD,MACnB,IAAAqQ,aAAW,IAAM3H,QAAQ4H,eAAepN,EAAQlD,KAChD0I,QAAQxK,eAAegF,EAAQlD,EAAa,CAC1CgM,IAAS,SACA8G,GAAgBO,IAEzB,CAEN,CAoBO,SAASE,MAAsBlT,GACpC,MAAMgT,EAAW,GAAWhT,GAAM,GAElC,MAAO,CAAC6C,EAAalD,MACnB,IAAAqQ,aAAW,IAAM3H,QAAQ4H,eAAepN,EAAQlD,KAChD0I,QAAQxK,eAAegF,EAAQlD,EAAa,CAC1CgM,IAAS,SACAiH,GAAmBI,IAE5B,CAEN,CCpDO,SAASG,GAAOhT,EAAkC,CAAC,GACxD,MAAM,OAACiT,EAAM,QAAE5L,EAAO,KAAEnB,EAAI,MAAEjF,KAAUG,GAAiBpB,EAEzD,OAAO,IAAAkR,eACLZ,GAAclP,GACdiQ,GAAW,CACTpR,KAAMrB,EAAasU,OACnBjS,MAAOtC,EAAcwC,UACrBkG,UACAnB,OACAsH,YAAY,IAGlB,CCzCO,SAAS2F,GAAMlS,EAAiDtC,EAAc4K,SACnF,OAAO,IAAA6J,UAAS,QAASnS,EAC3B,CCmCO,SAASoS,GAAK3Q,EAAalD,EAA0C+B,GAC1E4R,GAAMxU,EAAc2U,SAApBH,EAA8B,IAAAzS,SAAQgC,IACtCuM,GAAOxQ,EAAPwQ,CAA6BvM,EAAQlD,EAAa+B,EACpD,CCxCO,SAASgS,GAAiBC,GAC/B,OAAQ9Q,IACNE,EAAgBhF,IAAI4V,GAAmBrT,SAAWuC,CAAM,CAE5D,CCHO,SAAS+Q,KACd,OAAOpC,IACT,CC8BO,SAASqC,GAAQ1T,GACtB,MAAO,CAAC0C,EAAgBlD,EAA8B+B,KAGpD,QAFoB,IAAA4N,iBAAgB,CAACzM,EAAQlD,EAAa+B,KAGxD,KAAK,EAAA6N,eAAeC,WAClB,EAAA/O,MAAMC,KAAKmC,GAAQD,MAAM,GAAGhE,KAAwB8C,IAASvB,GAC7D,MAEF,KAAK,EAAAoP,eAAeM,KAClB,EAAApP,MAAMC,KAAKmC,EAAQlD,GAAawB,IAAIxC,EAAgBwB,GACpD,MAEF,QACE,MAAM,IAAI,EAAA2T,yBAAyBD,GAAS,CAAChR,EAAQlD,EAAa+B,IACtE,CAEJ,CCxDO,SAASqS,GAAUlR,EAAalD,EAA8BiR,EAAoBjP,GACvF,MAAMkQ,EAAa,CACjB9T,IAAG,IACMuO,IAAWxI,SAAS/F,IAAI6S,EAAYjP,GAE7C,GAAAR,CAAI3C,GACF8N,IAAWxI,SAAS3C,IAAIyP,EAAYpS,EACtC,EACAV,YAAY,EACZiS,cAAc,IAGhB,IAAAC,aAAW,IAAM3H,QAAQ4H,eAAepN,EAAQlD,MAChD,IAAAqQ,aAAW,IAAM3H,QAAQxK,eAAegF,EAAQlD,EAAakS,IAC/D,CAqCO,SAASmC,GAAMpD,EAAoBjP,GACxC,MAAO,CAACkB,EAAQlD,IACPoU,GAAUlR,EAAQlD,EAAaiR,EAAYjP,EAEtD,CCpCO,SAASsS,GAAerD,EAAoBjP,GACjD,OAAO/D,OAAOkT,OAAO,CACnB,SAAItS,GACF,OAAO8N,IAAWxI,SAAS/F,IAAI6S,EAAYjP,EAC7C,EACA,SAAInD,CAAMA,GACR8N,IAAWxI,SAAS3C,IAAIyP,EAAYpS,EACtC,GAEJ,EdhCA,SAAYwS,GACV,kBACA,sBACA,sBACA,gBACA,2BACD,CAND,CAAYA,KAAAA,GAAsB,KeI3B,MAAMkD,GAAS5V,OAAO8I,IAAI,UCF1B,SAAS+M,GAAWC,EAAU,CAAC,EAAGC,EAAU,CAAC,GAClD,OAAOzW,OAAOiJ,QAAQwN,GAAI3U,QAAO,CAAC4U,GAAQ5W,EAAK6W,MACtC,IACFD,EACH,CAAC5W,IAAO4W,EAAM5W,IAAQ,IAAI2G,OAAOkQ,MAElCH,EACL,CAEO,SAASI,GAAiB9X,EAAmB6E,EAAqB,CAAC,GACxE,MAAMN,EAAQ,EAAAR,MAAMC,KAAKhE,GAAQqB,IAAI,kBAAoB,CAAC,EAE1D,MAAO,IACFkD,KACAM,EACH+S,MAAOH,GAAWlT,EAAMqT,MAAO/S,EAAc+S,OAEjD,C,ODZA3G,EAAWuG,IAAQ1X,SAAQ,IAAM8P,IAAW5E,S","sources":["webpack://@tsed/di/webpack/universalModuleDefinition","webpack://@tsed/di/external umd \"@tsed/core\"","webpack://@tsed/di/external umd \"@tsed/hooks\"","webpack://@tsed/di/external umd \"@tsed/schema\"","webpack://@tsed/di/webpack/bootstrap","webpack://@tsed/di/webpack/runtime/define property getters","webpack://@tsed/di/webpack/runtime/hasOwnProperty shorthand","webpack://@tsed/di/webpack/runtime/make namespace object","webpack://@tsed/di/./src/common/constants/constants.ts","webpack://@tsed/di/./src/common/domain/ProviderScope.ts","webpack://@tsed/di/./src/common/domain/ProviderType.ts","webpack://@tsed/di/./src/common/domain/LocalsContainer.ts","webpack://@tsed/di/./src/common/utils/discoverHooks.ts","webpack://@tsed/di/./src/common/domain/Provider.ts","webpack://@tsed/di/./src/common/registries/GlobalProviders.ts","webpack://@tsed/di/./src/common/domain/Container.ts","webpack://@tsed/di/./src/common/utils/colors.ts","webpack://@tsed/di/./src/common/errors/InjectionError.ts","webpack://@tsed/di/./src/common/utils/createContainer.ts","webpack://@tsed/di/./src/common/utils/getConstructorDependencies.ts","webpack://@tsed/di/./src/common/services/DIConfiguration.ts","webpack://@tsed/di/./src/common/services/InjectorService.ts","webpack://@tsed/di/./src/common/fn/injector.ts","webpack://@tsed/di/./src/common/decorators/autoInjectable.ts","webpack://@tsed/di/./src/common/fn/configuration.ts","webpack://@tsed/di/./src/common/domain/ControllerProvider.ts","webpack://@tsed/di/./src/common/registries/ProviderRegistry.ts","webpack://@tsed/di/./src/common/utils/providerBuilder.ts","webpack://@tsed/di/./src/common/fn/injectable.ts","webpack://@tsed/di/./src/common/errors/InvalidPropertyTokenError.ts","webpack://@tsed/di/./src/common/fn/localsContainer.ts","webpack://@tsed/di/./src/common/fn/inject.ts","webpack://@tsed/di/./src/common/fn/injectMany.ts","webpack://@tsed/di/./src/common/decorators/inject.ts","webpack://@tsed/di/./src/common/decorators/configuration.ts","webpack://@tsed/di/./src/common/fn/constant.ts","webpack://@tsed/di/./src/common/decorators/constant.ts","webpack://@tsed/di/./src/common/domain/InjectablePropertyType.ts","webpack://@tsed/di/./src/common/decorators/controller.ts","webpack://@tsed/di/./src/common/decorators/injectable.ts","webpack://@tsed/di/./src/common/decorators/intercept.ts","webpack://@tsed/di/./src/common/decorators/interceptor.ts","webpack://@tsed/di/./src/common/fn/lazyInject.ts","webpack://@tsed/di/./src/common/decorators/lazyInject.ts","webpack://@tsed/di/./src/common/decorators/module.ts","webpack://@tsed/di/./src/common/decorators/scope.ts","webpack://@tsed/di/./src/common/decorators/opts.ts","webpack://@tsed/di/./src/common/decorators/overrideProvider.ts","webpack://@tsed/di/./src/common/decorators/service.ts","webpack://@tsed/di/./src/common/decorators/useOpts.ts","webpack://@tsed/di/./src/common/decorators/value.ts","webpack://@tsed/di/./src/common/fn/refValue.ts","webpack://@tsed/di/./src/common/services/DILogger.ts","webpack://@tsed/di/./src/common/utils/getConfiguration.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"@tsed/core\"), require(\"@tsed/hooks\"), require(\"@tsed/schema\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"@tsed/core\", \"@tsed/hooks\", \"@tsed/schema\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"@tsed/di\"] = factory(require(\"@tsed/core\"), require(\"@tsed/hooks\"), require(\"@tsed/schema\"));\n\telse\n\t\troot[\"@tsed/di\"] = factory(root[\"@tsed/core\"], root[\"@tsed/hooks\"], root[\"@tsed/schema\"]);\n})(self, (__WEBPACK_EXTERNAL_MODULE__414__, __WEBPACK_EXTERNAL_MODULE__171__, __WEBPACK_EXTERNAL_MODULE__538__) => {\nreturn ","module.exports = __WEBPACK_EXTERNAL_MODULE__414__;","module.exports = __WEBPACK_EXTERNAL_MODULE__171__;","module.exports = __WEBPACK_EXTERNAL_MODULE__538__;","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export const DI_INVOKE_OPTIONS = Symbol(\"DI_INVOKE_OPTIONS\");\nexport const DI_INJECTABLE_PROPS = Symbol(\"DI_INJECTABLE_PROPS\");\nexport const DI_USE_OPTIONS = \"DI_USE_OPTIONS\";\nexport const DI_USE_PARAM_OPTIONS = \"DI_USE_PARAM_OPTIONS\";\nexport const DI_INTERCEPTOR_OPTIONS = \"DI_INTERCEPTOR_OPTIONS\";\n","export enum ProviderScope {\n SINGLETON = \"singleton\",\n REQUEST = \"request\",\n INSTANCE = \"instance\"\n}\n","export enum ProviderType {\n VALUE = \"value\",\n PROVIDER = \"provider\",\n MODULE = \"module\",\n CONTROLLER = \"controller\",\n INTERCEPTOR = \"interceptor\",\n MIDDLEWARE = \"middleware\"\n}\n","import {Hooks} from \"@tsed/hooks\";\n\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\n\nexport class LocalsContainer extends Map<TokenProvider, any> {\n readonly hooks = new Hooks();\n\n async destroy() {\n await this.hooks.asyncEmit(\"$onDestroy\");\n }\n}\n","import {type AbstractType, methodsOf, type Type} from \"@tsed/core\";\n\nexport function discoverHooks(token: Type | AbstractType<any>) {\n return methodsOf(token).reduce((hooks, {propertyKey}) => {\n if (String(propertyKey).startsWith(\"$\")) {\n const listener = (instance: any, ...args: any[]) => instance?.[propertyKey](...args);\n\n return {\n ...hooks,\n [propertyKey]: listener\n };\n }\n return hooks;\n }, {} as any);\n}\n","import {type AbstractType, classOf, getClassOrSymbol, isClass, nameOf, Store, Type} from \"@tsed/core\";\n\nimport {DI_USE_PARAM_OPTIONS} from \"../constants/constants.js\";\nimport type {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {discoverHooks} from \"../utils/discoverHooks.js\";\nimport {ProviderScope} from \"./ProviderScope.js\";\nimport {ProviderType} from \"./ProviderType.js\";\n\nexport type ProviderHookCallback<T = any> = (instance: T, ...args: unknown[]) => Promise<void> | void;\n\nexport class Provider<T = any> implements ProviderOpts<T> {\n /**\n * Token group provider to retrieve all provider from the same type\n */\n public type: ProviderType | TokenProvider = ProviderType.PROVIDER;\n public deps: TokenProvider[];\n public imports: (TokenProvider | [TokenProvider])[];\n public alias: string;\n public priority: number;\n public useFactory?: Function;\n public useAsyncFactory?: Function;\n public useValue?: unknown;\n public hooks: Record<string, ProviderHookCallback<T>> = {};\n #useClass: Type<T>;\n #token: TokenProvider;\n #store: Store;\n #tokenStore: Store;\n\n [key: string]: any;\n\n constructor(token: TokenProvider<T>, options: Partial<Provider> = {}) {\n this.token = token;\n this.useClass = token as Type<T>;\n\n Object.assign(this, options);\n\n if (options instanceof Provider) {\n this.#useClass = options.#useClass;\n this.#store = options.#store;\n this.#tokenStore = options.#tokenStore;\n }\n }\n\n get token() {\n return this.#token;\n }\n\n set token(value: TokenProvider) {\n if (value) {\n this.#token = getClassOrSymbol(value);\n this.#tokenStore = this.#store = Store.from(value);\n }\n }\n\n /**\n * @deprecated\n */\n get provide(): TokenProvider {\n return this.token;\n }\n\n /**\n * @deprecated\n * @param value\n */\n set provide(value: TokenProvider) {\n this.token = value;\n }\n\n get useClass(): Type<T> {\n return this.#useClass;\n }\n\n /**\n * Create a new store if the given value is a class. Otherwise, the value is ignored.\n * @param value\n */\n set useClass(value: Type<T> | AbstractType<T>) {\n if (isClass(value)) {\n this.#useClass = classOf(value);\n this.#store = Store.from(value);\n this.hooks = discoverHooks(this.#useClass);\n }\n }\n\n get className() {\n return this.name;\n }\n\n get name() {\n return nameOf(this.token);\n }\n\n get store(): Store {\n return this.#store;\n }\n\n get path() {\n return this.store.get(\"path\", \"/\");\n }\n\n set path(path: string) {\n this.store.set(\"path\", path);\n }\n\n /**\n * Get the scope of the provider.\n *\n * ::: tip Note\n * Async provider is always a SINGLETON\n * :::\n *\n * @returns {boolean}\n */\n get scope(): ProviderScope {\n if (this.isAsync()) {\n return ProviderScope.SINGLETON;\n }\n\n return this.get<ProviderScope>(\"scope\", ProviderScope.SINGLETON);\n }\n\n /**\n * Change the scope value of the provider.\n * @param scope\n */\n set scope(scope: ProviderScope) {\n this.store.set(\"scope\", scope);\n }\n\n get configuration(): Partial<TsED.Configuration> {\n return this.get(\"configuration\")!;\n }\n\n set configuration(configuration: Partial<TsED.Configuration>) {\n this.store.set(\"configuration\", configuration);\n }\n\n get children(): TokenProvider[] {\n return this.store.get(\"childrenControllers\", []);\n }\n\n set children(children: TokenProvider[]) {\n this.store.set(\"childrenControllers\", children);\n }\n\n getArgOpts(index: number) {\n return this.store.get(`${DI_USE_PARAM_OPTIONS}:${index}`);\n }\n\n /**\n * Retrieves a value from the provider's store.\n * @param key The key to look up\n * @returns The value if found, undefined otherwise\n */\n get<Type = unknown>(key: string): Type | undefined;\n /**\n * Retrieves a value from the provider's store with a default fallback.\n * @param key The key to look up\n * @param defaultValue The value to return if key is not found\n * @returns The found value or defaultValue\n */\n get<Type = unknown>(key: string, defaultValue: Type): Type;\n get<Type = unknown>(key: string, defaultValue?: Type): Type | undefined {\n return this.store.get(key) || this.#tokenStore.get(key) || defaultValue;\n }\n\n isAsync(): boolean {\n return !!this.useAsyncFactory;\n }\n\n clone(): Provider {\n return new (classOf(this))(this.token, this);\n }\n\n /**\n *\n * @returns {boolean}\n */\n public hasChildren(): boolean {\n return !!this.children.length;\n }\n\n /**\n *\n * @returns {boolean}\n */\n public hasParent(): boolean {\n return !!this.store.get(\"parentController\");\n }\n\n toString() {\n return [\n \"Token\",\n this.name,\n this.useClass && nameOf(this.useClass),\n this.useFactory && \"Factory\",\n this.useValue && \"Value\",\n this.useAsyncFactory && \"AsyncFactory\"\n ]\n .filter(Boolean)\n .join(\":\");\n }\n\n reset() {\n this.useValue = undefined;\n this.useFactory = undefined;\n this.useAsyncFactory = undefined;\n\n return this;\n }\n}\n","import {getClassOrSymbol, Type} from \"@tsed/core\";\n\nimport {Provider} from \"../domain/Provider.js\";\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\nimport {RegistrySettings} from \"../interfaces/RegistrySettings.js\";\nimport {TokenProvider} from \"../interfaces/TokenProvider.js\";\n\nexport class GlobalProviderRegistry extends Map<TokenProvider, Provider> {\n #settings: Map<TokenProvider, RegistrySettings> = new Map();\n\n /**\n * The get() method returns a specified element from a Map object.\n * @param key Required. The key of the element to return from the Map object.\n * @returns {T} Returns the element associated with the specified key or undefined if the key can't be found in the Map object.\n */\n get(key: TokenProvider): Provider | undefined {\n return super.get(getClassOrSymbol(key));\n }\n\n /**\n * The has() method returns a boolean indicating whether an element with the specified key exists or not.\n * @param key\n * @returns {boolean}\n */\n has(key: TokenProvider): boolean {\n return super.has(getClassOrSymbol(key));\n }\n\n /**\n * The set() method adds or updates an element with a specified key and value to a Map object.\n * @param key Required. The key of the element to add to the Map object.\n * @param metadata Required. The value of the element to add to the Map object.\n */\n set(key: TokenProvider, metadata: Provider): this {\n super.set(getClassOrSymbol(key), metadata);\n\n return this;\n }\n\n /**\n *\n * @param target\n * @param options\n */\n merge(target: TokenProvider, options: Partial<ProviderOpts>) {\n if (options.global === false) {\n return GlobalProviders.createProvider(target, options);\n }\n\n const meta = this.createIfNotExists(target, options);\n\n Object.keys(options).forEach((key) => {\n meta[key] = (options as never)[key];\n });\n\n this.set(target, meta);\n\n return meta;\n }\n\n /**\n * The delete() method removes the specified element from a Map object.\n * @param key Required. The key of the element to remove from the Map object.\n * @returns {boolean} Returns true if an element in the Map object existed and has been removed, or false if the element does not exist.\n */\n delete(key: TokenProvider): boolean {\n return super.delete(getClassOrSymbol(key));\n }\n\n createRegistry(type: string | symbol, model: Type<Provider>, options: Partial<RegistrySettings> = {}) {\n const defaultOptions = this.getRegistrySettings(type);\n\n options = Object.assign(defaultOptions, {\n ...options,\n model\n });\n\n this.#settings.set(type, options);\n\n return this;\n }\n\n getRegistrySettings(target: TokenProvider): RegistrySettings {\n let type: TokenProvider | ProviderType = ProviderType.PROVIDER;\n\n if (typeof target === \"string\") {\n type = target;\n } else {\n const provider = this.get(target);\n if (provider) {\n type = provider.type;\n }\n }\n\n return (\n this.#settings.get(type) || {\n model: Provider\n }\n );\n }\n\n protected createProvider(key: TokenProvider, options: Partial<ProviderOpts<any>>) {\n const type = options.type || ProviderType.PROVIDER;\n const {model = Provider} = this.#settings.get(type) || {};\n\n return new model(key, options);\n }\n\n /**\n *\n * @param key\n * @param options\n */\n protected createIfNotExists(key: TokenProvider, options: Partial<ProviderOpts>): Provider {\n if (!this.has(key)) {\n const item = this.createProvider(key, options);\n\n this.set(key, item);\n }\n\n return this.get(key)!;\n }\n}\n\n/**\n *\n * @type {GlobalProviders}\n */\n// tslint:disable-next-line: variable-name\nexport const GlobalProviders = new GlobalProviderRegistry();\n","import type {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {GlobalProviders} from \"../registries/GlobalProviders.js\";\nimport {Provider} from \"./Provider.js\";\nimport type {ProviderType} from \"./ProviderType.js\";\n\nexport class Container extends Map<TokenProvider, Provider> {\n /**\n *\n * @param token\n * @param settings\n */\n public add(token: TokenProvider, settings: Partial<ProviderOpts> = {}): this {\n const provider = GlobalProviders.get(token)?.clone() || new Provider(token);\n\n Object.assign(provider, settings);\n\n return super.set(token, provider);\n }\n\n /**\n * Add a provider to the\n * @param token\n * @param settings\n */\n public addProvider(token: TokenProvider, settings: Partial<ProviderOpts> = {}): this {\n return this.add(token, settings);\n }\n\n /**\n *\n * @param token\n */\n public hasProvider(token: TokenProvider) {\n return super.has(token);\n }\n\n /**\n * Add a provider to the\n * @param token\n * @param provider\n */\n public setProvider(token: TokenProvider, provider: Provider) {\n return super.set(token, provider);\n }\n\n /**\n * The getProvider() method returns a specified element from a Map object.\n * @returns {T} Returns the element associated with the specified key or undefined if the key can't be found in the Map object.\n * @param token\n */\n public getProvider<T extends Provider = Provider>(token: TokenProvider | undefined): T | undefined {\n return super.get(token!) as T;\n }\n\n /**\n * Get all providers registered in the injector container.\n *\n * @param type Filter the list by the given ProviderType.\n * @returns {[TokenProvider , Provider<any>][]}\n */\n public getProviders(type?: TokenProvider | ProviderType | string | string[]): Provider[] {\n const types = ([] as (string | ProviderType)[]).concat(type as never).map(String);\n\n return [...this].reduce((providers, [_, provider]) => {\n if (types.includes(String(provider.type)) || !type) {\n return [...providers, provider];\n }\n return providers;\n }, []);\n }\n\n public addProviders(container: Map<TokenProvider, Provider>) {\n container.forEach((provider) => {\n if (!this.hasProvider(provider.token)) {\n this.setProvider(provider.token, provider.clone());\n }\n });\n }\n}\n","type ColorTextFn = (text: string) => string;\n\n// istanbul ignore next\nconst colorIfAllowed = (colorFn: ColorTextFn) => (text: string) =>\n !process.env.NO_COLOR && process.env.NODE_ENV !== \"production\" ? colorFn(text) : text;\n\nconst red = colorIfAllowed((text: string) => `\\x1B[31m${text}\\x1B[39m`);\nconst yellow = colorIfAllowed((text: string) => `\\x1B[33m${text}\\x1B[39m`);\nconst green = colorIfAllowed((text: string) => `\\x1B[32m${text}\\x1B[39m`);\n\nexport const colors = {red, yellow, green};\n","import {getConstructorArgNames, isClass, isString, nameOf} from \"@tsed/core\";\n\nimport {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {colors} from \"../utils/colors.js\";\n\nexport class InjectionError extends Error {\n name = \"INJECTION_ERROR\";\n\n public tokens: TokenProvider[] = [];\n public origin: any;\n\n constructor(token: TokenProvider, origin?: any) {\n super(isString(origin) ? origin : \"\");\n\n this.tokens = [token];\n\n if (origin) {\n if (isString(origin)) {\n this.origin = {\n message: origin,\n stack: this.stack\n };\n } else {\n if (origin.tokens) {\n this.tokens = this.tokens.concat(origin.tokens);\n this.origin = origin.origin;\n } else {\n this.origin = origin;\n this.stack = origin.stack;\n }\n }\n }\n\n const originMessage = this.origin ? \"\\nOrigin: \" + this.origin.message : \"\";\n const tokensMessage = this.tokens.map((token) => nameOf(token)).join(\" > \");\n\n this.message = `Injection failed on ${tokensMessage}${originMessage}`;\n }\n\n static throwInjectorError(token: any, currentDependency: any, error: any) {\n if (currentDependency && isClass(token)) {\n error.message = printDependencyInjectionError(token, {...currentDependency, message: error.message});\n }\n\n throw new InjectionError(token, error);\n }\n}\n\nfunction printDependencyInjectionError(token: any, options: {token: any; index: number; deps: any[]; message: string}) {\n let erroredArg = \"\";\n\n const args = getConstructorArgNames(token)\n .map((arg, index) => {\n if (options.index === index) {\n erroredArg = arg;\n arg = colors.red(arg);\n }\n\n return `${arg}: ${nameOf(options.deps[index])}`;\n })\n .join(\", \");\n\n const signature = nameOf(token) + \"->constructor(\" + args + \")\";\n const indexOf = signature.indexOf(erroredArg) - 5;\n const drawline = (indexOf: number) => \" \".repeat(indexOf) + colors.red(\"^\" + \"‾\".repeat(erroredArg.length - 1));\n\n return \"Unable to inject dependency. \" + options.message + \"\\n\\n\" + signature + \"\\n\" + (indexOf > -1 ? drawline(indexOf) : \"\");\n}\n","import {Type} from \"@tsed/core\";\n\nimport {Container} from \"../domain/Container.js\";\nimport {GlobalProviders} from \"../registries/GlobalProviders.js\";\n\nexport function createContainer(rootModule?: Type<any>) {\n const container = new Container(GlobalProviders.entries());\n\n if (rootModule) {\n container.delete(rootModule);\n }\n\n return container;\n}\n","import {Metadata} from \"@tsed/core\";\n\nexport function getConstructorDependencies(target: any, propertyKey?: string | symbol | undefined) {\n return Metadata.getOwn(\"override:ctor:design:paramtypes\", target, propertyKey) || [...Metadata.getParamTypes(target, propertyKey)] || [];\n}\n\nexport function setConstructorDependencies(target: any, deps: any[]) {\n Metadata.set(\"override:ctor:design:paramtypes\", deps, target);\n}\n","import {Env, getValue, setValue} from \"@tsed/core\";\n\nimport type {DILoggerOptions} from \"../interfaces/DILoggerOptions.js\";\nimport type {ImportTokenProviderOpts} from \"../interfaces/ImportTokenProviderOpts.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport type {TokenRoute} from \"../interfaces/TokenRoute.js\";\n\nexport const CONFIGURATION = Symbol.for(\"CONFIGURATION\");\n\nexport class DIConfiguration {\n readonly default: Map<string, any> = new Map();\n protected map: Map<string, any> = new Map();\n\n constructor(initialProps = {}) {\n Object.entries({\n imports: [],\n routes: [],\n logger: {},\n ...initialProps\n }).forEach(([key, value]) => {\n this.default.set(key, value);\n });\n }\n\n get version() {\n return this.get(\"version\")!;\n }\n\n set version(v: string) {\n this.map.set(\"version\", v);\n }\n\n get rootDir() {\n return this.get(\"rootDir\")!;\n }\n\n set rootDir(value: string) {\n this.map.set(\"rootDir\", value);\n }\n\n get env(): Env {\n return this.map.get(\"env\");\n }\n\n set env(value: Env) {\n this.map.set(\"env\", value);\n }\n\n get imports(): (TokenProvider | ImportTokenProviderOpts)[] {\n return this.get(\"imports\")!;\n }\n\n set imports(imports: (TokenProvider | ImportTokenProviderOpts)[]) {\n this.map.set(\"imports\", imports);\n }\n\n get routes(): TokenRoute[] {\n return this.get(\"routes\")!;\n }\n\n set routes(routes: TokenRoute[]) {\n this.map.set(\"routes\", routes);\n }\n\n get logger(): Partial<DILoggerOptions> {\n return this.get(\"logger\")!;\n }\n\n set logger(value: Partial<DILoggerOptions>) {\n const logger = {...this.logger, ...value};\n this.map.set(\"logger\", logger);\n }\n\n get debug(): boolean {\n return this.logger.level === \"debug\";\n }\n\n set debug(debug: boolean) {\n this.logger = {...this.logger, level: debug ? \"debug\" : \"info\"};\n }\n\n /**\n *\n * @param callbackfn\n * @param thisArg\n */\n forEach(callbackfn: (value: any, index: string, map: Map<string, any>) => void, thisArg?: any) {\n return new Set([...Array.from(this.default.keys()), ...Array.from(this.map.keys())]).forEach((key) => {\n callbackfn(this.getRaw(key), key, this.map);\n }, thisArg);\n }\n\n /**\n *\n * @param propertyKey\n * @param value\n */\n set(propertyKey: string | Partial<TsED.Configuration>, value?: any): this {\n if (typeof propertyKey === \"string\") {\n if (Reflect.has(this, propertyKey)) {\n // @ts-ignore\n this[propertyKey] = value;\n } else {\n this.setRaw(propertyKey, value);\n }\n } else {\n Object.entries(propertyKey).forEach(([key, value]) => {\n this.set(key, value);\n });\n }\n\n return this;\n }\n\n setRaw(propertyKey: string, value: any) {\n setValue(this.map, propertyKey, value);\n\n return this;\n }\n\n /**\n *\n * @param propertyKey\n * @param defaultValue\n * @returns {undefined|any}\n */\n get<T = any>(propertyKey: string, defaultValue?: T): T {\n return this.getRaw(propertyKey, defaultValue);\n }\n\n protected getRaw(propertyKey: string, defaultValue?: any): any {\n const value = getValue(this.map, propertyKey);\n\n if (value !== undefined) {\n return value;\n }\n\n return getValue(this.default, propertyKey, defaultValue);\n }\n}\n","import {classOf, deepClone, deepMerge, isArray, isClass, isFunction, isInheritedFrom, isObject, isPromise, nameOf} from \"@tsed/core\";\nimport {$alter, $asyncAlter, $asyncEmit, $emit, $off, $on} from \"@tsed/hooks\";\n\nimport {DI_INVOKE_OPTIONS, DI_USE_PARAM_OPTIONS} from \"../constants/constants.js\";\nimport {Container} from \"../domain/Container.js\";\nimport {LocalsContainer} from \"../domain/LocalsContainer.js\";\nimport {Provider} from \"../domain/Provider.js\";\nimport {ProviderScope} from \"../domain/ProviderScope.js\";\nimport {InjectionError} from \"../errors/InjectionError.js\";\nimport type {DILogger} from \"../interfaces/DILogger.js\";\nimport type {ImportTokenProviderOpts} from \"../interfaces/ImportTokenProviderOpts.js\";\nimport type {InvokeOptions} from \"../interfaces/InvokeOptions.js\";\nimport type {ResolvedInvokeOptions} from \"../interfaces/ResolvedInvokeOptions.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {GlobalProviders} from \"../registries/GlobalProviders.js\";\nimport {createContainer} from \"../utils/createContainer.js\";\nimport {getConstructorDependencies} from \"../utils/getConstructorDependencies.js\";\nimport {DIConfiguration} from \"./DIConfiguration.js\";\n\nconst EXCLUDED_CONFIGURATION_KEYS = [\"mount\", \"imports\"];\n\n/**\n * This service contain all services collected by `@Service` or services declared manually with `InjectorService.factory()` or `InjectorService.service()`.\n *\n * ### Example:\n *\n * ```typescript\n * import {InjectorService} from \"@tsed/di\";\n *\n * // Import the services (all services are decorated with @Service()\";\n * import MyService1 from \"./services/service1.js\";\n * import MyService2 from \"./services/service2.js\";\n * import MyService3 from \"./services/service3.js\";\n *\n * // When all services are imported, you can load InjectorService.\n *\n * await injector().load();\n *\n * const myService1 = injector.get<MyService1>(MyService1);\n * ```\n */\nexport class InjectorService extends Container {\n public logger: DILogger = console;\n private resolvedConfiguration: boolean = false;\n #cache = new LocalsContainer();\n #loaded: boolean = false;\n\n constructor() {\n super();\n this.#cache.set(InjectorService, this);\n this.#cache.set(DIConfiguration, new DIConfiguration());\n }\n\n get settings(): DIConfiguration {\n return this.#cache.get(DIConfiguration);\n }\n\n set settings(settings: DIConfiguration) {\n this.#cache.set(DIConfiguration, settings);\n }\n\n isLoaded() {\n return this.#loaded;\n }\n\n /**\n * Return a list of instance build by the injector.\n */\n public toArray(): any[] {\n return [...this.#cache.values()];\n }\n\n /**\n * Get a service or factory already constructed from his symbol or class.\n *\n * #### Example\n *\n * ```typescript\n * import {InjectorService} from \"@tsed/di\";\n * import MyService from \"./services.js\";\n *\n * class OtherService {\n * constructor(injectorService: InjectorService) {\n * const myService = injectorService.get<MyService>(MyService);\n * }\n * }\n * ```\n *\n * @param token The class or symbol registered in InjectorService.\n * @param options\n */\n get<T = any>(token: TokenProvider<T>, options?: Partial<InvokeOptions>): T {\n if (!this.has(token)) {\n return this.resolve(token, options);\n }\n\n return this.#cache.get(token);\n }\n\n /**\n * Return all instance of the same provider type\n */\n getMany<Type = any>(type: any, options?: Partial<InvokeOptions>): Type[] {\n return this.getProviders(type).map((provider) => {\n return this.resolve<Type>(provider.token, options);\n });\n }\n\n /**\n * The has() method returns a boolean indicating whether an element with the specified key exists or not.\n */\n has(token: TokenProvider): boolean {\n return this.#cache.get(token) !== undefined;\n }\n\n /**\n * Declare an alias for a given token.\n */\n alias(token: TokenProvider, alias: TokenProvider) {\n this.#cache.set(alias, this.#cache.get(token));\n\n return this;\n }\n\n /**\n * Resolve the token depending on his provider configuration.\n *\n * If the token isn't cached, the injector will invoke the provider and cache the result.\n *\n * #### Example\n *\n * ```typescript\n * import {InjectorService} from \"@tsed/di\";\n * import MyService from \"./services.js\";\n *\n * class OtherService {\n * constructor(injectorService: InjectorService) {\n * const myService = injectorService.invoke<MyService>(MyService);\n * }\n * }\n * ```\n *\n * @param token The injectable class to invoke. Class parameters are injected according constructor signature.\n * @param options {InvokeOptions} Optional options to invoke the class.\n * @returns {Type} The class constructed.\n */\n public resolve<Type = any>(token: TokenProvider<Type>, options: Partial<InvokeOptions> = {}): Type {\n let instance: any = options.locals ? options.locals.get(token) : undefined;\n\n if (instance !== undefined) {\n return instance;\n }\n\n if (token === DI_USE_PARAM_OPTIONS) {\n return options.useOpts as Type;\n }\n\n instance = !options.rebuild ? this.#cache.get(token) : undefined;\n\n if (instance != undefined) {\n return instance;\n }\n\n const provider = this.ensureProvider(token);\n\n // maybe not necessary\n if (!provider || options.rebuild) {\n instance = this.invokeToken(token, options);\n\n if (provider) {\n return this.setToCache(provider!, instance);\n }\n\n return instance;\n }\n\n instance = this.invokeToken(token, options);\n\n switch (provider.scope) {\n case ProviderScope.SINGLETON:\n if (!options.rebuild) {\n this.registerHooks(provider, options);\n }\n\n return this.setToCache(provider, instance);\n case ProviderScope.REQUEST:\n if (options.locals) {\n options.locals.set(provider.token, instance);\n\n this.registerHooks(provider, options);\n }\n\n return instance;\n }\n\n return instance;\n }\n\n /**\n * Resolve the token depending on his provider configuration.\n *\n * If the token isn't cached, the injector will invoke the provider and cache the result.\n *\n * #### Example\n *\n * ```typescript\n * import {InjectorService} from \"@tsed/di\";\n * import MyService from \"./services.js\";\n *\n * class OtherService {\n * constructor(injectorService: InjectorService) {\n * const myService = injectorService.invoke<MyService>(MyService);\n * }\n * }\n * ```\n *\n * @param token The injectable class to invoke. Class parameters are injected according constructor signature.\n * @param options {InvokeOptions} Optional options to invoke the class.\n * @returns {Type} The class constructed.\n * @alias InjectorService.resolve\n */\n public invoke<Type = any>(token: TokenProvider<Type>, options: Partial<InvokeOptions> = {}): Type {\n return this.resolve(token, options);\n }\n\n /**\n * Build only providers which are asynchronous.\n */\n async loadAsync() {\n for (const [, provider] of this) {\n if (!this.has(provider.token) && provider.isAsync()) {\n await this.resolve(provider.token);\n }\n }\n }\n\n /**\n * Build only providers which are synchronous.\n */\n loadSync() {\n for (const [, provider] of this) {\n // TODO try to lazy provider instead initiate all providers (&& provider.hasRegisteredHooks())\n if (!this.has(provider.token) && provider.scope === ProviderScope.SINGLETON) {\n this.resolve(provider.token);\n }\n }\n }\n\n /**\n * Build all providers from given container (or GlobalProviders) and emit `$onInit` event.\n *\n * @param container\n */\n async load(container: Container = createContainer()) {\n // avoid provider registration in the GlobalContainer during the loading phase\n // using injectable() or providerBuilder()\n this.#loaded = true;\n\n await $asyncEmit(\"$beforeInit\");\n\n this.bootstrap(container);\n\n // build async and sync provider\n await this.loadAsync();\n\n // load sync provider\n this.loadSync();\n\n await $asyncEmit(\"$onInit\");\n }\n\n /**\n * Load all configurations registered on providers via @Configuration decorator.\n * It inspects for each provider some fields like imports, mount, etc. to resolve the configuration.\n */\n resolveConfiguration() {\n if (this.resolvedConfiguration) {\n return;\n }\n const mergedConfiguration = new Map();\n\n super.forEach((provider) => {\n if (provider.configuration && provider.type !== \"server:module\") {\n Object.entries(provider.configuration).forEach(([key, value]) => {\n if (!EXCLUDED_CONFIGURATION_KEYS.includes(key)) {\n value = mergedConfiguration.has(key) ? deepMerge(mergedConfiguration.get(key), value) : deepClone(value);\n mergedConfiguration.set(key, value);\n }\n });\n }\n });\n\n mergedConfiguration.forEach((value, key) => {\n this.settings.set(key, deepMerge(value, this.settings.get(key)));\n });\n\n this.resolvedConfiguration = true;\n }\n\n /**\n * Emit an event to all service. See service [lifecycle hooks](/docs/hooks.md#lifecycle-hooks).\n * @param eventName The event name to emit at all services.\n * @param args List of the parameters to give to each service.\n * @returns A list of promises.\n * @deprecated use $asyncEmit instead\n */\n public emit(eventName: string, ...args: unknown[]) {\n return $asyncEmit(eventName, args);\n }\n\n /**\n * Alter value attached to an event.\n * @param eventName\n * @param value\n * @param args\n * @deprecated use $alter instead\n */\n public alter<T = any>(eventName: string, value: any, ...args: any[]): T {\n return $alter(eventName, value, args);\n }\n\n /**\n * Alter value attached to an event asynchronously.\n * @param eventName\n * @param value\n * @param args\n * @deprecated use $asyncAlter instead\n */\n public alterAsync<T = any>(eventName: string, value: any, ...args: any[]): Promise<T> {\n return $asyncAlter(eventName, value, args);\n }\n\n /**\n * Destroy the injector and all services.\n */\n async destroy() {\n await $asyncEmit(\"$onDestroy\");\n this.#cache.forEach((_, token) => {\n $off(token);\n });\n }\n\n /**\n * Bootstrap injector from container, resolve configuration and providers.\n *\n * @param container\n */\n protected bootstrap(container: Container = createContainer()) {\n // Clone all providers in the container\n this.addProviders(container);\n\n // Resolve all configuration\n this.resolveConfiguration();\n\n // allow mocking or changing provider instance before loading injector\n this.resolveImportsProviders();\n\n return this;\n }\n\n /**\n * Ensure that a provider is added to the container.\n * @protected\n */\n protected ensureProvider(token: TokenProvider, force: true): Provider;\n protected ensureProvider(token: TokenProvider, force: false): Provider | undefined;\n protected ensureProvider(token: TokenProvider): Provider | undefined;\n protected ensureProvider(token: TokenProvider, force = false): Provider | undefined {\n if (!this.hasProvider(token) && (GlobalProviders.has(token) || force)) {\n this.addProvider(token);\n }\n\n return this.getProvider(token)!;\n }\n\n /**\n * Invoke a class method and inject service.\n *\n * #### IInjectableMethod options\n *\n * * **target**: Optional. The class instance.\n * * **methodName**: `string` Optional. The method name.\n * * **designParamTypes**: `any[]` Optional. List of injectable types.\n * * **locals**: `Map<Function, any>` Optional. If preset then any argument Class are read from this object first, before the `InjectorService` is consulted.\n *\n * #### Example\n *\n * @param target\n * @param options\n * @private\n */\n protected invokeToken<T>(target: TokenProvider, options: Partial<InvokeOptions> = {}): T | Promise<T> {\n const resolvedOpts = this.mapInvokeOptions(target, options);\n\n if (!resolvedOpts) {\n return undefined as T;\n }\n\n const {token, deps, construct, imports, provider} = resolvedOpts;\n\n $emit(\"$beforeInvoke\", token, [resolvedOpts]);\n $emit(`$beforeInvoke:${String(provider.type)}`, [resolvedOpts]);\n\n let instance: any;\n let currentDependency: any = false;\n\n try {\n const invokeDependency =\n (parent?: any) =>\n (token: TokenProvider | [TokenProvider], index: number): any => {\n currentDependency = {token, index, deps};\n\n if (isArray(token)) {\n return this.getMany(token[0], options);\n }\n\n return isInheritedFrom(token, Provider, 1)\n ? provider\n : this.resolve(token, {\n parent,\n locals: options.locals,\n useOpts: provider?.getArgOpts(index) || options.useOpts\n });\n };\n\n // Invoke manually imported providers\n imports.forEach(invokeDependency());\n\n // Inject dependencies\n const services = deps.map(invokeDependency(token));\n\n currentDependency = false;\n\n instance = construct(services);\n } catch (error) {\n InjectionError.throwInjectorError(token, currentDependency, error);\n }\n\n if (instance === undefined) {\n throw new InjectionError(\n token,\n `Unable to create new instance from undefined value. Check your provider declaration for ${nameOf(token)}`\n );\n }\n\n if (instance && isClass(classOf(instance))) {\n Reflect.defineProperty(instance, DI_INVOKE_OPTIONS, {\n get: () => ({rebuild: options.rebuild, locals: options.locals})\n });\n }\n\n $emit(\"$afterInvoke\", token, [instance, resolvedOpts]);\n\n return instance;\n }\n\n private resolveImportsProviders() {\n this.settings.imports = this.settings.imports\n ?.filter((meta) => isObject(meta) && \"token\" in meta && meta.token !== InjectorService)\n .map((meta) => {\n if (isObject(meta) && \"token\" in meta) {\n const {token, ...props} = meta;\n\n const provider = this.ensureProvider(token, true);\n\n if (provider) {\n provider.useValue = undefined;\n provider.useAsyncFactory = undefined;\n provider.useFactory = undefined;\n\n if (\"useClass\" in props) {\n provider.useClass = props.useClass as TokenProvider;\n return;\n }\n\n if (\"useFactory\" in props) {\n provider.useFactory = props.useFactory as never;\n return;\n }\n\n if (\"useAsyncFactory\" in props) {\n provider.useAsyncFactory = props.useAsyncFactory as never;\n return;\n }\n\n if (\"use\" in props) {\n provider.useValue = props.use as unknown;\n return;\n }\n }\n }\n\n return meta;\n })\n .filter(Boolean) as unknown as (TokenProvider | ImportTokenProviderOpts)[];\n }\n\n /**\n * Create options to invoke a provider or class.\n * @param token\n * @param options\n */\n private mapInvokeOptions(token: TokenProvider, options: Partial<InvokeOptions>): ResolvedInvokeOptions | false {\n const locals = options.locals || new LocalsContainer();\n\n options.locals = locals;\n\n let imports: (TokenProvider | [TokenProvider])[] | undefined = options.imports;\n let deps: TokenProvider[] | undefined = options.deps;\n let construct;\n\n if (!token || token === Object) {\n throw new Error(\"Given token is undefined. Could mean a circular dependency problem. Try to use @Inject(() => Token) to solve it.\");\n }\n\n let provider: Provider;\n\n if (!this.hasProvider(token)) {\n provider = new Provider(token);\n } else {\n provider = this.getProvider(token)!;\n }\n\n deps = deps || provider.deps;\n imports = imports || provider.imports;\n\n if (provider.useValue !== undefined) {\n construct = () => (isFunction(provider.useValue) ? provider.useValue() : provider.useValue);\n } else if (provider.useFactory) {\n construct = (deps: any[]) => provider.useFactory!(...deps);\n } else if (provider.useAsyncFactory) {\n construct = async (deps: any[]) => {\n deps = await Promise.all(deps);\n return provider.useAsyncFactory!(...deps);\n };\n } else if (provider.useClass) {\n // useClass\n deps = deps || getConstructorDependencies(provider.useClass);\n construct = (deps: TokenProvider[]) => new provider.useClass(...deps);\n } else {\n return false;\n }\n\n return {\n token,\n deps: deps! || [],\n imports: imports || [],\n construct,\n provider,\n locals\n };\n }\n\n private registerHooks(provider: Provider, options: Partial<InvokeOptions>) {\n if (provider.hooks) {\n if (provider.scope === ProviderScope.REQUEST) {\n if (options.locals && provider.hooks?.$onDestroy) {\n const {locals} = options;\n\n options.locals.hooks.on(\"$onDestroy\", (...args: unknown[]) => {\n return provider.hooks?.$onDestroy?.(locals.get(provider.token), ...args);\n });\n }\n\n return;\n }\n\n Object.entries(provider.hooks).forEach(([event, cb]) => {\n const callback = (...args: any[]) => {\n return cb(this.#cache.get(provider.token), ...args);\n };\n\n $on(event, provider.token, callback);\n });\n }\n }\n\n private setToCache(provider: Provider, instance: any) {\n const set = (instance: any) => {\n this.#cache.set(provider.token, instance);\n provider?.alias && this.alias(provider.token, provider.alias);\n };\n\n if (\"isAsync\" in provider && !provider.isAsync() && !isPromise(instance)) {\n set(instance);\n\n return instance;\n }\n\n // store promise to lock token in cache\n set(instance);\n\n instance = instance.then((instance: any) => {\n set(instance);\n\n return instance;\n });\n\n return instance;\n }\n}\n","import {InjectorService} from \"../services/InjectorService.js\";\n\nlet globalInjector: InjectorService = new InjectorService();\n\n/**\n * Return the existing injector service.\n *\n * Example:\n *\n * ```typescript\n * import {injector, Injectable} from \"@tsed/di\";\n *\n * @Injectable()\n * class MyService {\n * injector = injector();\n * }\n * ```\n */\nexport function injector(): InjectorService {\n return globalInjector;\n}\n\nexport async function destroyInjector() {\n await globalInjector.destroy();\n globalInjector = new InjectorService();\n}\n","import {isArray, type Type} from \"@tsed/core\";\n\nimport {LocalsContainer} from \"../domain/LocalsContainer.js\";\nimport {injector} from \"../fn/injector.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {getConstructorDependencies} from \"../utils/getConstructorDependencies.js\";\n\nfunction resolveAutoInjectableArgs(token: Type, args: unknown[]) {\n const inj = injector();\n const locals = new LocalsContainer();\n const deps: TokenProvider[] = getConstructorDependencies(token);\n const list: any[] = [];\n const length = Math.max(deps.length, args.length);\n\n for (let i = 0; i < length; i++) {\n if (args[i] !== undefined) {\n list.push(args[i]);\n } else {\n const value = deps[i];\n const instance = isArray(value) ? inj.getMany(value[0], {locals, parent: token}) : inj.invoke(value, {locals, parent: token});\n\n list.push(instance);\n }\n }\n\n return list;\n}\n\n/**\n * AutoInjectable decorator is used to automatically inject dependencies in the constructor.\n *\n * @example\n * ```typescript\n * @AutoInjectable()\n * class UserService {\n * constructor(\n * private database: Database, // automatically injected\n * customConfig?: Config // can be passed manually\n * ) {}\n * }\n * ```\n *\n * @description\n * When applied to a class, this decorator:\n * - Automatically resolves and injects dependencies based on constructor parameter types\n * - Preserves the ability to manually pass arguments which override automatic injection\n *\n * @decorator\n * @returns {ClassDecorator} A class decorator that enables automatic dependency injection\n */\nexport function AutoInjectable() {\n return <T extends {new (...args: any[]): NonNullable<unknown>}>(constr: T): T => {\n return class AutoInjectable extends constr {\n constructor(...args: any[]) {\n super(...resolveAutoInjectableArgs(constr, args));\n }\n } as unknown as T;\n };\n}\n","import {Store} from \"@tsed/core\";\n\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {DIConfiguration} from \"../services/DIConfiguration.js\";\nimport {injector} from \"./injector.js\";\n\nexport function configuration(): TsED.DIConfiguration & DIConfiguration;\nexport function configuration(token: TokenProvider): Partial<TsED.Configuration>;\nexport function configuration(token: TokenProvider, configuration: Partial<TsED.Configuration>): Partial<TsED.Configuration>;\nexport function configuration(token?: TokenProvider, configuration?: Partial<TsED.Configuration>) {\n if (token) {\n const store = Store.from(token);\n\n if (configuration) {\n store.set(\"configuration\", configuration);\n }\n\n return store.get(\"configuration\", configuration);\n }\n\n return injector().settings as TsED.DIConfiguration & DIConfiguration;\n}\n","import {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {Provider} from \"./Provider.js\";\nimport {ProviderType} from \"./ProviderType.js\";\n\nexport interface ControllerMiddlewares {\n useBefore: TokenProvider[];\n use: TokenProvider[];\n useAfter: TokenProvider[];\n}\n\nexport class ControllerProvider<T = any> extends Provider<T> {\n public tokenRouter: string;\n\n constructor(token: TokenProvider, options: Partial<Provider> = {}) {\n super(token, options);\n this.type = ProviderType.CONTROLLER;\n }\n\n /**\n *\n * @returns {any[]}\n */\n get middlewares(): Partial<ControllerMiddlewares> {\n return Object.assign(\n {\n use: [],\n useAfter: [],\n useBefore: []\n },\n this.store.get(\"middlewares\", {})\n );\n }\n\n /**\n *\n * @param middlewares\n */\n set middlewares(middlewares: Partial<ControllerMiddlewares>) {\n const mdlwrs = this.middlewares;\n const concat = (key: string, a: any, b: any) => (a[key] = a[key].concat(b[key]));\n\n Object.keys(middlewares).forEach((key: string) => {\n concat(key, mdlwrs, middlewares);\n });\n\n this.store.set(\"middlewares\", mdlwrs);\n }\n}\n","import {ControllerProvider} from \"../domain/ControllerProvider.js\";\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {injectable} from \"../fn/injectable.js\";\nimport type {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {GlobalProviders} from \"./GlobalProviders.js\";\n\nGlobalProviders.createRegistry(ProviderType.CONTROLLER, ControllerProvider);\n\ntype Opts<Type = any> = Partial<ProviderOpts<Type>> &\n (\n | {\n token: TokenProvider<Type>;\n }\n | {\n /**\n * @deprecated use token prop instead\n */\n provide: TokenProvider<Type>;\n }\n );\n\n/**\n * Register a provider configuration.\n * @deprecated Since v8. Use injectable() function instead.\n */\nexport function registerProvider<Type = any>({token, provide, ...opts}: Opts<Type>) {\n return injectable(token || provide, {\n ...opts,\n token: token || provide\n } as unknown as Partial<ProviderOpts>).inspect();\n}\n","import \"../registries/ProviderRegistry.js\";\n\nimport {Store, type Type} from \"@tsed/core\";\n\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {injector} from \"../fn/injector.js\";\nimport type {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\nimport type {FactoryTokenProvider, TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {GlobalProviders} from \"../registries/GlobalProviders.js\";\n\ntype BaseMethodsProvider<TypeOf, BaseProvider, T extends object> = {\n [K in keyof T as T[K] extends (...args: any[]) => any ? never : K]: (value: T[K]) => ProviderBuilder<TypeOf, BaseProvider, T>;\n};\n\ntype ProviderBuilder<TypeOf, BaseProvider, T extends object> = BaseMethodsProvider<TypeOf, BaseProvider, T> & {\n inspect(): BaseProvider;\n store(): Store;\n token(): TypeOf;\n factory<FactoryReturn>(f: (...args: unknown[]) => FactoryReturn): ProviderBuilder<FactoryTokenProvider<FactoryReturn>, BaseProvider, T>;\n asyncFactory<FactoryReturn>(\n f: (...args: unknown[]) => Promise<FactoryReturn>\n ): ProviderBuilder<FactoryTokenProvider<FactoryReturn>, BaseProvider, T>;\n value<Value>(v: Value): ProviderBuilder<FactoryTokenProvider<Value>, BaseProvider, T>;\n class<TokenKlass>(c: Type<TokenKlass>): ProviderBuilder<TokenKlass, BaseProvider, T>;\n};\n\nexport type ProviderBuilderFn<Provider, Picked extends keyof Provider> = <TypeOf extends TokenProvider>(\n token: TypeOf,\n options?: Partial<ProviderOpts<Type>>\n) => ProviderBuilder<TypeOf, Provider, Pick<Provider, Picked>>;\n\nexport function providerBuilder<Provider, Picked extends keyof Provider>(\n props: string[],\n baseOpts: Partial<ProviderOpts<Provider>> = {}\n): ProviderBuilderFn<Provider, Picked> {\n return <TypeOf extends TokenProvider>(token: TypeOf, options: Partial<ProviderOpts<Type>> = {}) => {\n const merged = {\n global: !injector().isLoaded(),\n ...options,\n ...baseOpts,\n token\n };\n\n const provider = GlobalProviders.merge(token, merged);\n\n if (!merged.global) {\n injector().setProvider(token, provider);\n }\n\n return props.reduce(\n (acc, prop) => {\n return {\n ...acc,\n [prop]: function (value: any) {\n (provider as any)[prop] = value;\n return this;\n }\n };\n },\n {\n factory(factory: Function) {\n provider.reset();\n provider.useFactory = factory;\n return this;\n },\n asyncFactory(asyncFactory: Function) {\n provider.reset();\n provider.useAsyncFactory = asyncFactory;\n return this;\n },\n value(value: any) {\n provider.reset();\n provider.useValue = value;\n provider.type = ProviderType.VALUE;\n return this;\n },\n class(k: any) {\n provider.reset();\n provider.useClass = k;\n return this;\n },\n store() {\n return provider.store;\n },\n inspect() {\n return provider;\n },\n token() {\n return provider.token as TypeOf;\n }\n } as ProviderBuilder<TypeOf, Provider, Pick<Provider, Picked>>\n );\n };\n}\n","import {ControllerProvider} from \"../domain/ControllerProvider.js\";\nimport type {Provider} from \"../domain/Provider.js\";\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {providerBuilder} from \"../utils/providerBuilder.js\";\n\ntype PickedProps = \"scope\" | \"path\" | \"alias\" | \"hooks\" | \"deps\" | \"imports\" | \"configuration\" | \"priority\";\n\nconst Props = [\"type\", \"scope\", \"path\", \"alias\", \"hooks\", \"deps\", \"imports\", \"configuration\", \"priority\"];\nexport const injectable = providerBuilder<Provider, PickedProps | \"type\">(Props);\nexport const interceptor = providerBuilder<Provider, PickedProps | \"type\">(Props, {\n type: ProviderType.INTERCEPTOR\n});\nexport const controller = providerBuilder<ControllerProvider, PickedProps | \"children\" | \"middlewares\">([...Props, \"middlewares\"], {\n type: ProviderType.CONTROLLER\n});\n","import {classOf, nameOf} from \"@tsed/core\";\n\nexport class InvalidPropertyTokenError extends Error {\n name = \"INVALID_TOKEN_ERROR\";\n\n constructor(target: any, propertyKey: string) {\n super(\n `Object isn't a valid token. Please check the token set on ${nameOf(\n classOf(target)\n )}.${propertyKey}.\\n- Check that it is not a circular reference.\\n- Check that the token (class or symbol) exists`\n );\n }\n}\n","import {LocalsContainer} from \"../domain/LocalsContainer.js\";\nimport type {UseImportTokenProviderOpts} from \"../interfaces/ImportTokenProviderOpts.js\";\nimport {InjectorService} from \"../services/InjectorService.js\";\nimport {injector} from \"./injector.js\";\n\nlet globalLocals: LocalsContainer | undefined;\nlet globalInvOpts: any = {};\nconst stagedLocals: LocalsContainer[] = [];\n\n/**\n * Get the locals container initiated by DITest or .bootstrap() method.\n */\nexport function localsContainer({\n providers,\n rebuild\n}: {\n providers?: UseImportTokenProviderOpts[];\n rebuild?: boolean;\n} = {}) {\n if (!globalLocals || providers) {\n globalLocals = new LocalsContainer();\n\n if (providers) {\n providers.forEach((p) => {\n globalLocals!.set(p.token, p.use);\n });\n\n globalLocals.set(InjectorService, injector());\n }\n\n if (rebuild) {\n globalInvOpts.rebuild = rebuild;\n }\n }\n\n return globalLocals;\n}\n\nexport function invokeOptions() {\n return {...globalInvOpts};\n}\n\n/**\n * Reset the locals container.\n */\nexport function detachLocalsContainer() {\n globalLocals && stagedLocals.push(globalLocals);\n globalLocals = undefined;\n globalInvOpts = {};\n}\n\nexport function cleanAllLocalsContainer() {\n detachLocalsContainer();\n stagedLocals.map((item) => item.clear());\n}\n","import type {InvokeOptions} from \"../interfaces/InvokeOptions.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {injector} from \"./injector.js\";\nimport {invokeOptions, localsContainer} from \"./localsContainer.js\";\n\n/**\n * Inject a provider to another provider.\n *\n * Use this function to inject a custom provider on constructor parameter or property.\n *\n * ```typescript\n * @Injectable()\n * export class MyService {\n * connection = inject(CONNECTION);\n * }\n * ```\n *\n * @param token A token provider or token provider group\n * @param opts\n * @returns {Function}\n * @decorator\n */\nexport function inject<TokenType>(\n token: TokenProvider<TokenType>,\n opts?: Partial<Pick<InvokeOptions, \"useOpts\" | \"rebuild\" | \"locals\">>\n): TokenType {\n return injector().resolve(token, {\n ...opts,\n ...invokeOptions(),\n locals: opts?.locals || localsContainer()\n });\n}\n","import type {InvokeOptions} from \"../interfaces/InvokeOptions.js\";\nimport {injector} from \"./injector.js\";\nimport {localsContainer} from \"./localsContainer.js\";\n\n/**\n * Injects multiple instances of a given token using the injector service.\n * @param token - The injection token to resolve\n * @param opts - Optional configuration for the injection\n * @param opts.useOpts - Options for instance creation\n * @param opts.rebuild - Whether to rebuild the instance\n * @param opts.locals - Local container overrides\n * @returns Array of resolved instances\n */\nexport function injectMany<T>(token: string | symbol, opts?: Partial<Pick<InvokeOptions, \"useOpts\" | \"rebuild\" | \"locals\">>): T[] {\n return injector().getMany<T>(token, {...opts, locals: opts?.locals || localsContainer()} as InvokeOptions);\n}\n","import {catchError, decoratorTypeOf, DecoratorTypes, isPromise, Metadata, Store, type Type} from \"@tsed/core\";\n\nimport {DI_INJECTABLE_PROPS, DI_INVOKE_OPTIONS, DI_USE_OPTIONS} from \"../constants/constants.js\";\nimport {InvalidPropertyTokenError} from \"../errors/InvalidPropertyTokenError.js\";\nimport {inject} from \"../fn/inject.js\";\nimport {injectMany} from \"../fn/injectMany.js\";\nimport type {InvokeOptions} from \"../interfaces/InvokeOptions.js\";\nimport {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {getConstructorDependencies, setConstructorDependencies} from \"../utils/getConstructorDependencies.js\";\n\nfunction setToken(\n token: TokenProvider,\n {\n target,\n propertyKey,\n parameterIndex\n }: {\n target: any;\n propertyKey: string | symbol | undefined;\n parameterIndex: number;\n }\n) {\n const paramTypes = getConstructorDependencies(target, propertyKey);\n const type = paramTypes[parameterIndex];\n\n paramTypes[parameterIndex] = type === Array ? [token] : token;\n\n Metadata.setParamTypes(target, propertyKey!, paramTypes);\n setConstructorDependencies(target, paramTypes);\n}\n\nfunction getTokenType(token: TokenProvider | (() => TokenProvider) | undefined, target: any, propertyKey: string | symbol) {\n const useType = token || Metadata.getType(target, propertyKey);\n\n if (useType === Object) {\n throw new InvalidPropertyTokenError(target, String(propertyKey));\n }\n\n return useType;\n}\n\nexport type TransformInjectedProviderCB<T, Klass = any> = (\n instance: T,\n {target, propertyKey}: {self: Klass; target: Type<Klass>; propertyKey: symbol | string}\n) => unknown;\n\nexport interface BindInjectablePropertyOpts<T = any> {\n token?: TokenProvider;\n useOpts?: Record<string, unknown>;\n transform?: TransformInjectedProviderCB<T>;\n}\n\nfunction bindInjectableProperty<T = any>(\n target: any,\n propertyKey: string | symbol,\n {token, transform = (o) => o, useOpts}: BindInjectablePropertyOpts<T>\n) {\n const symbol = Symbol();\n\n if (!target[DI_INJECTABLE_PROPS]) {\n Reflect.defineProperty(target, DI_INJECTABLE_PROPS, {\n value: new Set(),\n enumerable: false,\n configurable: false\n });\n }\n\n target[DI_INJECTABLE_PROPS].add(propertyKey);\n\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n Reflect.defineProperty(target, propertyKey, {\n get() {\n const useType = getTokenType(token, target, propertyKey!);\n const originalType = Metadata.getType(target, propertyKey);\n\n const invokeOpts: Partial<InvokeOptions> = {\n rebuild: !!this[DI_INVOKE_OPTIONS]?.rebuild,\n locals: this[DI_INVOKE_OPTIONS]?.locals,\n useOpts: useOpts || Store.from(target, propertyKey).get(DI_USE_OPTIONS)\n };\n\n if (this[symbol] === undefined) {\n this[symbol] = originalType === Array ? injectMany(token as string, invokeOpts) : inject(useType, invokeOpts);\n }\n\n [].concat(this[symbol]).forEach((instance: any, index) => {\n if (isPromise(this[symbol])) {\n instance.then((result: any) => {\n this[symbol]![index] = result;\n if (originalType !== Array) {\n this[symbol] = result;\n }\n });\n }\n });\n\n return transform(this[symbol], {self: this, target, propertyKey});\n }\n });\n}\n\n/**\n * Inject a provider to another provider.\n *\n * Use this decorator to inject a custom provider on constructor parameter or property.\n *\n * ```typescript\n * @Injectable()\n * export class MyService {\n * @Inject(CONNECTION)\n * connection: CONNECTION;\n * }\n * ```\n *\n * @param token A token provider or token provider group\n * @param transform\n * @returns {Function}\n * @decorator\n */\nexport function Inject<T = any>(token?: TokenProvider<T> | (() => TokenProvider<T>), transform?: TransformInjectedProviderCB<T>): any;\nexport function Inject<T = any>(\n token?: TokenProvider<T> | (() => TokenProvider<T>),\n opts?: Partial<Omit<BindInjectablePropertyOpts<T>, \"token\">>\n): any;\nexport function Inject<T = any>(\n token?: TokenProvider<T> | (() => TokenProvider<T>),\n opts: TransformInjectedProviderCB<T> | Partial<Omit<BindInjectablePropertyOpts<T>, \"token\">> = {}\n) {\n opts = typeof opts === \"function\" ? {transform: opts} : opts;\n\n return (target: any, propertyKey: string | symbol | undefined, index?: number) => {\n const bindingType = decoratorTypeOf([target, propertyKey, index]);\n\n switch (bindingType) {\n case DecoratorTypes.PARAM_CTOR:\n if (token) {\n setToken(token, {target, propertyKey, parameterIndex: index!});\n }\n break;\n case DecoratorTypes.PROP:\n bindInjectableProperty(target, propertyKey!, {...opts, token});\n }\n };\n}\n","import {DecoratorParameters, decoratorTypeOf, DecoratorTypes} from \"@tsed/core\";\n\nimport {configuration} from \"../fn/configuration.js\";\nimport {injectable} from \"../fn/injectable.js\";\nimport {injector} from \"../fn/injector.js\";\nimport {CONFIGURATION, DIConfiguration} from \"../services/DIConfiguration.js\";\nimport {Inject} from \"./inject.js\";\n\n/**\n * Get or set Configuration on a class.\n *\n * @decorator\n */\nexport function Configuration(): any;\nexport function Configuration(settings: Partial<TsED.Configuration>): ClassDecorator;\nexport function Configuration(settings: Partial<TsED.Configuration> = {}): Function {\n return (...args: DecoratorParameters) => {\n switch (decoratorTypeOf(args)) {\n case DecoratorTypes.CLASS:\n configuration(args[0], settings);\n\n break;\n default:\n case DecoratorTypes.PARAM_CTOR:\n return Inject(DIConfiguration)(args[0], args[1], args[2] as number);\n }\n };\n}\n\nexport type Configuration = TsED.DIConfiguration & DIConfiguration;\n\n// To maintain compatibility with the previous implementation, we need to declare Configuration as\n// injectable token.\ninjectable(Configuration).factory(() => injector().settings);\n","import {injector} from \"./injector.js\";\n\nexport function constant<Type>(expression: string): Type | undefined;\nexport function constant<Type>(expression: string, defaultValue: Type | undefined): Type;\nexport function constant<Type>(expression: string, defaultValue?: Type | undefined): Type | undefined {\n return injector().settings.get(expression, defaultValue);\n}\n","import {catchError, deepClone} from \"@tsed/core\";\n\nimport {constant} from \"../fn/constant.js\";\n\nexport function bindConstant(target: any, propertyKey: string | symbol, expression: string, defaultValue?: any) {\n const symbol = Symbol();\n\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n Reflect.defineProperty(target, propertyKey, {\n get() {\n if (this[symbol] !== undefined) {\n return this[symbol];\n }\n\n const value = constant(expression, defaultValue);\n\n this[symbol] = Object.freeze(deepClone(value));\n\n return this[symbol];\n },\n set(value: unknown) {\n const bean = constant(expression, defaultValue) || this[symbol];\n\n if (bean === undefined && value !== undefined) {\n this[symbol] = value;\n }\n },\n enumerable: true,\n configurable: true\n });\n}\n\n/**\n * Return value from Configuration.\n *\n * ## Example\n *\n * ```typescript\n * import {Env} from \"@tsed/core\";\n * import {Constant, Value} from \"@tsed/di\";\n *\n * export class MyClass {\n *\n * @Constant(\"env\")\n * env: Env;\n *\n * @Value(\"swagger.path\")\n * swaggerPath: string;\n *\n * @Value(\"swagger.path\", \"defaultValue\")\n * swaggerPath: string;\n *\n * constructor() {\n * console.log(this.swaggerPath) // undefined. Not available on constructor\n * }\n *\n * $onInit() {\n * console.log(this.swaggerPath) // something\n * }\n * }\n * ```\n *\n * @param {string} expression\n * @param defaultValue\n * @returns {(targetClass: any, attributeName: string) => any}\n * @decorator\n */\nexport function Constant<Type = unknown>(expression: string, defaultValue?: Type): PropertyDecorator {\n return (target, propertyKey) => {\n return bindConstant(target, propertyKey, expression, defaultValue);\n };\n}\n","export enum InjectablePropertyType {\n METHOD = \"method\",\n PROPERTY = \"property\",\n CONSTANT = \"constant\",\n VALUE = \"value\",\n INTERCEPTOR = \"interceptor\"\n}\n","import {isArrayOrArrayClass, Type, useDecorators} from \"@tsed/core\";\nimport {Children, Path} from \"@tsed/schema\";\n\nimport type {ControllerMiddlewares} from \"../domain/ControllerProvider.js\";\nimport {controller} from \"../fn/injectable.js\";\nimport {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\n\nexport type PathType = string | RegExp | (string | RegExp)[];\n\nexport interface ControllerOptions extends Partial<ProviderOpts<any>> {\n path?: PathType;\n children?: Type<any>[];\n middlewares?: Partial<ControllerMiddlewares>;\n}\n\nfunction mapOptions(options: any): ControllerOptions {\n if (typeof options === \"string\" || options instanceof RegExp || isArrayOrArrayClass(options)) {\n return {\n path: options\n };\n }\n\n return options;\n}\n\n/**\n * Declare a new controller with his Rest path. His methods annotated will be collected to build the routing list.\n * This routing listing will be built with the `express.Router` object.\n *\n * ::: tip\n * See [Controllers](/docs/controllers.md) section for more details\n * :::\n *\n * ```typescript\n * @Controller(\"/calendars\")\n * export class CalendarCtrl {\n *\n * @Get(\"/:id\")\n * public get(\n * @Req() request: Req,\n * @Res() response: Res,\n * @Next() next: Next\n * ): void {\n *\n * }\n * }\n * ```\n *\n * @param options\n * @controller\n * @decorator\n * @classDecorator\n */\nexport function Controller(options: PathType | ControllerOptions): ClassDecorator {\n const {children = [], path, ...opts} = mapOptions(options);\n\n return useDecorators(\n (target: Type) => {\n controller(target, opts);\n },\n path && Path(path as any),\n Children(...children)\n );\n}\n","import {injectable} from \"../fn/injectable.js\";\nimport type {ProviderOpts} from \"../interfaces/ProviderOpts.js\";\n\n/**\n * The decorators `@Injectable()` declare a new service can be injected in other service, controller, interceptor, etc.. on there `constructor`.\n * All classes annotated with `@Injectable()` are built one time, excepted if you change the default provider configuration.\n *\n * ::: tip\n * `@Injectable()` use the `reflect-metadata` to collect and inject the built provided to other services.\n * :::\n *\n * ### Options\n *\n * - type (@@ProviderType@@ or `string`): Kind of provider. (Default: `ProviderType.PROVIDER`)\n * - scope (@@ProviderScope@@): Kind of provider. (Default: `ProviderScope.SINGLETON`)\n * - token (@@TokenProvider@@): An injection token (Note: This option override default metadata generated by Typescript).\n * - deps (`Type<any>`): List of class or provider which will be injected to the constructor (Note: This options override default metadata generated by Typescript).\n *\n * @returns {Function}\n * @decorator\n */\nexport function Injectable(options: Partial<ProviderOpts> = {}): ClassDecorator {\n return (target: any) => {\n const opts = {\n ...options,\n ...(options.token ? {useClass: target} : {token: target})\n };\n injectable(opts.token, opts);\n };\n}\n","import {classOf, decorateMethodsOf, DecoratorParameters, decoratorTypeOf, DecoratorTypes, nameOf, Store, Type} from \"@tsed/core\";\n\nimport {DI_INTERCEPTOR_OPTIONS, DI_INVOKE_OPTIONS} from \"../constants/constants.js\";\nimport {inject} from \"../fn/inject.js\";\nimport type {InterceptorContext} from \"../interfaces/InterceptorContext.js\";\nimport type {InterceptorMethods} from \"../interfaces/InterceptorMethods.js\";\nimport type {InvokeOptions} from \"../interfaces/InvokeOptions.js\";\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\n\nexport function getInterceptorOptions<T>(target: Type<any>, propertyKey: string | symbol) {\n return Store.fromMethod(target, propertyKey).get(DI_INTERCEPTOR_OPTIONS) as T;\n}\n\nexport function bindIntercept(target: any, propertyKey: string | symbol, token: TokenProvider, options: Record<string, unknown>) {\n const klass = classOf(target);\n const descriptor = Reflect.getOwnPropertyDescriptor(klass.prototype, propertyKey);\n const originalMethod = descriptor!.value;\n const symbol = Symbol();\n\n Store.fromMethod(klass, propertyKey).set(DI_INTERCEPTOR_OPTIONS, options);\n\n function newMethod(...args: any[]) {\n const next = (err?: Error) => {\n if (!err) {\n return originalMethod.apply(this, args);\n }\n\n throw err;\n };\n\n const context: InterceptorContext<any> = {\n target: klass,\n propertyKey,\n args,\n options,\n next\n };\n\n const invokeOpts: Partial<InvokeOptions> = {\n rebuild: !!this[DI_INVOKE_OPTIONS]?.rebuild,\n locals: this[DI_INVOKE_OPTIONS]?.locals\n };\n\n this[symbol] = this[symbol] || inject(token, invokeOpts)!;\n\n return this[symbol].intercept!(\n {\n ...context,\n options\n },\n next\n );\n }\n\n descriptor!.value = newMethod;\n\n Reflect.deleteProperty(klass.prototype, propertyKey);\n Reflect.defineProperty(klass.prototype, propertyKey, descriptor!);\n\n return descriptor;\n}\n\n/**\n * Attaches interceptor to method call and executes the before and after methods\n *\n * @param interceptor\n * @param options\n * @decorator\n */\nexport function Intercept<T extends InterceptorMethods>(interceptor: Type<T>, options?: any): any {\n return (...args: DecoratorParameters) => {\n const [target, propertyKey] = args;\n const type = decoratorTypeOf(args);\n switch (type) {\n case DecoratorTypes.CLASS:\n decorateMethodsOf(target, Intercept(interceptor, options));\n break;\n case DecoratorTypes.METHOD:\n return bindIntercept(target, propertyKey, interceptor, options);\n }\n };\n}\n","import {ProviderType} from \"../domain/ProviderType.js\";\nimport {Injectable} from \"./injectable.js\";\n\n/**\n * The decorators `@Interceptor()` declare a new service can be injected in other service or controller on there `constructor`.\n * All services annotated with `@Interceptor()` are constructed one time.\n *\n * > `@Service()` use the `reflect-metadata` to collect and inject service on controllers or other services.\n *\n * @returns {Function}\n * @decorator\n */\nexport function Interceptor(): Function {\n return Injectable({\n type: ProviderType.INTERCEPTOR\n });\n}\n","import {isFunction} from \"@tsed/core\";\n\nimport type {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {inject} from \"./inject.js\";\nimport {injector} from \"./injector.js\";\n\n/**\n * Lazy load a provider from his package and invoke only when the provider is used.\n */\nexport async function lazyInject<Token>(factory: () => Promise<{default: TokenProvider<Token>}>): Promise<Token> {\n const {default: token} = await factory();\n\n if (!injector().has(token)) {\n const instance = await inject(token);\n\n const instanceWithHook = instance as unknown as {$onInit?: () => Promise<void>};\n\n if (\"$onInit\" in instanceWithHook && isFunction(instanceWithHook.$onInit)) {\n await instanceWithHook.$onInit();\n }\n }\n\n return injector().get(token) as unknown as Promise<Token>;\n}\n\nexport async function optionalLazyInject<Token>(\n factory: () => Promise<{\n default: TokenProvider;\n }>\n): Promise<Token | undefined> {\n try {\n return await lazyInject(factory);\n } catch (er) {\n return undefined;\n }\n}\n","import {catchError, isFunction} from \"@tsed/core\";\n\nimport {lazyInject, optionalLazyInject} from \"../fn/lazyInject.js\";\n\nfunction mapOptions(args: any[], optional = false) {\n function wrap(key: string, resolver: any) {\n return async () => {\n try {\n const {[key]: token} = await resolver();\n\n return {default: token};\n } catch (er) {\n if (!optional) {\n throw er;\n }\n\n return;\n }\n };\n }\n\n if (isFunction(args[0])) {\n return wrap(\"default\", args[0]);\n }\n\n return wrap(args[0], args[1]);\n}\n\n/**\n * Lazy load a provider from his package and invoke only when the provider is used\n *\n * ```typescript\n * import type {PlatformException} from \"@tsed/platform-exceptions\";\n *\n * @Injectable()\n * export class MyService {\n * @LazyInject(() => import(\"@tsed/platform-exceptions\"))\n * exceptions: Promise<PlatformException>;\n * }\n * ```\n *\n * @param key - The named export to import from the module.\n * @param resolver - A function that returns a promise resolving to the module.\n * @returns {Function}\n * @decorator\n */\nexport function LazyInject(resolver: () => Promise<{default: unknown}>): PropertyDecorator;\nexport function LazyInject(key: string, resolver: () => Promise<{default: unknown}>): PropertyDecorator;\nexport function LazyInject(...args: any[]): PropertyDecorator {\n let resolver = mapOptions(args);\n\n return (target: any, propertyKey: string | symbol): any | void => {\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n Reflect.defineProperty(target, propertyKey, {\n async get() {\n return lazyInject<any>(resolver as any);\n }\n });\n };\n}\n\n/**\n * Optionally Lazy load a provider from his package and invoke only when the provider is used\n *\n * ```typescript\n * import type {PlatformException} from \"@tsed/platform-exceptions\";\n *\n * @Injectable()\n * export class MyService {\n * @OptionalLazyInject(() => import(\"@tsed/platform-exceptions\"))\n * exceptions: Promise<PlatformException>;\n * }\n * ```\n * @param key - The named export to import from the module.\n * @param resolver - A function that returns a promise resolving to the module.\n * @decorator\n */\nexport function OptionalLazyInject(resolver: () => Promise<{default: unknown}>): PropertyDecorator;\nexport function OptionalLazyInject(key: string, resolver: () => Promise<{default: unknown}>): PropertyDecorator;\nexport function OptionalLazyInject(...args: any[]): PropertyDecorator {\n const resolver = mapOptions(args, true);\n\n return (target: any, propertyKey: string | symbol): any | void => {\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n Reflect.defineProperty(target, propertyKey, {\n async get() {\n return optionalLazyInject(resolver as any);\n }\n });\n };\n}\n","import {useDecorators} from \"@tsed/core\";\n\nimport {ProviderScope} from \"../domain/ProviderScope.js\";\nimport {ProviderType} from \"../domain/ProviderType.js\";\nimport {TokenProvider} from \"../interfaces/TokenProvider.js\";\nimport {Configuration} from \"./configuration.js\";\nimport {Injectable} from \"./injectable.js\";\n\nexport interface ModuleOptions extends Omit<TsED.Configuration, \"scopes\"> {\n /**\n * Provider scope\n */\n scope?: ProviderScope;\n /**\n * Providers must be initialized before building this module\n */\n imports?: TokenProvider[];\n /**\n * Explicit token must be injected in the constructor\n */\n deps?: TokenProvider[];\n\n /**\n * Additional properties are stored as provider configuration.\n */\n [key: string]: any;\n}\n\n/**\n * Declare a new Ts.ED module\n *\n * ## Options\n * - imports: List of Provider which must be built by injector before invoking the module\n * - deps: List of provider must be injected to the module constructor (explicit declaration)\n *\n * @param options\n * @decorator\n */\nexport function Module(options: Partial<ModuleOptions> = {}) {\n const {scopes, imports, deps, scope, ...configuration} = options;\n\n return useDecorators(\n Configuration(configuration),\n Injectable({\n type: ProviderType.MODULE,\n scope: ProviderScope.SINGLETON,\n imports,\n deps,\n injectable: false\n })\n );\n}\n","import {StoreSet} from \"@tsed/core\";\n\nimport {ProviderScope} from \"../domain/ProviderScope.js\";\n\n/**\n *\n * @param {\"request\" | \"singleton\" | ProviderScope} scope\n * @returns {Function}\n * @constructor\n */\nexport function Scope(scope: \"request\" | \"singleton\" | ProviderScope = ProviderScope.REQUEST) {\n return StoreSet(\"scope\", scope);\n}\n","import {classOf} from \"@tsed/core\";\n\nimport {DI_USE_PARAM_OPTIONS} from \"../constants/constants.js\";\nimport {ProviderScope} from \"../domain/ProviderScope.js\";\nimport {Inject} from \"./inject.js\";\nimport {Scope} from \"./scope.js\";\n\n/**\n * Get instance options. This options depending on his invocation context.\n *\n * ```typescript\n * import {Injectable, Opts, UseOpts} from \"@tsed/di\";\n *\n * @Injectable()\n * class MyConfigurableService {\n * source: string;\n * constructor(@Opts options: any = {}) {\n * console.log(\"Hello \", options.source); // log: Hello Service1 then Hello Service2\n *\n * this.source = options.source;\n * }\n * }\n *\n * @Injectable()\n * class MyService1 {\n * constructor(@UseOpts({source: 'Service1'}) service: MyConfigurableService) {\n * console.log(service.source) // log: Service1\n * }\n * }\n *\n * @Injectable()\n * class MyService2 {\n * constructor(@UseOpts({source: 'Service2'}) service: MyConfigurableService) {\n * console.log(service.source) // log: Service2\n * }\n * }\n * ```\n *\n * ::: warning\n * Using @@Opts@@ decorator on a constructor parameter change the Scope of the provider to `ProviderScope.INSTANCE`.\n * :::\n *\n * @param target\n * @param propertyKey\n * @param index\n * @decorator\n */\nexport function Opts(target: any, propertyKey: string | symbol | undefined, index: number) {\n Scope(ProviderScope.INSTANCE)(classOf(target));\n Inject(DI_USE_PARAM_OPTIONS)(target, propertyKey, index);\n}\n","import {Type} from \"@tsed/core\";\n\nimport {GlobalProviders} from \"../registries/GlobalProviders.js\";\n\n/**\n * Override a provider which is already registered in ProviderRegistry.\n * @returns {Function}\n * @decorators\n * @param originalProvider\n */\nexport function OverrideProvider(originalProvider: Type<any>): Function {\n return (target: Type<any>): void => {\n GlobalProviders.get(originalProvider)!.useClass = target;\n };\n}\n","import {Injectable} from \"./injectable.js\";\n\n/**\n * The decorators `@Service()` declare a new service can be injected in other service or controller on there `constructor`.\n * All services annotated with `@Service()` are constructed one time.\n *\n * > `@Service()` use the `reflect-metadata` to collect and inject service on controllers or other services.\n *\n * @returns {Function}\n * @decorator\n */\nexport function Service(): Function {\n return Injectable();\n}\n","import {decoratorTypeOf, DecoratorTypes, Store, UnsupportedDecoratorType} from \"@tsed/core\";\n\nimport {DI_USE_OPTIONS, DI_USE_PARAM_OPTIONS} from \"../constants/constants.js\";\n\n/**\n * Add options to invoke the Service.\n *\n * ```typescript\n * import {Injectable, Opts, UseOpts} from \"@tsed/di\";\n *\n * @Injectable()\n * class MyConfigurableService {\n * source: string;\n * constructor(@Opts options: any = {}) {\n * console.log(\"Hello \", options.source); // log: Hello Service1 then Hello Service2\n *\n * this.source = options.source;\n * }\n * }\n *\n * @Injectable()\n * class MyService1 {\n * constructor(@UseOpts({source: 'Service1'}) service: MyConfigurableService) {\n * console.log(service.source) // log: Service1\n * }\n * }\n *\n * @Injectable()\n * class MyService2 {\n * constructor(@UseOpts({source: 'Service2'}) service: MyConfigurableService) {\n * console.log(service.source) // log: Service2\n * }\n * }\n * ```\n *\n * ::: warning\n * Using @@Opts@@ decorator on a constructor parameter change the Scope of the provider to `ProviderScope.INSTANCE`.\n * :::\n *\n * @returns {Function}\n * @decorator\n * @param options\n */\nexport function UseOpts(options: {[key: string]: any}): Function {\n return (target: Object, propertyKey: string | symbol, index?: number): any => {\n const bindingType = decoratorTypeOf([target, propertyKey, index]);\n\n switch (bindingType) {\n case DecoratorTypes.PARAM_CTOR:\n Store.from(target).merge(`${DI_USE_PARAM_OPTIONS}:${index}`, options);\n break;\n\n case DecoratorTypes.PROP:\n Store.from(target, propertyKey).set(DI_USE_OPTIONS, options);\n break;\n\n default:\n throw new UnsupportedDecoratorType(UseOpts, [target, propertyKey, index]);\n }\n };\n}\n","import {catchError} from \"@tsed/core\";\n\nimport {injector} from \"../fn/injector.js\";\n\nexport function bindValue(target: any, propertyKey: string | symbol, expression: string, defaultValue?: any) {\n const descriptor = {\n get() {\n return injector().settings.get(expression, defaultValue);\n },\n set(value: unknown) {\n injector().settings.set(expression, value);\n },\n enumerable: true,\n configurable: true\n };\n\n catchError(() => Reflect.deleteProperty(target, propertyKey));\n catchError(() => Reflect.defineProperty(target, propertyKey, descriptor));\n}\n\n/**\n * Return value from Configuration.\n *\n * ## Example\n *\n * ```typescript\n * import {Env} from \"@tsed/core\";\n * import {Constant, Value} from \"@tsed/di\";\n *\n * export class MyClass {\n *\n * @Constant(\"env\")\n * env: Env;\n *\n * @Value(\"swagger.path\")\n * swaggerPath: string;\n *\n * @Value(\"swagger.path\", \"defaultValue\")\n * swaggerPath: string;\n *\n * constructor() {\n * console.log(this.swaggerPath) // undefined. Not available on constructor\n * }\n *\n * $onInit() {\n * console.log(this.swaggerPath) // something\n * }\n * }\n * ```\n *\n * @param expression\n * @param defaultValue\n * @returns {(targetClass: any, attributeName: string) => any}\n * @decorator\n */\nexport function Value(expression: string, defaultValue?: unknown): PropertyDecorator {\n return (target, propertyKey) => {\n return bindValue(target, propertyKey, expression, defaultValue);\n };\n}\n","import {injector} from \"./injector.js\";\n\n/**\n * Get a value from the `injector.settings`.\n *\n * ## Example\n *\n * ```ts\n * import {refValue, Injectable} from \"@tsed/di\";\n *\n * @Injectable()\n * class Test {\n * test = refValue(\"logger.level\", \"default value\");\n *\n * constructor() {\n * console.log(this.test.value); // \"off\"\n * }\n * }\n *\n * @param expression The expression to get the value from the `injector.settings`.\n */\nexport function refValue<Type>(expression: string): {value: Type | undefined};\nexport function refValue<Type>(expression: string, defaultValue: Type | undefined): {value: Type};\nexport function refValue<Type>(expression: string, defaultValue?: Type | undefined): {value: Type | undefined} {\n return Object.freeze({\n get value() {\n return injector().settings.get(expression, defaultValue);\n },\n set value(value: Type) {\n injector().settings.set(expression, value);\n }\n });\n}\n","import {injectable} from \"../fn/injectable.js\";\nimport {injector} from \"../fn/injector.js\";\nimport {DILogger} from \"../interfaces/DILogger.js\";\n\nexport const LOGGER = Symbol.for(\"LOGGER\");\nexport type LOGGER = DILogger;\n\ninjectable(LOGGER).factory(() => injector().logger);\n","import {Store, Type} from \"@tsed/core\";\n\nexport function mergeMount(m1: any = {}, m2: any = {}) {\n return Object.entries(m2).reduce((mount, [key, controllers]) => {\n return {\n ...mount,\n [key]: (mount[key] || []).concat(controllers)\n };\n }, m1);\n}\n\nexport function getConfiguration(module: Type<any>, configuration: any = {}) {\n const store = Store.from(module).get(\"configuration\") || {};\n\n return {\n ...store,\n ...configuration,\n mount: mergeMount(store.mount, configuration.mount)\n };\n}\n"],"names":["root","factory","exports","module","require","define","amd","self","__WEBPACK_EXTERNAL_MODULE__414__","__WEBPACK_EXTERNAL_MODULE__171__","__WEBPACK_EXTERNAL_MODULE__538__","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","undefined","__webpack_modules__","d","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","r","Symbol","toStringTag","value","DI_INVOKE_OPTIONS","DI_INJECTABLE_PROPS","DI_USE_OPTIONS","DI_USE_PARAM_OPTIONS","DI_INTERCEPTOR_OPTIONS","ProviderScope","ProviderType","LocalsContainer","Map","hooks","Hooks","destroy","this","asyncEmit","discoverHooks","token","methodsOf","reduce","propertyKey","String","startsWith","listener","instance","args","Provider","constructor","options","type","PROVIDER","useClass","assign","getClassOrSymbol","Store","from","provide","isClass","classOf","className","name","nameOf","store","path","set","scope","isAsync","SINGLETON","configuration","children","getArgOpts","index","defaultValue","useAsyncFactory","clone","hasChildren","length","hasParent","toString","useFactory","useValue","filter","Boolean","join","reset","GlobalProviderRegistry","super","has","metadata","merge","target","global","GlobalProviders","createProvider","meta","createIfNotExists","keys","forEach","delete","createRegistry","model","defaultOptions","getRegistrySettings","provider","item","Container","add","settings","addProvider","hasProvider","setProvider","getProvider","getProviders","types","concat","map","providers","_","includes","addProviders","container","colorIfAllowed","colorFn","text","process","env","NO_COLOR","colors","red","yellow","green","InjectionError","Error","origin","isString","tokens","message","stack","originMessage","tokensMessage","throwInjectorError","currentDependency","error","erroredArg","getConstructorArgNames","arg","deps","signature","indexOf","repeat","drawline","printDependencyInjectionError","createContainer","rootModule","entries","getConstructorDependencies","Metadata","getOwn","getParamTypes","setConstructorDependencies","CONFIGURATION","for","DIConfiguration","initialProps","default","imports","routes","logger","version","v","rootDir","debug","level","callbackfn","thisArg","Set","Array","getRaw","Reflect","setRaw","setValue","getValue","EXCLUDED_CONFIGURATION_KEYS","InjectorService","console","resolvedConfiguration","isLoaded","toArray","values","resolve","getMany","alias","locals","useOpts","rebuild","ensureProvider","invokeToken","setToCache","registerHooks","REQUEST","invoke","loadAsync","loadSync","load","$asyncEmit","bootstrap","resolveConfiguration","mergedConfiguration","deepMerge","deepClone","emit","eventName","alter","$alter","alterAsync","$asyncAlter","$off","resolveImportsProviders","force","resolvedOpts","mapInvokeOptions","construct","$emit","invokeDependency","parent","isArray","isInheritedFrom","services","isObject","props","use","isFunction","async","Promise","all","$onDestroy","on","event","cb","$on","isPromise","then","globalInjector","injector","destroyInjector","AutoInjectable","constr","inj","list","Math","max","i","push","resolveAutoInjectableArgs","ControllerProvider","CONTROLLER","middlewares","useAfter","useBefore","mdlwrs","a","b","registerProvider","opts","injectable","inspect","providerBuilder","baseOpts","merged","acc","asyncFactory","VALUE","k","Props","interceptor","INTERCEPTOR","controller","InvalidPropertyTokenError","globalLocals","globalInvOpts","stagedLocals","localsContainer","p","invokeOptions","detachLocalsContainer","cleanAllLocalsContainer","clear","inject","injectMany","Inject","transform","decoratorTypeOf","DecoratorTypes","PARAM_CTOR","parameterIndex","paramTypes","setParamTypes","setToken","PROP","symbol","configurable","catchError","deleteProperty","useType","getType","getTokenType","originalType","invokeOpts","result","bindInjectableProperty","Configuration","CLASS","constant","expression","bindConstant","freeze","Constant","InjectablePropertyType","Controller","RegExp","isArrayOrArrayClass","mapOptions","useDecorators","Path","Children","Injectable","getInterceptorOptions","fromMethod","bindIntercept","klass","descriptor","getOwnPropertyDescriptor","originalMethod","next","err","apply","context","intercept","Intercept","decorateMethodsOf","METHOD","Interceptor","lazyInject","instanceWithHook","$onInit","optionalLazyInject","er","optional","wrap","resolver","LazyInject","OptionalLazyInject","Module","scopes","MODULE","Scope","StoreSet","Opts","INSTANCE","OverrideProvider","originalProvider","Service","UseOpts","UnsupportedDecoratorType","bindValue","Value","refValue","LOGGER","mergeMount","m1","m2","mount","controllers","getConfiguration"],"sourceRoot":""}