@wisemen/nestjs-provider-explorer
v0.1.2
Published
Shared provider discovery utilities for NestJS packages.
Maintainers
Keywords
Readme
@wisemen/nestjs-provider-explorer
Shared provider discovery utilities for NestJS packages.
This package provides:
ProviderExplorerModuleto register the explorer with NestProviderExplorerto enumerate discovered providers lazilyNestjsProvidermetadata containingproviderClass,providerInstance, and the underlying NestinstanceWrapper
Installation
pnpm add @wisemen/nestjs-provider-explorerPeer dependencies
pnpm add @nestjs/common @nestjs/coreRegister The Module
Import ProviderExplorerModule into the module that needs provider discovery.
It wraps Nest's DiscoveryModule, so no extra discovery setup is required.
import { Module } from '@nestjs/common'
import { ProviderExplorerModule } from '@wisemen/nestjs-provider-explorer'
import { ProviderRegistry } from './provider.registry.js'
@Module({
imports: [ProviderExplorerModule],
providers: [ProviderRegistry]
})
export class ProviderRegistryModule {}Explore Providers
Inject ProviderExplorer, then iterate over providers to inspect the
discovered classes and instances.
import { Injectable, OnApplicationBootstrap } from '@nestjs/common'
import { ProviderExplorer } from '@wisemen/nestjs-provider-explorer'
@Injectable()
export class ProviderRegistry implements OnApplicationBootstrap {
constructor (
private readonly providerExplorer: ProviderExplorer
) {}
onApplicationBootstrap (): void {
for (const provider of this.providerExplorer.providers) {
console.info(provider.providerClass.name)
}
}
}Each NestjsProvider exposes:
providerClass: the discovered provider metatypeproviderInstance: the instantiated provider objectinstanceWrapper: Nest's internalInstanceWrapper, useful when you need to resolve transient or request-scoped providers manually
Filter Providers
The explorer returns all discovered class-based providers. Consumers are expected to filter them with their own decorators or metadata checks.
import { Injectable } from '@nestjs/common'
import { ProviderExplorer } from '@wisemen/nestjs-provider-explorer'
import { isTypesenseCollector } from './typesense-collector.decorator.js'
@Injectable()
export class TypesenseCollectors {
constructor (
private readonly providerExplorer: ProviderExplorer
) {}
collect (): void {
for (const provider of this.providerExplorer.providers) {
if (!isTypesenseCollector(provider.providerClass)) {
continue
}
provider.providerInstance
}
}
}Scoped Providers
For singleton providers, use providerInstance directly. For transient or
request-scoped providers, inspect instanceWrapper and resolve through
ModuleRef when needed. This is the pattern used by packages that must defer
instantiation until runtime.
