return (target) => {
		name = name || target.name;

		var $delegatefn = function(...injections) {
			let $inject = target.$inject || ['$delegate'];
			let delegateIndex = $inject.indexOf('$delegate');

			let instance = new target(...injections);
			utils.applyTransformations(target, instance, injections);

			let exposed = utils.getFinalComponent(target, instance);
			return exposed.$decorate instanceof Function ? exposed.$decorate() : injections[delegateIndex];
		};

		var component = function($provide) {
			var injections = target.$inject || [];
			if(!~injections.indexOf('$delegate')) injections.push('$delegate');
			$provide.decorator(name, [...injections, $delegatefn]);
		};


		injectTo(['$provide'], '_$inject')(component);
		if(!(target.$inject instanceof Array) || target.$inject.length === 0) {
			var parameters = utils.extractParameters(target);
			if(parameters.length > 0)
				inject(parameters)(target);
		}

		utils.addDeclareMethod(target);
		utils.defineComponent(target, null, 'config', component);
	}
Beispiel #2
0
	return (target) => {
		name = name || target.name;

		var component = function(...injections) {
			let instance = new target(...injections);
			utils.applyTransformations(target, instance, injections);
            return utils.getFinalComponent(target, instance);
		}

		if(!(target.$inject instanceof Array) || target.$inject.length === 0) {
			var parameters = utils.extractParameters(target);
			if(parameters.length > 0)
				inject(parameters)(component);
		}

		utils.addDeclareMethod(target);
		utils.defineComponent(target, name, 'provider', component);
	}
Beispiel #3
0
	return (target) => {

		let name = '', stateful = false;
		if(filterProps instanceof Object){
			name = filterProps.name || target.name;
			stateful = !!filterProps.stateful;
		}
		else
			name = filterProps || target.name;

		var component = function(...injections) {
            let instance = new target(...injections);

			if(!(instance.$filter instanceof Function))
				throw Error('an annotated "filter" must implement the "$filter" method');
			utils.applyTransformations(target, instance, injections);

			//@todo remove it in the next version
			if(instance.$stateful === true) {
				console.warn('the $stateful property is deprecated and will be removed in the next versions, use the @filter parameter instead');
				console.warn('https://github.com/PillowPillow/ng-annotations#d_filter');
				filter.$stateful = true;
			}

			if(stateful)
				filter.$stateful = stateful;

			return filter;
			function filter(...parameters) {
			    return instance.$filter(...parameters);
			}
		}

		if(!(target.$inject instanceof Array) || target.$inject.length === 0) {
			var parameters = utils.extractParameters(target);
			if(parameters.length > 0)
				inject(parameters)(component);
		}

		utils.addDeclareMethod(target);
		utils.defineComponent(target, name, 'filter', component);
	}