@launchtray/tsyringe-async
Version:
Lightweight dependency injection container for JavaScript/TypeScript, with asynchronous resolution
33 lines (32 loc) • 1.51 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.INJECTION_TOKEN_METADATA_KEY = "injectionTokens";
function getParamInfo(target, propertyKey = undefined) {
let params = [];
params = propertyKey
? Reflect.getMetadata("design:paramtypes", target, propertyKey) || []
: Reflect.getMetadata("design:paramtypes", target) || [];
const injectionTokens = propertyKey
? Reflect.getOwnMetadata(exports.INJECTION_TOKEN_METADATA_KEY, target, propertyKey) || {}
: Reflect.getOwnMetadata(exports.INJECTION_TOKEN_METADATA_KEY, target) || {};
Object.keys(injectionTokens).forEach(key => {
params[+key] = injectionTokens[key];
});
return params;
}
exports.getParamInfo = getParamInfo;
function defineInjectionTokenMetadata(data) {
return function (target, propertyKey, parameterIndex) {
const injectionTokens = propertyKey
? Reflect.getOwnMetadata(exports.INJECTION_TOKEN_METADATA_KEY, target, propertyKey) || {}
: Reflect.getOwnMetadata(exports.INJECTION_TOKEN_METADATA_KEY, target) || {};
injectionTokens[parameterIndex] = data;
if (propertyKey) {
Reflect.defineMetadata(exports.INJECTION_TOKEN_METADATA_KEY, injectionTokens, target, propertyKey);
}
else {
Reflect.defineMetadata(exports.INJECTION_TOKEN_METADATA_KEY, injectionTokens, target);
}
};
}
exports.defineInjectionTokenMetadata = defineInjectionTokenMetadata;