huject
Version:
Typescript dependency injection container for humans
116 lines • 4.87 kB
JavaScript
;
require('reflect-metadata');
function ConstructorInject(targetOrFactoryMethodOrLiteral, factoryMethod) {
var method = undefined;
switch (typeof targetOrFactoryMethodOrLiteral) {
case 'function':
Reflect.defineMetadata('inject:constructor', true, targetOrFactoryMethodOrLiteral);
return targetOrFactoryMethodOrLiteral;
case 'number':
if (typeof targetOrFactoryMethodOrLiteral === 'number') {
method = targetOrFactoryMethodOrLiteral;
}
return function (target, propertyKey, parameterIndex) {
var metadataName = 'inject:constructor:param' + parameterIndex + ':method';
Reflect.defineMetadata(metadataName, method, target);
};
case 'string':
var literal_1 = targetOrFactoryMethodOrLiteral;
method = factoryMethod;
return function (target, propertyKey, parameterIndex) {
var metadataLiteralName = 'inject:constructor:param' + parameterIndex + ':literal';
var metadataFactoryName = 'inject:constructor:param' + parameterIndex + ':method';
Reflect.defineMetadata(metadataLiteralName, literal_1, target);
Reflect.defineMetadata(metadataFactoryName, method, target);
};
}
}
exports.ConstructorInject = ConstructorInject;
function Inject(targetOrFactoryMethodOrLiteral, propertyKeyOrFactoryMethod) {
var method = undefined;
switch (typeof targetOrFactoryMethodOrLiteral) {
case 'object':
if (typeof propertyKeyOrFactoryMethod === 'string') {
var propertyKey = propertyKeyOrFactoryMethod;
if (!targetOrFactoryMethodOrLiteral.hasOwnProperty(propertyKey)) {
Object.defineProperty(targetOrFactoryMethodOrLiteral, propertyKey, {
configurable: true,
enumerable: true,
writable: true,
value: null
});
}
Reflect.defineMetadata("inject:property", method, targetOrFactoryMethodOrLiteral, propertyKey);
}
break;
case 'string':
var literal_2 = targetOrFactoryMethodOrLiteral;
if (typeof propertyKeyOrFactoryMethod === "number") {
method = propertyKeyOrFactoryMethod;
}
return function (target, propertyKey) {
if (!target.hasOwnProperty(propertyKey)) {
Object.defineProperty(target, propertyKey, {
configurable: true,
enumerable: true,
writable: true,
value: null
});
}
Reflect.defineMetadata("inject:property", method, target, propertyKey);
Reflect.defineMetadata('inject:property:literal', literal_2, target, propertyKey);
};
case 'number':
method = targetOrFactoryMethodOrLiteral;
return function (target, propertyKey) {
if (!target.hasOwnProperty(propertyKey)) {
Object.defineProperty(target, propertyKey, {
configurable: true,
enumerable: true,
writable: true,
value: null
});
}
Reflect.defineMetadata("inject:property", method, target, propertyKey);
};
}
}
exports.Inject = Inject;
function Optional() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i - 0] = arguments[_i];
}
return function (target, propertyKey, parameterIndex) {
if (typeof parameterIndex === "undefined") {
Reflect.defineMetadata("inject:property:optional", true, target, propertyKey);
}
else {
var metadataName = 'inject:constructor:param' + parameterIndex + ':optional';
Reflect.defineMetadata(metadataName, true, target);
}
};
}
exports.Optional = Optional;
function Factory() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i - 0] = arguments[_i];
}
var target;
switch (args.length) {
case 1:
target = args[0];
Reflect.defineMetadata('inject:autofactory', true, target);
return target;
case 3:
target = args[0];
var propertyKey = args[1];
Reflect.defineMetadata('inject:factorymethod', true, target, propertyKey);
return args[2];
default:
throw new Error("@Factory decorator is not allowed here");
}
}
exports.Factory = Factory;
//# sourceMappingURL=decorators.js.map