@elsikora/cladi
Version:
Zero-dependency TypeScript DI toolkit with typed tokens and scoped lifecycles.
35 lines (31 loc) • 1.45 kB
JavaScript
;
var error_class = require('../../../../infrastructure/class/base/error.class.js');
var get_utility = require('../injectable-metadata/get.utility.js');
var autowireProvider_utility = require('./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 = get_utility.getInjectableMetadata(useClass);
const metadataToken = metadata?.token;
if (!metadataToken || typeof metadataToken !== "symbol") {
throw new error_class.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 autowireProvider_utility.createAutowireProvider(useClass, {
...options,
token: metadataToken,
});
}
exports.autowire = autowire;
//# sourceMappingURL=autowire.utility.js.map