@launchtray/tsyringe-async
Version:
Lightweight dependency injection container for JavaScript/TypeScript, with asynchronous resolution
29 lines (28 loc) • 1.15 kB
JavaScript
import { __awaiter } from "tslib";
import { getParamInfo } from "./reflection-helpers";
import { isTokenDescriptor } from "./providers/injection-token";
import { formatErrorCtor } from "./error-helpers";
export function resolveParams(container, target, propertyKey = undefined, ...args) {
return __awaiter(this, void 0, void 0, function* () {
const paramInfo = getParamInfo(target, propertyKey);
const resolvedArgs = [...args];
const types = paramInfo.slice(args.length);
let index = 0;
for (const type of types) {
try {
if (isTokenDescriptor(type)) {
resolvedArgs.push(type.multiple
? yield container.resolveAll(type.token)
: yield container.resolve(type.token));
}
resolvedArgs.push(yield container.resolve(type));
}
catch (e) {
const argIndex = index + args.length;
throw new Error(formatErrorCtor(target, argIndex, e, propertyKey));
}
index += 1;
}
return resolvedArgs;
});
}