MCPcopy Index your code
hub / github.com/angular/angular / providerToFactory

Function providerToFactory

packages/core/src/di/r3_injector.ts:639–681  ·  view source on GitHub ↗
(
  provider: SingleProvider,
  ngModuleType?: InjectorType<any>,
  providers?: any[],
)

Source from the content-addressed store, hash-verified

637 * @param provider provider to convert to factory
638 */
639export 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
683export function assertNotDestroyed(injector: R3Injector): void {
684 if (injector.destroyed) {

Callers 2

resolveProviderFunction · 0.90
providerToRecordFunction · 0.85

Calls 12

isEnvironmentProvidersFunction · 0.90
isTypeProviderFunction · 0.90
resolveForwardRefFunction · 0.90
getFactoryDefFunction · 0.90
isValueProviderFunction · 0.90
isFactoryProviderFunction · 0.90
injectArgsFunction · 0.90
isExistingProviderFunction · 0.90
ɵɵinjectFunction · 0.90
hasDepsFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…