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); }
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); }
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); }