@tsed/di 8.11.1 → 8.11.2-rc.1
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.
- package/lib/esm/common/constants/constants.js +0 -1
- package/lib/esm/common/decorators/autoInjectable.js +0 -1
- package/lib/esm/common/decorators/configuration.js +0 -1
- package/lib/esm/common/decorators/constant.js +0 -1
- package/lib/esm/common/decorators/controller.js +0 -1
- package/lib/esm/common/decorators/inject.js +0 -1
- package/lib/esm/common/decorators/injectable.js +0 -1
- package/lib/esm/common/decorators/intercept.js +0 -1
- package/lib/esm/common/decorators/interceptor.js +0 -1
- package/lib/esm/common/decorators/lazyInject.js +0 -1
- package/lib/esm/common/decorators/module.js +0 -1
- package/lib/esm/common/decorators/opts.js +0 -1
- package/lib/esm/common/decorators/overrideProvider.js +0 -1
- package/lib/esm/common/decorators/scope.js +0 -1
- package/lib/esm/common/decorators/service.js +0 -1
- package/lib/esm/common/decorators/useOpts.js +0 -1
- package/lib/esm/common/decorators/value.js +0 -1
- package/lib/esm/common/domain/Container.js +0 -1
- package/lib/esm/common/domain/ControllerProvider.js +0 -1
- package/lib/esm/common/domain/InjectablePropertyType.js +0 -1
- package/lib/esm/common/domain/LocalsContainer.js +0 -1
- package/lib/esm/common/domain/Provider.js +0 -1
- package/lib/esm/common/domain/ProviderScope.js +0 -1
- package/lib/esm/common/domain/ProviderType.js +0 -1
- package/lib/esm/common/errors/InjectionError.js +0 -1
- package/lib/esm/common/errors/InvalidPropertyTokenError.js +0 -1
- package/lib/esm/common/fn/configuration.js +0 -1
- package/lib/esm/common/fn/constant.js +0 -1
- package/lib/esm/common/fn/inject.js +0 -1
- package/lib/esm/common/fn/injectMany.js +0 -1
- package/lib/esm/common/fn/injectable.js +0 -1
- package/lib/esm/common/fn/injector.js +0 -1
- package/lib/esm/common/fn/lazyInject.js +0 -1
- package/lib/esm/common/fn/localsContainer.js +0 -1
- package/lib/esm/common/fn/logger.js +0 -1
- package/lib/esm/common/fn/refValue.js +0 -1
- package/lib/esm/common/index.js +0 -1
- package/lib/esm/common/interfaces/DIConfigurationOptions.js +0 -1
- package/lib/esm/common/interfaces/DILogger.js +0 -1
- package/lib/esm/common/interfaces/DILoggerOptions.js +0 -1
- package/lib/esm/common/interfaces/ImportTokenProviderOpts.js +0 -1
- package/lib/esm/common/interfaces/InterceptorContext.js +0 -1
- package/lib/esm/common/interfaces/InterceptorMethods.js +0 -1
- package/lib/esm/common/interfaces/InvokeOptions.js +0 -1
- package/lib/esm/common/interfaces/OnDestroy.js +0 -1
- package/lib/esm/common/interfaces/OnInit.js +0 -1
- package/lib/esm/common/interfaces/ProviderOpts.js +0 -1
- package/lib/esm/common/interfaces/RegistrySettings.js +0 -1
- package/lib/esm/common/interfaces/ResolvedInvokeOptions.js +0 -1
- package/lib/esm/common/interfaces/TokenProvider.js +0 -1
- package/lib/esm/common/interfaces/TokenRoute.js +0 -1
- package/lib/esm/common/registries/GlobalProviders.js +0 -1
- package/lib/esm/common/registries/ProviderRegistry.js +0 -1
- package/lib/esm/common/services/DIConfiguration.js +0 -1
- package/lib/esm/common/services/DILogger.js +0 -1
- package/lib/esm/common/services/InjectorService.js +0 -1
- package/lib/esm/common/utils/colors.js +0 -1
- package/lib/esm/common/utils/createContainer.js +0 -1
- package/lib/esm/common/utils/discoverHooks.js +0 -1
- package/lib/esm/common/utils/getConfiguration.js +0 -1
- package/lib/esm/common/utils/getConstructorDependencies.js +0 -1
- package/lib/esm/common/utils/providerBuilder.js +0 -1
- package/lib/esm/index.js +0 -1
- package/lib/esm/node/decorators/injectContext.js +0 -1
- package/lib/esm/node/domain/ContextLogger.js +0 -1
- package/lib/esm/node/domain/DIContext.js +0 -1
- package/lib/esm/node/fn/context.js +0 -1
- package/lib/esm/node/fn/contextLogger.js +0 -1
- package/lib/esm/node/index.js +0 -1
- package/lib/esm/node/interfaces/AlterRunInContext.js +0 -1
- package/lib/esm/node/services/DILogger.js +0 -1
- package/lib/esm/node/services/DITest.js +0 -1
- package/lib/esm/node/utils/asyncHookContext.js +0 -1
- package/lib/esm/node/utils/attachLogger.js +0 -1
- package/lib/esm/node/utils/setLoggerConfiguration.js +0 -1
- package/lib/esm/node/utils/setLoggerFormat.js +0 -1
- package/lib/esm/node/utils/setLoggerLevel.js +0 -1
- package/package.json +12 -10
- package/.barrelsby.json +0 -5
- package/lib/browser/chunks/injectable.js +0 -65
- package/lib/browser/chunks/injectable.js.map +0 -1
- package/lib/browser/common/constants/constants.js +0 -9
- package/lib/browser/common/constants/constants.js.map +0 -1
- package/lib/browser/common/decorators/autoInjectable.js +0 -26
- package/lib/browser/common/decorators/autoInjectable.js.map +0 -1
- package/lib/browser/common/decorators/configuration.js +0 -24
- package/lib/browser/common/decorators/configuration.js.map +0 -1
- package/lib/browser/common/decorators/constant.js +0 -27
- package/lib/browser/common/decorators/constant.js.map +0 -1
- package/lib/browser/common/decorators/controller.js +0 -23
- package/lib/browser/common/decorators/controller.js.map +0 -1
- package/lib/browser/common/decorators/inject.js +0 -62
- package/lib/browser/common/decorators/inject.js.map +0 -1
- package/lib/browser/common/decorators/injectable.js +0 -14
- package/lib/browser/common/decorators/injectable.js.map +0 -1
- package/lib/browser/common/decorators/intercept.js +0 -57
- package/lib/browser/common/decorators/intercept.js.map +0 -1
- package/lib/browser/common/decorators/interceptor.js +0 -11
- package/lib/browser/common/decorators/interceptor.js.map +0 -1
- package/lib/browser/common/decorators/lazyInject.js +0 -43
- package/lib/browser/common/decorators/lazyInject.js.map +0 -1
- package/lib/browser/common/decorators/module.js +0 -22
- package/lib/browser/common/decorators/module.js.map +0 -1
- package/lib/browser/common/decorators/opts.js +0 -12
- package/lib/browser/common/decorators/opts.js.map +0 -1
- package/lib/browser/common/decorators/overrideProvider.js +0 -10
- package/lib/browser/common/decorators/overrideProvider.js.map +0 -1
- package/lib/browser/common/decorators/scope.js +0 -9
- package/lib/browser/common/decorators/scope.js.map +0 -1
- package/lib/browser/common/decorators/service.js +0 -8
- package/lib/browser/common/decorators/service.js.map +0 -1
- package/lib/browser/common/decorators/useOpts.js +0 -23
- package/lib/browser/common/decorators/useOpts.js.map +0 -1
- package/lib/browser/common/decorators/value.js +0 -23
- package/lib/browser/common/decorators/value.js.map +0 -1
- package/lib/browser/common/domain/Container.js +0 -64
- package/lib/browser/common/domain/Container.js.map +0 -1
- package/lib/browser/common/domain/ControllerProvider.js +0 -35
- package/lib/browser/common/domain/ControllerProvider.js.map +0 -1
- package/lib/browser/common/domain/InjectablePropertyType.js +0 -5
- package/lib/browser/common/domain/InjectablePropertyType.js.map +0 -1
- package/lib/browser/common/domain/LocalsContainer.js +0 -13
- package/lib/browser/common/domain/LocalsContainer.js.map +0 -1
- package/lib/browser/common/domain/Provider.js +0 -144
- package/lib/browser/common/domain/Provider.js.map +0 -1
- package/lib/browser/common/domain/ProviderScope.js +0 -5
- package/lib/browser/common/domain/ProviderScope.js.map +0 -1
- package/lib/browser/common/domain/ProviderType.js +0 -5
- package/lib/browser/common/domain/ProviderType.js.map +0 -1
- package/lib/browser/common/errors/InjectionError.js +0 -31
- package/lib/browser/common/errors/InjectionError.js.map +0 -1
- package/lib/browser/common/errors/InvalidPropertyTokenError.js +0 -17
- package/lib/browser/common/errors/InvalidPropertyTokenError.js.map +0 -1
- package/lib/browser/common/fn/configuration.js +0 -13
- package/lib/browser/common/fn/configuration.js.map +0 -1
- package/lib/browser/common/fn/constant.js +0 -8
- package/lib/browser/common/fn/constant.js.map +0 -1
- package/lib/browser/common/fn/inject.js +0 -13
- package/lib/browser/common/fn/inject.js.map +0 -1
- package/lib/browser/common/fn/injectMany.js +0 -9
- package/lib/browser/common/fn/injectMany.js.map +0 -1
- package/lib/browser/common/fn/injectable.js +0 -8
- package/lib/browser/common/fn/injectable.js.map +0 -1
- package/lib/browser/common/fn/injector.js +0 -13
- package/lib/browser/common/fn/injector.js.map +0 -1
- package/lib/browser/common/fn/lazyInject.js +0 -23
- package/lib/browser/common/fn/lazyInject.js.map +0 -1
- package/lib/browser/common/fn/localsContainer.js +0 -29
- package/lib/browser/common/fn/localsContainer.js.map +0 -1
- package/lib/browser/common/fn/logger.js +0 -8
- package/lib/browser/common/fn/logger.js.map +0 -1
- package/lib/browser/common/fn/refValue.js +0 -15
- package/lib/browser/common/fn/refValue.js.map +0 -1
- package/lib/browser/common/index.js +0 -115
- package/lib/browser/common/index.js.map +0 -1
- package/lib/browser/common/registries/GlobalProviders.js +0 -102
- package/lib/browser/common/registries/GlobalProviders.js.map +0 -1
- package/lib/browser/common/registries/ProviderRegistry.js +0 -8
- package/lib/browser/common/registries/ProviderRegistry.js.map +0 -1
- package/lib/browser/common/services/DIConfiguration.js +0 -99
- package/lib/browser/common/services/DIConfiguration.js.map +0 -1
- package/lib/browser/common/services/DILogger.js +0 -8
- package/lib/browser/common/services/DILogger.js.map +0 -1
- package/lib/browser/common/services/InjectorService.js +0 -378
- package/lib/browser/common/services/InjectorService.js.map +0 -1
- package/lib/browser/common/utils/colors.js +0 -5
- package/lib/browser/common/utils/colors.js.map +0 -1
- package/lib/browser/common/utils/createContainer.js +0 -10
- package/lib/browser/common/utils/createContainer.js.map +0 -1
- package/lib/browser/common/utils/discoverHooks.js +0 -17
- package/lib/browser/common/utils/discoverHooks.js.map +0 -1
- package/lib/browser/common/utils/getConfiguration.js +0 -20
- package/lib/browser/common/utils/getConfiguration.js.map +0 -1
- package/lib/browser/common/utils/getConstructorDependencies.js +0 -12
- package/lib/browser/common/utils/getConstructorDependencies.js.map +0 -1
- package/lib/browser/common/utils/providerBuilder.js +0 -8
- package/lib/browser/common/utils/providerBuilder.js.map +0 -1
- package/lib/esm/common/constants/constants.js.map +0 -1
- package/lib/esm/common/decorators/autoInjectable.js.map +0 -1
- package/lib/esm/common/decorators/configuration.js.map +0 -1
- package/lib/esm/common/decorators/constant.js.map +0 -1
- package/lib/esm/common/decorators/controller.js.map +0 -1
- package/lib/esm/common/decorators/inject.js.map +0 -1
- package/lib/esm/common/decorators/injectable.js.map +0 -1
- package/lib/esm/common/decorators/intercept.js.map +0 -1
- package/lib/esm/common/decorators/interceptor.js.map +0 -1
- package/lib/esm/common/decorators/lazyInject.js.map +0 -1
- package/lib/esm/common/decorators/module.js.map +0 -1
- package/lib/esm/common/decorators/opts.js.map +0 -1
- package/lib/esm/common/decorators/overrideProvider.js.map +0 -1
- package/lib/esm/common/decorators/scope.js.map +0 -1
- package/lib/esm/common/decorators/service.js.map +0 -1
- package/lib/esm/common/decorators/useOpts.js.map +0 -1
- package/lib/esm/common/decorators/value.js.map +0 -1
- package/lib/esm/common/domain/Container.js.map +0 -1
- package/lib/esm/common/domain/ControllerProvider.js.map +0 -1
- package/lib/esm/common/domain/InjectablePropertyType.js.map +0 -1
- package/lib/esm/common/domain/LocalsContainer.js.map +0 -1
- package/lib/esm/common/domain/Provider.js.map +0 -1
- package/lib/esm/common/domain/ProviderScope.js.map +0 -1
- package/lib/esm/common/domain/ProviderType.js.map +0 -1
- package/lib/esm/common/errors/InjectionError.js.map +0 -1
- package/lib/esm/common/errors/InvalidPropertyTokenError.js.map +0 -1
- package/lib/esm/common/fn/configuration.js.map +0 -1
- package/lib/esm/common/fn/constant.js.map +0 -1
- package/lib/esm/common/fn/inject.js.map +0 -1
- package/lib/esm/common/fn/injectMany.js.map +0 -1
- package/lib/esm/common/fn/injectable.js.map +0 -1
- package/lib/esm/common/fn/injector.js.map +0 -1
- package/lib/esm/common/fn/lazyInject.js.map +0 -1
- package/lib/esm/common/fn/localsContainer.js.map +0 -1
- package/lib/esm/common/fn/logger.js.map +0 -1
- package/lib/esm/common/fn/refValue.js.map +0 -1
- package/lib/esm/common/index.js.map +0 -1
- package/lib/esm/common/interfaces/DIConfigurationOptions.js.map +0 -1
- package/lib/esm/common/interfaces/DILogger.js.map +0 -1
- package/lib/esm/common/interfaces/DILoggerOptions.js.map +0 -1
- package/lib/esm/common/interfaces/ImportTokenProviderOpts.js.map +0 -1
- package/lib/esm/common/interfaces/InterceptorContext.js.map +0 -1
- package/lib/esm/common/interfaces/InterceptorMethods.js.map +0 -1
- package/lib/esm/common/interfaces/InvokeOptions.js.map +0 -1
- package/lib/esm/common/interfaces/OnDestroy.js.map +0 -1
- package/lib/esm/common/interfaces/OnInit.js.map +0 -1
- package/lib/esm/common/interfaces/ProviderOpts.js.map +0 -1
- package/lib/esm/common/interfaces/RegistrySettings.js.map +0 -1
- package/lib/esm/common/interfaces/ResolvedInvokeOptions.js.map +0 -1
- package/lib/esm/common/interfaces/TokenProvider.js.map +0 -1
- package/lib/esm/common/interfaces/TokenRoute.js.map +0 -1
- package/lib/esm/common/registries/GlobalProviders.js.map +0 -1
- package/lib/esm/common/registries/ProviderRegistry.js.map +0 -1
- package/lib/esm/common/services/DIConfiguration.js.map +0 -1
- package/lib/esm/common/services/DILogger.js.map +0 -1
- package/lib/esm/common/services/InjectorService.js.map +0 -1
- package/lib/esm/common/utils/colors.js.map +0 -1
- package/lib/esm/common/utils/createContainer.js.map +0 -1
- package/lib/esm/common/utils/discoverHooks.js.map +0 -1
- package/lib/esm/common/utils/getConfiguration.js.map +0 -1
- package/lib/esm/common/utils/getConstructorDependencies.js.map +0 -1
- package/lib/esm/common/utils/providerBuilder.js.map +0 -1
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/node/decorators/injectContext.js.map +0 -1
- package/lib/esm/node/domain/ContextLogger.js.map +0 -1
- package/lib/esm/node/domain/DIContext.js.map +0 -1
- package/lib/esm/node/fn/context.js.map +0 -1
- package/lib/esm/node/fn/contextLogger.js.map +0 -1
- package/lib/esm/node/index.js.map +0 -1
- package/lib/esm/node/interfaces/AlterRunInContext.js.map +0 -1
- package/lib/esm/node/services/DILogger.js.map +0 -1
- package/lib/esm/node/services/DITest.js.map +0 -1
- package/lib/esm/node/utils/asyncHookContext.js.map +0 -1
- package/lib/esm/node/utils/attachLogger.js.map +0 -1
- package/lib/esm/node/utils/setLoggerConfiguration.js.map +0 -1
- package/lib/esm/node/utils/setLoggerFormat.js.map +0 -1
- package/lib/esm/node/utils/setLoggerLevel.js.map +0 -1
- package/src/common/constants/constants.ts +0 -5
- package/src/common/decorators/autoInjectable.spec.ts +0 -135
- package/src/common/decorators/autoInjectable.ts +0 -60
- package/src/common/decorators/configuration.spec.ts +0 -45
- package/src/common/decorators/configuration.ts +0 -36
- package/src/common/decorators/constant.spec.ts +0 -67
- package/src/common/decorators/constant.ts +0 -73
- package/src/common/decorators/controller.spec.ts +0 -43
- package/src/common/decorators/controller.ts +0 -73
- package/src/common/decorators/inject.spec.ts +0 -298
- package/src/common/decorators/inject.ts +0 -150
- package/src/common/decorators/injectable.spec.ts +0 -43
- package/src/common/decorators/injectable.ts +0 -30
- package/src/common/decorators/intercept.spec.ts +0 -150
- package/src/common/decorators/intercept.ts +0 -89
- package/src/common/decorators/interceptor.ts +0 -17
- package/src/common/decorators/lazyInject.spec.ts +0 -53
- package/src/common/decorators/lazyInject.ts +0 -92
- package/src/common/decorators/module.ts +0 -52
- package/src/common/decorators/opts.ts +0 -51
- package/src/common/decorators/overrideProvider.spec.ts +0 -30
- package/src/common/decorators/overrideProvider.ts +0 -15
- package/src/common/decorators/scope.spec.ts +0 -25
- package/src/common/decorators/scope.ts +0 -13
- package/src/common/decorators/service.ts +0 -14
- package/src/common/decorators/useOpts.spec.ts +0 -90
- package/src/common/decorators/useOpts.ts +0 -64
- package/src/common/decorators/value.spec.ts +0 -59
- package/src/common/decorators/value.ts +0 -60
- package/src/common/domain/Container.spec.ts +0 -85
- package/src/common/domain/Container.ts +0 -80
- package/src/common/domain/ControllerProvider.spec.ts +0 -55
- package/src/common/domain/ControllerProvider.ts +0 -48
- package/src/common/domain/InjectablePropertyType.ts +0 -7
- package/src/common/domain/LocalsContainer.spec.ts +0 -20
- package/src/common/domain/LocalsContainer.ts +0 -11
- package/src/common/domain/Provider.spec.ts +0 -107
- package/src/common/domain/Provider.ts +0 -218
- package/src/common/domain/ProviderScope.ts +0 -5
- package/src/common/domain/ProviderType.ts +0 -8
- package/src/common/errors/InjectionError.spec.ts +0 -17
- package/src/common/errors/InjectionError.ts +0 -71
- package/src/common/errors/InvalidPropertyTokenError.ts +0 -14
- package/src/common/fn/configuration.spec.ts +0 -42
- package/src/common/fn/configuration.ts +0 -22
- package/src/common/fn/constant.spec.ts +0 -37
- package/src/common/fn/constant.ts +0 -7
- package/src/common/fn/inject.spec.ts +0 -54
- package/src/common/fn/inject.ts +0 -32
- package/src/common/fn/injectMany.ts +0 -16
- package/src/common/fn/injectable.spec.ts +0 -88
- package/src/common/fn/injectable.ts +0 -15
- package/src/common/fn/injector.ts +0 -26
- package/src/common/fn/lazyInject.spec.ts +0 -22
- package/src/common/fn/lazyInject.ts +0 -36
- package/src/common/fn/localsContainer.ts +0 -55
- package/src/common/fn/logger.ts +0 -8
- package/src/common/fn/refValue.spec.ts +0 -47
- package/src/common/fn/refValue.ts +0 -33
- package/src/common/index.ts +0 -64
- package/src/common/integration/async-factory.spec.ts +0 -60
- package/src/common/integration/di.spec.ts +0 -153
- package/src/common/integration/imports.spec.ts +0 -39
- package/src/common/integration/request.spec.ts +0 -79
- package/src/common/integration/singleton.spec.ts +0 -125
- package/src/common/interfaces/DIConfigurationOptions.ts +0 -29
- package/src/common/interfaces/DILogger.ts +0 -13
- package/src/common/interfaces/DILoggerOptions.ts +0 -54
- package/src/common/interfaces/ImportTokenProviderOpts.ts +0 -29
- package/src/common/interfaces/InterceptorContext.ts +0 -13
- package/src/common/interfaces/InterceptorMethods.ts +0 -5
- package/src/common/interfaces/InvokeOptions.ts +0 -28
- package/src/common/interfaces/OnDestroy.ts +0 -3
- package/src/common/interfaces/OnInit.ts +0 -3
- package/src/common/interfaces/ProviderOpts.ts +0 -57
- package/src/common/interfaces/RegistrySettings.ts +0 -11
- package/src/common/interfaces/ResolvedInvokeOptions.ts +0 -14
- package/src/common/interfaces/TokenProvider.ts +0 -8
- package/src/common/interfaces/TokenRoute.ts +0 -6
- package/src/common/registries/GlobalProviders.spec.ts +0 -94
- package/src/common/registries/GlobalProviders.ts +0 -132
- package/src/common/registries/ProviderRegistry.spec.ts +0 -36
- package/src/common/registries/ProviderRegistry.ts +0 -32
- package/src/common/services/DIConfiguration.spec.ts +0 -60
- package/src/common/services/DIConfiguration.ts +0 -142
- package/src/common/services/DILogger.spec.ts +0 -22
- package/src/common/services/DILogger.ts +0 -8
- package/src/common/services/InjectorService.spec.ts +0 -793
- package/src/common/services/InjectorService.ts +0 -612
- package/src/common/utils/colors.spec.ts +0 -9
- package/src/common/utils/colors.ts +0 -11
- package/src/common/utils/createContainer.spec.ts +0 -18
- package/src/common/utils/createContainer.ts +0 -14
- package/src/common/utils/discoverHooks.ts +0 -16
- package/src/common/utils/getConfiguration.spec.ts +0 -40
- package/src/common/utils/getConfiguration.ts +0 -21
- package/src/common/utils/getConstructorDependencies.ts +0 -9
- package/src/common/utils/providerBuilder.ts +0 -95
- package/src/index.ts +0 -2
- package/src/node/decorators/injectContext.spec.ts +0 -60
- package/src/node/decorators/injectContext.ts +0 -29
- package/src/node/domain/ContextLogger.spec.ts +0 -400
- package/src/node/domain/ContextLogger.ts +0 -155
- package/src/node/domain/DIContext.spec.ts +0 -105
- package/src/node/domain/DIContext.ts +0 -115
- package/src/node/fn/context.ts +0 -24
- package/src/node/fn/contextLogger.spec.ts +0 -47
- package/src/node/fn/contextLogger.ts +0 -9
- package/src/node/index.ts +0 -16
- package/src/node/integration/async-factory-invoke.spec.ts +0 -58
- package/src/node/integration/inject-context.spec.ts +0 -29
- package/src/node/integration/invoke-oninit.spec.ts +0 -25
- package/src/node/interfaces/AlterRunInContext.ts +0 -3
- package/src/node/services/DILogger.spec.ts +0 -24
- package/src/node/services/DILogger.ts +0 -6
- package/src/node/services/DITest.spec.ts +0 -109
- package/src/node/services/DITest.ts +0 -122
- package/src/node/utils/asyncHookContext.spec.ts +0 -147
- package/src/node/utils/asyncHookContext.ts +0 -48
- package/src/node/utils/attachLogger.spec.ts +0 -14
- package/src/node/utils/attachLogger.ts +0 -7
- package/src/node/utils/setLoggerConfiguration.spec.ts +0 -43
- package/src/node/utils/setLoggerConfiguration.ts +0 -7
- package/src/node/utils/setLoggerFormat.ts +0 -33
- package/src/node/utils/setLoggerLevel.ts +0 -12
- package/vite.config.mts +0 -45
- package/vitest.config.mts +0 -21
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import {DecoratorTypes} from "@tsed/core/types/DecoratorTypes.js";
|
|
2
|
-
import {Metadata} from "@tsed/core/types/Metadata.js";
|
|
3
|
-
import {Store} from "@tsed/core/types/Store.js";
|
|
4
|
-
import {type Type} from "@tsed/core/types/Type.js";
|
|
5
|
-
import {catchError} from "@tsed/core/utils/catchError.js";
|
|
6
|
-
import {decoratorTypeOf} from "@tsed/core/utils/decoratorTypeOf.js";
|
|
7
|
-
import {isPromise} from "@tsed/core/utils/isPromise.js";
|
|
8
|
-
|
|
9
|
-
import {DI_INJECTABLE_PROPS, DI_INVOKE_OPTIONS, DI_USE_OPTIONS} from "../constants/constants.js";
|
|
10
|
-
import {InvalidPropertyTokenError} from "../errors/InvalidPropertyTokenError.js";
|
|
11
|
-
import {inject} from "../fn/inject.js";
|
|
12
|
-
import {injectMany} from "../fn/injectMany.js";
|
|
13
|
-
import type {InvokeOptions} from "../interfaces/InvokeOptions.js";
|
|
14
|
-
import {TokenProvider} from "../interfaces/TokenProvider.js";
|
|
15
|
-
import {getConstructorDependencies, setConstructorDependencies} from "../utils/getConstructorDependencies.js";
|
|
16
|
-
|
|
17
|
-
function setToken(
|
|
18
|
-
token: TokenProvider,
|
|
19
|
-
{
|
|
20
|
-
target,
|
|
21
|
-
propertyKey,
|
|
22
|
-
parameterIndex
|
|
23
|
-
}: {
|
|
24
|
-
target: any;
|
|
25
|
-
propertyKey: string | symbol | undefined;
|
|
26
|
-
parameterIndex: number;
|
|
27
|
-
}
|
|
28
|
-
) {
|
|
29
|
-
const paramTypes = getConstructorDependencies(target, propertyKey);
|
|
30
|
-
const type = paramTypes[parameterIndex];
|
|
31
|
-
|
|
32
|
-
paramTypes[parameterIndex] = type === Array ? [token] : token;
|
|
33
|
-
|
|
34
|
-
Metadata.setParamTypes(target, propertyKey!, paramTypes);
|
|
35
|
-
setConstructorDependencies(target, paramTypes);
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function getTokenType(token: TokenProvider | (() => TokenProvider) | undefined, target: any, propertyKey: string | symbol) {
|
|
39
|
-
const useType = token || Metadata.getType(target, propertyKey);
|
|
40
|
-
|
|
41
|
-
if (useType === Object) {
|
|
42
|
-
throw new InvalidPropertyTokenError(target, String(propertyKey));
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
return useType;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
export type TransformInjectedProviderCB<T, Klass = any> = (
|
|
49
|
-
instance: T,
|
|
50
|
-
{target, propertyKey}: {self: Klass; target: Type<Klass>; propertyKey: symbol | string}
|
|
51
|
-
) => unknown;
|
|
52
|
-
|
|
53
|
-
export interface BindInjectablePropertyOpts<T = any> {
|
|
54
|
-
token?: TokenProvider;
|
|
55
|
-
useOpts?: Record<string, unknown>;
|
|
56
|
-
transform?: TransformInjectedProviderCB<T>;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
function bindInjectableProperty<T = any>(
|
|
60
|
-
target: any,
|
|
61
|
-
propertyKey: string | symbol,
|
|
62
|
-
{token, transform = (o) => o, useOpts}: BindInjectablePropertyOpts<T>
|
|
63
|
-
) {
|
|
64
|
-
const symbol = Symbol();
|
|
65
|
-
|
|
66
|
-
if (!target[DI_INJECTABLE_PROPS]) {
|
|
67
|
-
Reflect.defineProperty(target, DI_INJECTABLE_PROPS, {
|
|
68
|
-
value: new Set(),
|
|
69
|
-
enumerable: false,
|
|
70
|
-
configurable: false
|
|
71
|
-
});
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
target[DI_INJECTABLE_PROPS].add(propertyKey);
|
|
75
|
-
|
|
76
|
-
catchError(() => Reflect.deleteProperty(target, propertyKey));
|
|
77
|
-
Reflect.defineProperty(target, propertyKey, {
|
|
78
|
-
get() {
|
|
79
|
-
const useType = getTokenType(token, target, propertyKey!);
|
|
80
|
-
const originalType = Metadata.getType(target, propertyKey);
|
|
81
|
-
|
|
82
|
-
const invokeOpts: Partial<InvokeOptions> = {
|
|
83
|
-
rebuild: !!this[DI_INVOKE_OPTIONS]?.rebuild,
|
|
84
|
-
locals: this[DI_INVOKE_OPTIONS]?.locals,
|
|
85
|
-
useOpts: useOpts || Store.from(target, propertyKey).get(DI_USE_OPTIONS)
|
|
86
|
-
};
|
|
87
|
-
|
|
88
|
-
if (this[symbol] === undefined) {
|
|
89
|
-
this[symbol] = originalType === Array ? injectMany(token as string, invokeOpts) : inject(useType, invokeOpts);
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
[].concat(this[symbol]).forEach((instance: any, index) => {
|
|
93
|
-
if (isPromise(this[symbol])) {
|
|
94
|
-
instance.then((result: any) => {
|
|
95
|
-
this[symbol]![index] = result;
|
|
96
|
-
if (originalType !== Array) {
|
|
97
|
-
this[symbol] = result;
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
}
|
|
101
|
-
});
|
|
102
|
-
|
|
103
|
-
return transform(this[symbol], {self: this, target, propertyKey});
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
/**
|
|
109
|
-
* Inject a provider to another provider.
|
|
110
|
-
*
|
|
111
|
-
* Use this decorator to inject a custom provider on constructor parameter or property.
|
|
112
|
-
*
|
|
113
|
-
* ```typescript
|
|
114
|
-
* @Injectable()
|
|
115
|
-
* export class MyService {
|
|
116
|
-
* @Inject(CONNECTION)
|
|
117
|
-
* connection: CONNECTION;
|
|
118
|
-
* }
|
|
119
|
-
* ```
|
|
120
|
-
*
|
|
121
|
-
* @param token A token provider or token provider group
|
|
122
|
-
* @param transform
|
|
123
|
-
* @returns {Function}
|
|
124
|
-
* @decorator
|
|
125
|
-
*/
|
|
126
|
-
export function Inject<T = any>(token?: TokenProvider<T> | (() => TokenProvider<T>), transform?: TransformInjectedProviderCB<T>): any;
|
|
127
|
-
export function Inject<T = any>(
|
|
128
|
-
token?: TokenProvider<T> | (() => TokenProvider<T>),
|
|
129
|
-
opts?: Partial<Omit<BindInjectablePropertyOpts<T>, "token">>
|
|
130
|
-
): any;
|
|
131
|
-
export function Inject<T = any>(
|
|
132
|
-
token?: TokenProvider<T> | (() => TokenProvider<T>),
|
|
133
|
-
opts: TransformInjectedProviderCB<T> | Partial<Omit<BindInjectablePropertyOpts<T>, "token">> = {}
|
|
134
|
-
) {
|
|
135
|
-
opts = typeof opts === "function" ? {transform: opts} : opts;
|
|
136
|
-
|
|
137
|
-
return (target: any, propertyKey: string | symbol | undefined, index?: number) => {
|
|
138
|
-
const bindingType = decoratorTypeOf([target, propertyKey, index]);
|
|
139
|
-
|
|
140
|
-
switch (bindingType) {
|
|
141
|
-
case DecoratorTypes.PARAM_CTOR:
|
|
142
|
-
if (token) {
|
|
143
|
-
setToken(token, {target, propertyKey, parameterIndex: index!});
|
|
144
|
-
}
|
|
145
|
-
break;
|
|
146
|
-
case DecoratorTypes.PROP:
|
|
147
|
-
bindInjectableProperty(target, propertyKey!, {...opts, token});
|
|
148
|
-
}
|
|
149
|
-
};
|
|
150
|
-
}
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
import {GlobalProviders} from "../registries/GlobalProviders.js";
|
|
2
|
-
import {Injectable} from "./injectable.js";
|
|
3
|
-
|
|
4
|
-
describe("@Injectable()", () => {
|
|
5
|
-
afterEach(() => {
|
|
6
|
-
vi.resetAllMocks();
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
it("should call `registerProvider` setting `token` according to the target class", () => {
|
|
10
|
-
// GIVEN
|
|
11
|
-
class Test {}
|
|
12
|
-
|
|
13
|
-
// WHEN
|
|
14
|
-
Injectable()(Test);
|
|
15
|
-
|
|
16
|
-
// THEN
|
|
17
|
-
expect(GlobalProviders.get(Test)?.useClass).toEqual(Test);
|
|
18
|
-
});
|
|
19
|
-
|
|
20
|
-
it("should call `registerProvider` passing an additional options", () => {
|
|
21
|
-
// GIVEN
|
|
22
|
-
class Test {}
|
|
23
|
-
|
|
24
|
-
// WHEN
|
|
25
|
-
Injectable({options: "options"})(Test);
|
|
26
|
-
|
|
27
|
-
// THEN
|
|
28
|
-
expect(GlobalProviders.get(Test)?.useClass).toEqual(Test);
|
|
29
|
-
expect(GlobalProviders.get(Test)?.options).toEqual("options");
|
|
30
|
-
});
|
|
31
|
-
|
|
32
|
-
it("should override `token`", () => {
|
|
33
|
-
// GIVEN
|
|
34
|
-
class Test {}
|
|
35
|
-
const token = "custom";
|
|
36
|
-
|
|
37
|
-
// WHEN
|
|
38
|
-
Injectable({token})(Test);
|
|
39
|
-
|
|
40
|
-
// THEN
|
|
41
|
-
expect(GlobalProviders.get("custom")?.useClass).toEqual(Test);
|
|
42
|
-
});
|
|
43
|
-
});
|
|
@@ -1,30 +0,0 @@
|
|
|
1
|
-
import {injectable} from "../fn/injectable.js";
|
|
2
|
-
import type {ProviderOpts} from "../interfaces/ProviderOpts.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* The decorators `@Injectable()` declare a new service can be injected in other service, controller, interceptor, etc.. on there `constructor`.
|
|
6
|
-
* All classes annotated with `@Injectable()` are built one time, excepted if you change the default provider configuration.
|
|
7
|
-
*
|
|
8
|
-
* ::: tip
|
|
9
|
-
* `@Injectable()` use the `reflect-metadata` to collect and inject the built provided to other services.
|
|
10
|
-
* :::
|
|
11
|
-
*
|
|
12
|
-
* ### Options
|
|
13
|
-
*
|
|
14
|
-
* - type (@@ProviderType@@ or `string`): Kind of provider. (Default: `ProviderType.PROVIDER`)
|
|
15
|
-
* - scope (@@ProviderScope@@): Kind of provider. (Default: `ProviderScope.SINGLETON`)
|
|
16
|
-
* - token (@@TokenProvider@@): An injection token (Note: This option override default metadata generated by Typescript).
|
|
17
|
-
* - deps (`Type<any>`): List of class or provider which will be injected to the constructor (Note: This options override default metadata generated by Typescript).
|
|
18
|
-
*
|
|
19
|
-
* @returns {Function}
|
|
20
|
-
* @decorator
|
|
21
|
-
*/
|
|
22
|
-
export function Injectable(options: Partial<ProviderOpts> = {}): ClassDecorator {
|
|
23
|
-
return (target: any) => {
|
|
24
|
-
const opts = {
|
|
25
|
-
...options,
|
|
26
|
-
...(options.token ? {useClass: target} : {token: target})
|
|
27
|
-
};
|
|
28
|
-
injectable(opts.token, opts);
|
|
29
|
-
};
|
|
30
|
-
}
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
import {catchError, classOf, nameOf} from "@tsed/core";
|
|
2
|
-
|
|
3
|
-
import {DITest} from "../../node/index.js";
|
|
4
|
-
import {InterceptorContext} from "../interfaces/InterceptorContext.js";
|
|
5
|
-
import {InterceptorMethods} from "../interfaces/InterceptorMethods.js";
|
|
6
|
-
import {getInterceptorOptions, Intercept} from "./intercept.js";
|
|
7
|
-
import {Interceptor} from "./interceptor.js";
|
|
8
|
-
import {Service} from "./service.js";
|
|
9
|
-
|
|
10
|
-
@Interceptor()
|
|
11
|
-
class MyInterceptor implements InterceptorMethods {
|
|
12
|
-
intercept(context: InterceptorContext<any>) {
|
|
13
|
-
const r = typeof context.args[0] === "string" ? undefined : new Error(`Error message`);
|
|
14
|
-
const retValue = context.next(r);
|
|
15
|
-
|
|
16
|
-
expect(nameOf(context.target)).toContain("Service");
|
|
17
|
-
|
|
18
|
-
return `${retValue} - ${context.options || ""} - intercepted 1`;
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
@Interceptor()
|
|
23
|
-
class MyInterceptor2 implements InterceptorMethods {
|
|
24
|
-
intercept(context: InterceptorContext<any>) {
|
|
25
|
-
const r = typeof context.args[0] === "string" ? undefined : new Error(`Error message`);
|
|
26
|
-
const retValue = context.next(r);
|
|
27
|
-
|
|
28
|
-
return `${retValue} - ${context.options || ""} - intercepted 2`;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
@Service()
|
|
33
|
-
class ServiceTest {
|
|
34
|
-
@Intercept(MyInterceptor, "options data")
|
|
35
|
-
exec(param: string) {
|
|
36
|
-
return `Original data - ${param}`;
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
@Intercept(MyInterceptor, "options data")
|
|
40
|
-
@Intercept(MyInterceptor2, "options data")
|
|
41
|
-
chained(param: string) {
|
|
42
|
-
return `Chained - ${param}`;
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
@Intercept(MyInterceptor2, "options data")
|
|
46
|
-
@Intercept(MyInterceptor, "options data")
|
|
47
|
-
reverseChained(param: string) {
|
|
48
|
-
return `Chained - ${param}`;
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
@Service()
|
|
53
|
-
@Intercept(MyInterceptor, "options data")
|
|
54
|
-
class ServiceTest2 {
|
|
55
|
-
exec(param: string) {
|
|
56
|
-
return `Original data - ${param}`;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
describe("@Intercept", () => {
|
|
61
|
-
beforeEach(() => DITest.create());
|
|
62
|
-
afterEach(() => DITest.reset());
|
|
63
|
-
|
|
64
|
-
describe("when the decorator is used on a method", () => {
|
|
65
|
-
it("should intercept the method", async () => {
|
|
66
|
-
// GIVEN
|
|
67
|
-
const serviceTest = await DITest.invoke<ServiceTest>(ServiceTest)!;
|
|
68
|
-
|
|
69
|
-
// WHEN
|
|
70
|
-
const result = serviceTest.exec("param data");
|
|
71
|
-
|
|
72
|
-
expect(getInterceptorOptions(ServiceTest, "exec")).toEqual("options data");
|
|
73
|
-
|
|
74
|
-
// THEN
|
|
75
|
-
expect(result).toEqual("Original data - param data - options data - intercepted 1");
|
|
76
|
-
});
|
|
77
|
-
it("should chained interceptor", async () => {
|
|
78
|
-
// GIVEN
|
|
79
|
-
const serviceTest = await DITest.invoke<ServiceTest>(ServiceTest)!;
|
|
80
|
-
|
|
81
|
-
// WHEN
|
|
82
|
-
const result = serviceTest.chained("param data");
|
|
83
|
-
|
|
84
|
-
expect(getInterceptorOptions(ServiceTest, "chained")).toEqual("options data");
|
|
85
|
-
|
|
86
|
-
// THEN
|
|
87
|
-
expect(result).toEqual("Chained - param data - options data - intercepted 2 - options data - intercepted 1");
|
|
88
|
-
});
|
|
89
|
-
it("should chained interceptor (reversed)", async () => {
|
|
90
|
-
// GIVEN
|
|
91
|
-
const serviceTest = await DITest.invoke<ServiceTest>(ServiceTest)!;
|
|
92
|
-
|
|
93
|
-
// WHEN
|
|
94
|
-
const result = serviceTest.reverseChained("param data");
|
|
95
|
-
|
|
96
|
-
expect(getInterceptorOptions(ServiceTest, "reverseChained")).toEqual("options data");
|
|
97
|
-
|
|
98
|
-
// THEN
|
|
99
|
-
expect(result).toEqual("Chained - param data - options data - intercepted 1 - options data - intercepted 2");
|
|
100
|
-
});
|
|
101
|
-
it("should intercept the method and mock interceptor", async () => {
|
|
102
|
-
// GIVEN
|
|
103
|
-
const serviceTest = await DITest.invoke<ServiceTest>(ServiceTest, [
|
|
104
|
-
{
|
|
105
|
-
token: MyInterceptor,
|
|
106
|
-
use: {
|
|
107
|
-
intercept: vi.fn().mockReturnValue("intercepted")
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
]);
|
|
111
|
-
|
|
112
|
-
// WHEN
|
|
113
|
-
const result = serviceTest.exec("param data");
|
|
114
|
-
|
|
115
|
-
// THEN
|
|
116
|
-
expect(result).toEqual("intercepted");
|
|
117
|
-
});
|
|
118
|
-
it("should intercept the method and throw error", async () => {
|
|
119
|
-
// GIVEN
|
|
120
|
-
const serviceTest = await DITest.invoke<ServiceTest>(ServiceTest)!;
|
|
121
|
-
|
|
122
|
-
// WHEN
|
|
123
|
-
let actualError = catchError(() => serviceTest.exec({} as any));
|
|
124
|
-
|
|
125
|
-
// THEN
|
|
126
|
-
expect(actualError?.message).toEqual("Error message");
|
|
127
|
-
});
|
|
128
|
-
});
|
|
129
|
-
describe("when the decorator is used on a class", () => {
|
|
130
|
-
it("should intercept the method", async () => {
|
|
131
|
-
// GIVEN
|
|
132
|
-
const serviceTest = await DITest.invoke<ServiceTest2>(ServiceTest2)!;
|
|
133
|
-
|
|
134
|
-
// WHEN
|
|
135
|
-
const result = serviceTest.exec("param data");
|
|
136
|
-
|
|
137
|
-
// THEN
|
|
138
|
-
expect(result).toEqual("Original data - param data - options data - intercepted 1");
|
|
139
|
-
});
|
|
140
|
-
it("should intercept the method and throw error", async () => {
|
|
141
|
-
// GIVEN
|
|
142
|
-
const serviceTest = await DITest.invoke<ServiceTest2>(ServiceTest2)!;
|
|
143
|
-
|
|
144
|
-
// WHEN
|
|
145
|
-
let actualError = catchError(() => serviceTest.exec({} as any));
|
|
146
|
-
// THEN
|
|
147
|
-
expect(actualError?.message).toEqual("Error message");
|
|
148
|
-
});
|
|
149
|
-
});
|
|
150
|
-
});
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import {DecoratorParameters} from "@tsed/core/types/DecoratorParameters.js";
|
|
2
|
-
import {DecoratorTypes} from "@tsed/core/types/DecoratorTypes.js";
|
|
3
|
-
import {Store} from "@tsed/core/types/Store.js";
|
|
4
|
-
import {Type} from "@tsed/core/types/Type.js";
|
|
5
|
-
import {classOf} from "@tsed/core/utils/classOf.js";
|
|
6
|
-
import {decorateMethodsOf} from "@tsed/core/utils/decorateMethodsOf.js";
|
|
7
|
-
import {decoratorTypeOf} from "@tsed/core/utils/decoratorTypeOf.js";
|
|
8
|
-
import {nameOf} from "@tsed/core/utils/nameOf.js";
|
|
9
|
-
|
|
10
|
-
import {DI_INTERCEPTOR_OPTIONS, DI_INVOKE_OPTIONS} from "../constants/constants.js";
|
|
11
|
-
import {inject} from "../fn/inject.js";
|
|
12
|
-
import type {InterceptorContext} from "../interfaces/InterceptorContext.js";
|
|
13
|
-
import type {InterceptorMethods} from "../interfaces/InterceptorMethods.js";
|
|
14
|
-
import type {InvokeOptions} from "../interfaces/InvokeOptions.js";
|
|
15
|
-
import type {TokenProvider} from "../interfaces/TokenProvider.js";
|
|
16
|
-
|
|
17
|
-
export function getInterceptorOptions<T>(target: Type<any>, propertyKey: string | symbol) {
|
|
18
|
-
return Store.fromMethod(target, propertyKey).get(DI_INTERCEPTOR_OPTIONS) as T;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
export function bindIntercept(target: any, propertyKey: string | symbol, token: TokenProvider, options: Record<string, unknown>) {
|
|
22
|
-
const klass = classOf(target);
|
|
23
|
-
const descriptor = Reflect.getOwnPropertyDescriptor(klass.prototype, propertyKey);
|
|
24
|
-
const originalMethod = descriptor!.value;
|
|
25
|
-
const symbol = Symbol();
|
|
26
|
-
|
|
27
|
-
Store.fromMethod(klass, propertyKey).set(DI_INTERCEPTOR_OPTIONS, options);
|
|
28
|
-
|
|
29
|
-
function newMethod(...args: any[]) {
|
|
30
|
-
const next = (err?: Error) => {
|
|
31
|
-
if (!err) {
|
|
32
|
-
return originalMethod.apply(this, args);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
throw err;
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
const context: InterceptorContext<any> = {
|
|
39
|
-
target: klass,
|
|
40
|
-
propertyKey,
|
|
41
|
-
args,
|
|
42
|
-
options,
|
|
43
|
-
next
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
const invokeOpts: Partial<InvokeOptions> = {
|
|
47
|
-
rebuild: !!this[DI_INVOKE_OPTIONS]?.rebuild,
|
|
48
|
-
locals: this[DI_INVOKE_OPTIONS]?.locals
|
|
49
|
-
};
|
|
50
|
-
|
|
51
|
-
this[symbol] = this[symbol] || inject(token, invokeOpts)!;
|
|
52
|
-
|
|
53
|
-
return this[symbol].intercept!(
|
|
54
|
-
{
|
|
55
|
-
...context,
|
|
56
|
-
options
|
|
57
|
-
},
|
|
58
|
-
next
|
|
59
|
-
);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
descriptor!.value = newMethod;
|
|
63
|
-
|
|
64
|
-
Reflect.deleteProperty(klass.prototype, propertyKey);
|
|
65
|
-
Reflect.defineProperty(klass.prototype, propertyKey, descriptor!);
|
|
66
|
-
|
|
67
|
-
return descriptor;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
/**
|
|
71
|
-
* Attaches interceptor to method call and executes the before and after methods
|
|
72
|
-
*
|
|
73
|
-
* @param interceptor
|
|
74
|
-
* @param options
|
|
75
|
-
* @decorator
|
|
76
|
-
*/
|
|
77
|
-
export function Intercept<T extends InterceptorMethods>(interceptor: Type<T>, options?: any): any {
|
|
78
|
-
return (...args: DecoratorParameters) => {
|
|
79
|
-
const [target, propertyKey] = args;
|
|
80
|
-
const type = decoratorTypeOf(args);
|
|
81
|
-
switch (type) {
|
|
82
|
-
case DecoratorTypes.CLASS:
|
|
83
|
-
decorateMethodsOf(target, Intercept(interceptor, options));
|
|
84
|
-
break;
|
|
85
|
-
case DecoratorTypes.METHOD:
|
|
86
|
-
return bindIntercept(target, propertyKey, interceptor, options);
|
|
87
|
-
}
|
|
88
|
-
};
|
|
89
|
-
}
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import {ProviderType} from "../domain/ProviderType.js";
|
|
2
|
-
import {Injectable} from "./injectable.js";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* The decorators `@Interceptor()` declare a new service can be injected in other service or controller on there `constructor`.
|
|
6
|
-
* All services annotated with `@Interceptor()` are constructed one time.
|
|
7
|
-
*
|
|
8
|
-
* > `@Service()` use the `reflect-metadata` to collect and inject service on controllers or other services.
|
|
9
|
-
*
|
|
10
|
-
* @returns {Function}
|
|
11
|
-
* @decorator
|
|
12
|
-
*/
|
|
13
|
-
export function Interceptor(): Function {
|
|
14
|
-
return Injectable({
|
|
15
|
-
type: ProviderType.INTERCEPTOR
|
|
16
|
-
});
|
|
17
|
-
}
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
import {catchAsyncError, classOf, nameOf} from "@tsed/core";
|
|
2
|
-
|
|
3
|
-
import {inject} from "../fn/inject.js";
|
|
4
|
-
import {injector} from "../fn/injector.js";
|
|
5
|
-
import type {MyLazyModule} from "./__mock__/lazy.module.js";
|
|
6
|
-
import {Injectable} from "./injectable.js";
|
|
7
|
-
import {LazyInject, OptionalLazyInject} from "./lazyInject.js";
|
|
8
|
-
|
|
9
|
-
describe("LazyInject", () => {
|
|
10
|
-
it("should lazy load module (import)", async () => {
|
|
11
|
-
@Injectable()
|
|
12
|
-
class MyInjectable {
|
|
13
|
-
@LazyInject("MyLazyModule", () => import("./__mock__/lazy.import.module.js"))
|
|
14
|
-
lazy: Promise<MyLazyModule>;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
const service = inject(MyInjectable);
|
|
18
|
-
const nbProviders = injector().getProviders().length;
|
|
19
|
-
|
|
20
|
-
const lazyService = await service.lazy;
|
|
21
|
-
|
|
22
|
-
expect(nameOf(classOf(lazyService))).toEqual("MyLazyModule");
|
|
23
|
-
expect(nbProviders).not.toEqual(injector().getProviders().length);
|
|
24
|
-
});
|
|
25
|
-
|
|
26
|
-
it("should throw an error when the module doesn't exists", async () => {
|
|
27
|
-
@Injectable()
|
|
28
|
-
class MyInjectable {
|
|
29
|
-
// @ts-ignore
|
|
30
|
-
@LazyInject("Lazy", () => import("lazy-module"), {})
|
|
31
|
-
lazy?: Promise<MyLazyModule>;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const service = inject<MyInjectable>(MyInjectable);
|
|
35
|
-
const error = await catchAsyncError(() => service.lazy);
|
|
36
|
-
|
|
37
|
-
expect(error?.message).toContain("'lazy-module' imported from");
|
|
38
|
-
});
|
|
39
|
-
|
|
40
|
-
it("should lazy load optionally a module", async () => {
|
|
41
|
-
@Injectable()
|
|
42
|
-
class MyInjectable {
|
|
43
|
-
// @ts-ignore
|
|
44
|
-
@OptionalLazyInject("default", () => import("lazy-module-optional"))
|
|
45
|
-
lazy?: Promise<MyLazyModule>;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
const service = inject(MyInjectable);
|
|
49
|
-
const lazyService = await service.lazy;
|
|
50
|
-
|
|
51
|
-
expect(lazyService).toEqual(undefined);
|
|
52
|
-
});
|
|
53
|
-
});
|
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
import {catchError} from "@tsed/core/utils/catchError.js";
|
|
2
|
-
import {isFunction} from "@tsed/core/utils/isFunction.js";
|
|
3
|
-
|
|
4
|
-
import {lazyInject, optionalLazyInject} from "../fn/lazyInject.js";
|
|
5
|
-
|
|
6
|
-
function mapOptions(args: any[], optional = false) {
|
|
7
|
-
function wrap(key: string, resolver: any) {
|
|
8
|
-
return async () => {
|
|
9
|
-
try {
|
|
10
|
-
const {[key]: token} = await resolver();
|
|
11
|
-
|
|
12
|
-
return {default: token};
|
|
13
|
-
} catch (er) {
|
|
14
|
-
if (!optional) {
|
|
15
|
-
throw er;
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
return;
|
|
19
|
-
}
|
|
20
|
-
};
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
if (isFunction(args[0])) {
|
|
24
|
-
return wrap("default", args[0]);
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
return wrap(args[0], args[1]);
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Lazy load a provider from his package and invoke only when the provider is used
|
|
32
|
-
*
|
|
33
|
-
* ```typescript
|
|
34
|
-
* import type {PlatformException} from "@tsed/platform-exceptions";
|
|
35
|
-
*
|
|
36
|
-
* @Injectable()
|
|
37
|
-
* export class MyService {
|
|
38
|
-
* @LazyInject(() => import("@tsed/platform-exceptions"))
|
|
39
|
-
* exceptions: Promise<PlatformException>;
|
|
40
|
-
* }
|
|
41
|
-
* ```
|
|
42
|
-
*
|
|
43
|
-
* @param key - The named export to import from the module.
|
|
44
|
-
* @param resolver - A function that returns a promise resolving to the module.
|
|
45
|
-
* @returns {Function}
|
|
46
|
-
* @decorator
|
|
47
|
-
*/
|
|
48
|
-
export function LazyInject(resolver: () => Promise<{default: unknown}>): PropertyDecorator;
|
|
49
|
-
export function LazyInject(key: string, resolver: () => Promise<{default: unknown}>): PropertyDecorator;
|
|
50
|
-
export function LazyInject(...args: any[]): PropertyDecorator {
|
|
51
|
-
let resolver = mapOptions(args);
|
|
52
|
-
|
|
53
|
-
return (target: any, propertyKey: string | symbol): any | void => {
|
|
54
|
-
catchError(() => Reflect.deleteProperty(target, propertyKey));
|
|
55
|
-
Reflect.defineProperty(target, propertyKey, {
|
|
56
|
-
async get() {
|
|
57
|
-
return lazyInject<any>(resolver as any);
|
|
58
|
-
}
|
|
59
|
-
});
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Optionally Lazy load a provider from his package and invoke only when the provider is used
|
|
65
|
-
*
|
|
66
|
-
* ```typescript
|
|
67
|
-
* import type {PlatformException} from "@tsed/platform-exceptions";
|
|
68
|
-
*
|
|
69
|
-
* @Injectable()
|
|
70
|
-
* export class MyService {
|
|
71
|
-
* @OptionalLazyInject(() => import("@tsed/platform-exceptions"))
|
|
72
|
-
* exceptions: Promise<PlatformException>;
|
|
73
|
-
* }
|
|
74
|
-
* ```
|
|
75
|
-
* @param key - The named export to import from the module.
|
|
76
|
-
* @param resolver - A function that returns a promise resolving to the module.
|
|
77
|
-
* @decorator
|
|
78
|
-
*/
|
|
79
|
-
export function OptionalLazyInject(resolver: () => Promise<{default: unknown}>): PropertyDecorator;
|
|
80
|
-
export function OptionalLazyInject(key: string, resolver: () => Promise<{default: unknown}>): PropertyDecorator;
|
|
81
|
-
export function OptionalLazyInject(...args: any[]): PropertyDecorator {
|
|
82
|
-
const resolver = mapOptions(args, true);
|
|
83
|
-
|
|
84
|
-
return (target: any, propertyKey: string | symbol): any | void => {
|
|
85
|
-
catchError(() => Reflect.deleteProperty(target, propertyKey));
|
|
86
|
-
Reflect.defineProperty(target, propertyKey, {
|
|
87
|
-
async get() {
|
|
88
|
-
return optionalLazyInject(resolver as any);
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
};
|
|
92
|
-
}
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
import {useDecorators} from "@tsed/core/utils/useDecorators.js";
|
|
2
|
-
|
|
3
|
-
import {ProviderScope} from "../domain/ProviderScope.js";
|
|
4
|
-
import {ProviderType} from "../domain/ProviderType.js";
|
|
5
|
-
import {TokenProvider} from "../interfaces/TokenProvider.js";
|
|
6
|
-
import {Configuration} from "./configuration.js";
|
|
7
|
-
import {Injectable} from "./injectable.js";
|
|
8
|
-
|
|
9
|
-
export interface ModuleOptions extends Omit<TsED.Configuration, "scopes"> {
|
|
10
|
-
/**
|
|
11
|
-
* Provider scope
|
|
12
|
-
*/
|
|
13
|
-
scope?: ProviderScope;
|
|
14
|
-
/**
|
|
15
|
-
* Providers must be initialized before building this module
|
|
16
|
-
*/
|
|
17
|
-
imports?: TokenProvider[];
|
|
18
|
-
/**
|
|
19
|
-
* Explicit token must be injected in the constructor
|
|
20
|
-
*/
|
|
21
|
-
deps?: TokenProvider[];
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* Additional properties are stored as provider configuration.
|
|
25
|
-
*/
|
|
26
|
-
[key: string]: any;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* Declare a new Ts.ED module
|
|
31
|
-
*
|
|
32
|
-
* ## Options
|
|
33
|
-
* - imports: List of Provider which must be built by injector before invoking the module
|
|
34
|
-
* - deps: List of provider must be injected to the module constructor (explicit declaration)
|
|
35
|
-
*
|
|
36
|
-
* @param options
|
|
37
|
-
* @decorator
|
|
38
|
-
*/
|
|
39
|
-
export function Module(options: Partial<ModuleOptions> = {}) {
|
|
40
|
-
const {scopes, imports, deps, scope, ...configuration} = options;
|
|
41
|
-
|
|
42
|
-
return useDecorators(
|
|
43
|
-
Configuration(configuration),
|
|
44
|
-
Injectable({
|
|
45
|
-
type: ProviderType.MODULE,
|
|
46
|
-
scope: ProviderScope.SINGLETON,
|
|
47
|
-
imports,
|
|
48
|
-
deps,
|
|
49
|
-
injectable: false
|
|
50
|
-
})
|
|
51
|
-
);
|
|
52
|
-
}
|