UNPKG

@elsikora/cladi

Version:

Zero-dependency TypeScript DI toolkit with typed tokens and scoped lifecycles.

33 lines (30 loc) 1.39 kB
import { BaseError } from '../../../../infrastructure/class/base/error.class.js'; import { getInjectableMetadata } from '../injectable-metadata/get.utility.js'; import { createAutowireProvider } from './autowire-provider.utility.js'; /** * Creates autowired provider using token defined in injectable metadata. * @param {Constructor<T>} useClass Class constructor to instantiate. * @param {Omit<ICreateAutowireProviderOptions<T, TDependencies>, "token">} [options] Optional provider overrides. * @returns {IClassProvider<T, TDependencies>} Class provider definition. * @template T Provider instance type. * @template TDependencies Constructor dependency tokens. */ function autowire(useClass, options = {}) { const metadata = getInjectableMetadata(useClass); const metadataToken = metadata?.token; if (!metadataToken || typeof metadataToken !== "symbol") { throw new BaseError("Injectable metadata token is missing; use @Injectable({ token }) or createAutowireProvider(..., { token })", { code: "INJECTABLE_TOKEN_MISSING", context: { className: useClass.name ?? "anonymous-class", }, source: "autowire", }); } return createAutowireProvider(useClass, { ...options, token: metadataToken, }); } export { autowire }; //# sourceMappingURL=autowire.utility.js.map