@launchtray/tsyringe-async
Version:
Lightweight dependency injection container for JavaScript/TypeScript, with asynchronous resolution
78 lines (77 loc) • 3.21 kB
JavaScript
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];
}
});
});
}