@elsikora/cladi
Version:
Zero-dependency TypeScript DI toolkit with typed tokens and scoped lifecycles.
33 lines (30 loc) • 1.39 kB
JavaScript
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