tsioc
Version:
tsioc is AOP, Ioc container, via typescript decorator
57 lines (55 loc) • 2.11 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
require("reflect-metadata");
var DecoratorFactory_1 = require("./DecoratorFactory");
var DecoratorType_1 = require("./DecoratorType");
var Registration_1 = require("../../Registration");
var index_1 = require("../../utils/index");
/**
* create class decorator
*
* @export
* @template T metadata type.
* @param {string} name decorator name.
* @param {MetadataAdapter} [adapter] metadata adapter
* @param {MetadataExtends<T>} [metadataExtends] add extents for metadata.
* @returns {*}
*/
function createClassDecorator(name, adapter, metadataExtends) {
var classAdapter = (function (args) {
var metadata;
if (adapter) {
adapter(args);
}
args.next({
isMetadata: function (arg) { return index_1.isClassMetadata(arg); },
match: function (arg) { return arg && (index_1.isSymbol(arg) || index_1.isString(arg) || (index_1.isObject(arg) && arg instanceof Registration_1.Registration)); },
setMetadata: function (metadata, arg) {
metadata.provide = arg;
}
});
args.next({
match: function (arg) { return index_1.isString(arg); },
setMetadata: function (metadata, arg) {
metadata.alias = arg;
}
});
args.next({
match: function (arg) { return index_1.isBoolean(arg); },
setMetadata: function (metadata, arg) {
metadata.singleton = arg;
}
});
args.next({
match: function (arg) { return index_1.isNumber(arg); },
setMetadata: function (metadata, arg) {
metadata.expires = arg;
}
});
});
var decorator = DecoratorFactory_1.createDecorator(name, classAdapter, metadataExtends);
decorator.decoratorType = DecoratorType_1.DecoratorType.Class;
return decorator;
}
exports.createClassDecorator = createClassDecorator;
//# sourceMappingURL=../../sourcemaps/core/factories/ClassDecoratorFactory.js.map