Skip to content

GollumJS/GollumTS-Annotation

Repository files navigation

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'
// ]