### Class: classdecoratorfactory = new ClassDecoratorFactory()

Factory for class decorators

#### create() : ClassDecorator

#### createDecorator(key: MetadataKey<T, ClassDecorator>, spec: T, options: DecoratorOptions) : anonymous

Create a class decorator function

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `MetadataKey<T, ClassDecorator>` |  |  | Metadata key
spec | `T` |  |  | Metadata object from the decorator function
options | `DecoratorOptions` |  | optional | Options for the decorator

### Class: decoratorfactory = new DecoratorFactory()

Base factory class for decorator functions

Properties

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
TARGET | `string` | "__decoratorTarget" | static exported | A constant to reference the target of a decoration

#### constructor(key: string, spec: T, options: DecoratorOptions) : DecoratorFactory

Construct a new class decorator factory

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `string` |  |  | Metadata key
spec | `T` |  |  | Metadata object from the decorator function
options | `DecoratorOptions` |  | optional | Options for the decorator. Default to `{allowInheritance: true}` if not provided

#### create() : D

Create a decorator function of the given type. Each sub class MUST implement this method.

#### getTarget(spec: T) : any

Get the optional decoration target of a given spec

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
spec | `T` |  |  | Metadata spec

#### withTarget(spec: T, target: Object) : T

Set a reference to the target class or prototype for a given spec if it's an object

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
spec | `T` |  |  | Metadata spec
target | `Object` |  |  | Target of the decoration. It is a class or the prototype of a class.

#### cloneDeep(val: Readonly<V>) : V

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
val | `Readonly<V>` |  |  | Base factory class for decorator functions

#### getNumberOfParameters(target: Object, member: undefined | string) : number

Get the number of parameters for a given constructor or method

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
target | `Object` |  |  | Class or the prototype
member | `undefined | string` |  | optional | Method name

#### getTargetName(target: Object, member: undefined | string, descriptorOrIndex: TypedPropertyDescriptor<any> | number) : string

Get the qualified name of a decoration target. For example:

    class MyClass
    MyClass.constructor[0] // First parameter of the constructor
    MyClass.myStaticProperty
    MyClass.myStaticMethod()
    MyClass.myStaticMethod[0] // First parameter of the myStaticMethod
    MyClass.prototype.myProperty
    MyClass.prototype.myMethod()
    MyClass.prototype.myMethod[1] // Second parameter of myMethod

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
target | `Object` |  |  | Class or prototype of a class
member | `undefined | string` |  | optional | Optional property/method name
descriptorOrIndex | `TypedPropertyDescriptor<any> | number` |  | optional | Optional method descriptor or parameter index

### Class: methoddecoratorfactory = new MethodDecoratorFactory()

Factory for method decorators

#### create() : MethodDecorator

#### createDecorator(key: MetadataKey<T, MethodDecorator>, spec: T, options: DecoratorOptions) : anonymous

Create a method decorator function

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `MetadataKey<T, MethodDecorator>` |  |  | Metadata key
spec | `T` |  |  | Metadata object from the decorator function
options | `DecoratorOptions` |  | optional | Options for the decorator

### Class: methodparameterdecoratorfactory = new MethodParameterDecoratorFactory()

Factory for method level parameter decorator. For example, the following code uses `@param` to declare two parameters for `greet()`.

    class MyController {
      @param('name') // Parameter 0
      @param('msg')  // Parameter 1
      greet() {}
    }

#### create() : MethodDecorator

#### createDecorator(key: MetadataKey<T, MethodDecorator>, spec: T, options: DecoratorOptions) : anonymous

Create a method decorator function

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `MetadataKey<T, MethodDecorator>` |  |  | Metadata key
spec | `T` |  |  | Metadata object from the decorator function
options | `DecoratorOptions` |  | optional | Options for the decorator

### Class: parameterdecoratorfactory = new ParameterDecoratorFactory()

Factory for parameter decorators

#### create() : ParameterDecorator

#### createDecorator(key: MetadataKey<T, ParameterDecorator>, spec: T, options: DecoratorOptions) : anonymous

Create a parameter decorator function

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `MetadataKey<T, ParameterDecorator>` |  |  | Metadata key
spec | `T` |  |  | Metadata object from the decorator function
options | `DecoratorOptions` |  | optional | Options for the decorator

### Class: propertydecoratorfactory = new PropertyDecoratorFactory()

Factory for property decorators

#### create() : PropertyDecorator

#### createDecorator(key: MetadataKey<T, PropertyDecorator>, spec: T, options: DecoratorOptions) : anonymous

Create a property decorator function

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `MetadataKey<T, PropertyDecorator>` |  |  | Metadata key
spec | `T` |  |  | Metadata object from the decorator function
options | `DecoratorOptions` |  | optional | Options for the decorator

### Interface: DecoratorOptions

Options for a decorator

Properties

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
allowInheritance | `undefined | true | false` |  | exported optional | Controls if inherited metadata will be honored. Default to `true`.
cloneInputSpec | `undefined | true | false` |  | exported optional | Controls if the value of `spec` argument will be cloned. Sometimes we use shared spec for the decoration, but the decorator function might need to mutate the object. Cloning the input spec makes it safe to use the same spec (`template`) to decorate different members. Default to `true`.

### Class: metadatainspector = new MetadataInspector()

Inspector for metadata applied by decorators

Properties

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
DesignTimeReflector | `NamespacedReflect` | TSReflector | static exported | Expose the reflector for TypeScript design-time metadata
Reflector | `NamespacedReflect` | Reflector | static exported | Expose Reflector, which is a wrapper of `Reflect` and it uses `loopback` as the namespace prefix for all metadata keys

#### defineMetadata(key: MetadataKey<T, DecoratorType>, value: T, target: Object, member: undefined | string) : void

Define metadata for the given target

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `MetadataKey<T, DecoratorType>` |  |  | Metadata key
value | `T` |  |  | Metadata value
target | `Object` |  |  | Target for the metadata
member | `undefined | string` |  | optional | Optional property or method name

#### getAllMethodMetadata(key: MetadataKey<T, MethodDecorator>, target: Object, options: InspectionOptions) : MetadataMap<T> | undefined

Get the metadata associated with the given key for all methods of the target class or prototype

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `MetadataKey<T, MethodDecorator>` |  |  | Metadata key
target | `Object` |  |  | Class for static methods or prototype for instance methods
options | `InspectionOptions` |  | optional | Options for inspection

#### getAllParameterMetadata(key: MetadataKey<T, ParameterDecorator>, target: Object, methodName: undefined | string, options: InspectionOptions) : T[] | undefined

Get the metadata associated with the given key for all parameters of a given method

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `MetadataKey<T, ParameterDecorator>` |  |  | Metadata key
target | `Object` |  |  | Class for static methods or prototype for instance methods
methodName | `undefined | string` |  | optional | Method name. If not present, default to '' to use the constructor
options | `InspectionOptions` |  | optional | Options for inspection

#### getAllPropertyMetadata(key: MetadataKey<T, PropertyDecorator>, target: Object, options: InspectionOptions) : MetadataMap<T> | undefined

Get the metadata associated with the given key for all properties of the target class or prototype

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `MetadataKey<T, PropertyDecorator>` |  |  | Metadata key
target | `Object` |  |  | Class for static methods or prototype for instance methods
options | `InspectionOptions` |  | optional | Options for inspection

#### getClassMetadata(key: MetadataKey<T, ClassDecorator>, target: Function, options: InspectionOptions) : T | undefined

Get the metadata associated with the given key for a given class

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `MetadataKey<T, ClassDecorator>` |  |  | Metadata key
target | `Function` |  |  | Class that contains the metadata
options | `InspectionOptions` |  | optional | Options for inspection

#### getDesignTypeForMethod(target: Object, methodName: string) : DesignTimeMethodMetadata

Get TypeScript design time type for a method

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
target | `Object` |  |  | Class or prototype
methodName | `string` |  |  | Method name

#### getDesignTypeForProperty(target: Object, propertyName: string) : Function

Get TypeScript design time type for a property

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
target | `Object` |  |  | Class or prototype
propertyName | `string` |  |  | Property name

#### getMethodMetadata(key: MetadataKey<T, MethodDecorator>, target: Object, methodName: undefined | string, options: InspectionOptions) : T | undefined

Get the metadata associated with the given key for a given method of the target class or prototype

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `MetadataKey<T, MethodDecorator>` |  |  | Metadata key
target | `Object` |  |  | Class for static methods or prototype for instance methods
methodName | `undefined | string` |  | optional | Method name. If not present, default to '' to use the constructor
options | `InspectionOptions` |  | optional | Options for inspection

#### getParameterMetadata(key: MetadataKey<T, ParameterDecorator>, target: Object, methodName: string, index: number, options: InspectionOptions) : T | undefined

Get the metadata associated with the given key for a parameter of a given method by index

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `MetadataKey<T, ParameterDecorator>` |  |  | Metadata key
target | `Object` |  |  | Class for static methods or prototype for instance methods
methodName | `string` |  |  | Method name. If not present, default to '' to use the constructor
index | `number` |  |  | Index of the parameter, starting with 0
options | `InspectionOptions` |  | optional | Options for inspection

#### getPropertyMetadata(key: MetadataKey<T, PropertyDecorator>, target: Object, propertyName: string, options: InspectionOptions) : T | undefined

Get the metadata associated with the given key for a given property of the target class or prototype

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `MetadataKey<T, PropertyDecorator>` |  |  | Metadata key
target | `Object` |  |  | Class for static properties or prototype for instance properties
propertyName | `string` |  |  | Property name
options | `InspectionOptions` |  | optional | Options for inspection

### Interface: InspectionOptions

Options for inspection

Properties

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
ownMetadataOnly | `undefined | true | false` |  | exported optional | Only inspect own metadata of a given target. The prototype chain will not be checked. The implementation uses `Reflect.getOwnMetadata()` if the flag is set to `true`. Otherwise, it uses `Reflect.getMetadata()`. The flag is `false` by default for `MetadataInspector`.

### Class: namespacedreflect = new NamespacedReflect()

#### constructor(namespace: undefined | string) : NamespacedReflect

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
namespace | `undefined | string` |  | optional | : namespace to bind this reflect context

#### decorate(decorators: (anonymous | anonymous)[] | ClassDecorator[], target: Object, targetKey: undefined | string, descriptor: PropertyDescriptor) : PropertyDescriptor | Function

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
decorators | `(anonymous | anonymous)[] | ClassDecorator[]` |  |  |
target | `Object` |  |  |
targetKey | `undefined | string` |  | optional |
descriptor | `PropertyDescriptor` |  | optional |

#### defineMetadata(metadataKey: string, metadataValue: any, target: Object, propertyKey: undefined | string) : void

define metadata for a target class or it's property/method

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
metadataKey | `string` |  |  |
metadataValue | `any` |  |  |
target | `Object` |  |  |
propertyKey | `undefined | string` |  | optional |

#### deleteMetadata(metadataKey: string, target: Object, propertyKey: undefined | string) : boolean

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
metadataKey | `string` |  |  |
target | `Object` |  |  |
propertyKey | `undefined | string` |  | optional |

#### getMetadata(metadataKey: string, target: Object, propertyKey: undefined | string) : any

lookup metadata from a target object and its prototype chain

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
metadataKey | `string` |  |  |
target | `Object` |  |  |
propertyKey | `undefined | string` |  | optional |

#### getMetadataKeys(target: Object, propertyKey: undefined | string) : string[]

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
target | `Object` |  |  |
propertyKey | `undefined | string` |  | optional |

#### getOwnMetadata(metadataKey: string, target: Object, propertyKey: undefined | string) : any

get own metadata for a target object or it's property/method

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
metadataKey | `string` |  |  |
target | `Object` |  |  |
propertyKey | `undefined | string` |  | optional |

#### getOwnMetadataKeys(target: Object, propertyKey: undefined | string) : string[]

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
target | `Object` |  |  |
propertyKey | `undefined | string` |  | optional |

#### hasMetadata(metadataKey: string, target: Object, propertyKey: undefined | string) : boolean

Check if the target has corresponding metadata

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
metadataKey | `string` |  |  | Key
target | `Object` |  |  | Target
propertyKey | `undefined | string` |  | optional | Optional property key

#### hasOwnMetadata(metadataKey: string, target: Object, propertyKey: undefined | string) : boolean

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
metadataKey | `string` |  |  |
target | `Object` |  |  |
propertyKey | `undefined | string` |  | optional |

#### metadata(metadataKey: string, metadataValue: any) : anonymous

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
metadataKey | `string` |  |  |
metadataValue | `any` |  |  |

### const Reflector = new NamespacedReflect('loopback')

### Class: metadataaccessor = new MetadataAccessor()

A strongly-typed metadata accessor via reflection

#### toString() : string

#### create(key: string) : MetadataAccessor<T, D>

Create a strongly-typed metadata accessor

Parameters

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
key | `string` |  |  | The metadata key

### Interface: DesignTimeMethodMetadata

Design time metadata for a method.

Properties

Name | Type | Default Value | Flags | Description
--- | --- | --- | --- | ---
parameterTypes | `Function[]` |  | exported | An array of parameter types
returnType | `Function` |  | exported | Return type
type | `Function` |  | exported | Type of the method itself. It is `Function`

### Interface: MetadataMap

An object mapping keys to corresponding metadata