( provider: SingleProvider, ngModuleType?: InjectorType<any>, providers?: any[], )
| 637 | * @param provider provider to convert to factory |
| 638 | */ |
| 639 | export function providerToFactory( |
| 640 | provider: SingleProvider, |
| 641 | ngModuleType?: InjectorType<any>, |
| 642 | providers?: any[], |
| 643 | ): (type?: Type<unknown>, flags?: number) => any { |
| 644 | let factory: ((type?: Type<unknown>, flags?: InternalInjectFlags) => any) | undefined = undefined; |
| 645 | if (ngDevMode && isEnvironmentProviders(provider)) { |
| 646 | throwInvalidProviderError(undefined, providers, provider); |
| 647 | } |
| 648 | |
| 649 | if (isTypeProvider(provider)) { |
| 650 | const unwrappedProvider = resolveForwardRef(provider); |
| 651 | return getFactoryDef(unwrappedProvider) || injectableDefOrInjectorDefFactory(unwrappedProvider); |
| 652 | } else { |
| 653 | if (isValueProvider(provider)) { |
| 654 | factory = () => resolveForwardRef(provider.useValue); |
| 655 | } else if (isFactoryProvider(provider)) { |
| 656 | factory = () => provider.useFactory(...injectArgs(provider.deps || [])); |
| 657 | } else if (isExistingProvider(provider)) { |
| 658 | factory = (_, flags) => |
| 659 | ɵɵinject( |
| 660 | resolveForwardRef(provider.useExisting), |
| 661 | flags !== undefined && flags & InternalInjectFlags.Optional |
| 662 | ? InternalInjectFlags.Optional |
| 663 | : undefined, |
| 664 | ); |
| 665 | } else { |
| 666 | const classRef = resolveForwardRef( |
| 667 | provider && |
| 668 | ((provider as StaticClassProvider | ClassProvider).useClass || provider.provide), |
| 669 | ); |
| 670 | if (ngDevMode && !classRef) { |
| 671 | throwInvalidProviderError(ngModuleType, providers, provider); |
| 672 | } |
| 673 | if (hasDeps(provider)) { |
| 674 | factory = () => new classRef(...injectArgs(provider.deps)); |
| 675 | } else { |
| 676 | return getFactoryDef(classRef) || injectableDefOrInjectorDefFactory(classRef); |
| 677 | } |
| 678 | } |
| 679 | } |
| 680 | return factory; |
| 681 | } |
| 682 | |
| 683 | export function assertNotDestroyed(injector: R3Injector): void { |
| 684 | if (injector.destroyed) { |
no test coverage detected
searching dependent graphs…