UNPKG

@launchtray/tsyringe-async

Version:

Lightweight dependency injection container for JavaScript/TypeScript, with asynchronous resolution

78 lines (77 loc) 3.21 kB
import { __awaiter, __generator, __read, __spread, __values } from "tslib"; import { getParamInfo } from "./reflection-helpers"; import { isTokenDescriptor } from "./providers/injection-token"; import { formatErrorCtor } from "./error-helpers"; export function resolveParams(container, target, propertyKey) { if (propertyKey === void 0) { propertyKey = undefined; } var args = []; for (var _i = 3; _i < arguments.length; _i++) { args[_i - 3] = arguments[_i]; } return __awaiter(this, void 0, void 0, function () { var paramInfo, resolvedArgs, types, index, types_1, types_1_1, type, _a, _b, _c, _d, _e, e_1, argIndex, e_2_1; var e_2, _f; return __generator(this, function (_g) { switch (_g.label) { case 0: paramInfo = getParamInfo(target, propertyKey); resolvedArgs = __spread(args); types = paramInfo.slice(args.length); index = 0; _g.label = 1; case 1: _g.trys.push([1, 14, 15, 16]); types_1 = __values(types), types_1_1 = types_1.next(); _g.label = 2; case 2: if (!!types_1_1.done) return [3, 13]; type = types_1_1.value; _g.label = 3; case 3: _g.trys.push([3, 10, , 11]); if (!isTokenDescriptor(type)) return [3, 8]; _b = (_a = resolvedArgs).push; if (!type.multiple) return [3, 5]; return [4, container.resolveAll(type.token)]; case 4: _c = _g.sent(); return [3, 7]; case 5: return [4, container.resolve(type.token)]; case 6: _c = _g.sent(); _g.label = 7; case 7: _b.apply(_a, [_c]); _g.label = 8; case 8: _e = (_d = resolvedArgs).push; return [4, container.resolve(type)]; case 9: _e.apply(_d, [_g.sent()]); return [3, 11]; case 10: e_1 = _g.sent(); argIndex = index + args.length; throw new Error(formatErrorCtor(target, argIndex, e_1, propertyKey)); case 11: index += 1; _g.label = 12; case 12: types_1_1 = types_1.next(); return [3, 2]; case 13: return [3, 16]; case 14: e_2_1 = _g.sent(); e_2 = { error: e_2_1 }; return [3, 16]; case 15: try { if (types_1_1 && !types_1_1.done && (_f = types_1.return)) _f.call(types_1); } finally { if (e_2) throw e_2.error; } return [7]; case 16: return [2, resolvedArgs]; } }); }); }