Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@gollum-ts/annotation

GollumJS64MIT5.2.2TypeScript support: included

Add simple persistant annotation on TS class.

simple, annotation, typescript, persistant, decorator

readme

GollumTS-Annotation

Build Status Coverage Licence NPM version Discord

Add persistent annotation on TS class.

Install

npm install @gollum-ts/annotation

Create annotation

import {Writer} from '@gollum-ts/annotation';


export function CustomAnnotation(data1, data2) {

    return Writer.write(CustomAnnotation, {
        data1: data1,
        data2: data2
    });
}

@CustomAnnotation('Hello', 'world')
export class MyClass {

    @CustomAnnotation('Every', 'body')
    public field ;

    public method(
        @CustomAnnotation('param', '1') param1,
        @CustomAnnotation('param', '2') param2
    ) {}


}

Read annotation

import {Reader} from '@gollum-ts/annotation';

let myObject = new MyClass();

// Class annotation //

let annotations = Reader.findClassAnnotations(MyClass);
let annotations = Reader.findClassAnnotations(myObject.constructor);
// annotations: Metatdata = [
//    0: {
//        annotation: CustomAnnotation,
//        data: {
//             data1: 'Hello',
//             data1: 'world'
//        }
//    }
// ]

let annotation = Reader.findClassAnnotation(MyClass, CustomAnnotation);
let annotation = Reader.findClassAnnotation(myObject.constructor, CustomAnnotation);
// annotation = { data1: 'Hello', data1: 'world' }

// Property annotation //

let annotations = Reader.findPropertyAnnotations(MyClass, 'field');
let annotations = Reader.findPropertyAnnotations(myObject.constructor, 'field');
// annotations: Metatdata = [
//    0: {
//        annotation: CustomAnnotation,
//        data: {
//             data1: 'Hello',
//             data1: 'world'
//        }
//    }
// ]
// Property annotation //

let annotations = Reader.findParameterAnnotation(MyClass, 'field', 0);
let annotations = Reader.findParameterAnnotation(myObject.constructor, 'field', 0);
// annotations: Metatdata = [
//    0: {
//        annotation: CustomAnnotation,
//        data: {
//             data1: 'param',
//             data1: '1'
//        }
//    }
// ]

let annotations = Reader.findParameterAnnotation(MyClass, 'field', 1);
let annotations = Reader.findParameterAnnotation(myObject.constructor, 'field', 1);
// annotations: Metatdata = [
//    0: {
//        annotation: CustomAnnotation,
//        data: {
//             data1: 'param',
//             data1: '2'
//        }
//    }
// ]


let annotation = Reader.findPropertyAnnotation(MyClass, 'field', CustomAnnotation);
let annotation = Reader.findPropertyAnnotation(myObject.constructor, 'field', CustomAnnotation);
// annotation = { data1: 'Every', data1: 'body' }

Create annotation with callback

import {Writer} from '@gollum-ts/annotation';

export function CustomAnnotationCallback(data1, data2) {
    return Writer.write(CustomAnnotationCallback, {
        data1: data1,
        data2: data2
    }, (target: any, propertyKey: string = null, descriptor: PropertyDescriptor = null) => {
        // Your implementation
    });
}

List properties for annotations

import {Reader} from '@gollum-ts/annotation';

let properties: string[] = Reader.findPropertiesNameByAnnotation(MyClass, CustomAnnotation);
let properties: string[] = Reader.findPropertiesNameByAnnotations(MyClass, [ CustomAnnotation, ... ]);
// properties = [
//  'field'
// ]