Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@conga/annotations

Package Overview
Dependencies
Maintainers
2
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@conga/annotations

Annotation parser library for ES2014/ES2015, ES5/ES6

  • 1.0.5
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
2
Created
Source

conga-annotations

NPM version NPM downloads Build status Dependency Status

Overview

This is a Node.js library which allows you to add annotations describing metdata data about classes, constructors, methods, and properties within javascript files.

ES6 Example:

/**
 * @MyClassAnnotation("hello world")
 */
class HelloWorld {

    constructor() {

        /**
         * @MyPropertyAnnotation(foo=[1,2,3,4], bar={"hello":"there"})
         */   
        this.myProperty = 'foo'
    }

    /**
     * @MyMethodAnnotation("foobar", something="hello")
     */
    myMethod() {

    }

}

ES5 Example:

/**
 * @MyConstructorAnnotation("some value")
 */
function HelloWorld(){}

HelloWorld.prototype = {

    /**
     * @MyPropertyAnnotation(foo=[1,2,3,4], bar={"hello":"there"})
     */
    myProperty: 'foo',

    /**
     * @MyMethodAnnotation("foobar", something="hello")
     */
    myMethod: function(){

    }
}

Installation

Need Node >= 6.0.0

> npm install @conga/annotations

Usage

Full example in example folder (node main.js to test is).

Create an Annotation

// my-class-annotation.js
// ----------------------------
'use strict'
const Annotation = require('conga-annotations').Annotation;

module.exports = class MyClassAnnotation extends Annotation {

    /**
     * The possible targets
     *
     * (Annotation.DEFINITION, Annotation.CONSTRUCTOR, Annotation.PROPERTY, Annotation.METHOD)
     *
     * @type {Array}
     */
    static get targets() { return [Annotation.DEFINITION] }

    /**
     * Constructor to add attributes
     * @type {Array}
     */
    constructor(data, filePath){
      super(data, filePath)        
    }

    /**
     * Optional initialization method that
     * can be used to transform data
     *
     * @param  {Object} data
     * @return {void}
     */
    init: function(data){

        // set defaults
        this.value = data.value || 'default value'
        this.sample = data.sample || 'default value for sample'

        // do something with data (error check, etc.)
    }

});

Add the Annotation to a File

// my-sample.js
// ------------

/**
 * @MyClassAnnotation("some value", sample="here is an attribute value")
 */
class HelloWorld {}

Parse the Annotation

// my-parser.js
// ------------

const path = require('path')
const annotations = require('conga-annotations')

// create the registry
const registry = new annotations.Registry()

// add annotations to the registry
registry.registerAnnotation(path.join(__dirname, 'my-class-annotation'))

// create the annotation reader
const reader = new annotations.Reader(registry)

// parse the annotations from a file, default parse ES6 file, Reader.ES5 to force ES5
reader.parse(path.join(__dirname, 'my-sample.js'), Reader.ES6)

// get the annotations
const definitionAnnotations = reader.definitionAnnotations
const constructorAnnotations = reader.constructorAnnotations
const methodAnnotations = reader.methodAnnotations
const propertyAnnotations = reader.propertyAnnotations

// loop through and handle the annotations
constructorAnnotations.forEach(function(annotation){

    // @MyConstructorAnnotation
    if (annotation.constructor.name === 'MyClassAnnotation'){

        // do something with the annotation data
        console.log(annotation.target); // -> "HelloWorld"
        console.log(annotation.value); // -> "some value"
        console.log(annotation.sample); // -> "here is an attribute value"
    }

});

Supported Attribute Types

// string
@MyAnnotation(foo="a string")

// boolean
@MyAnnotation(foo=true)

// array
@MyAnnotation(foo=[1,2,3,4])

// object
@MyAnnotation(foo={hi:"there"})

// nested annotations
@MyAnnotation(foo=@MyNestedAnnotation("this is nested", foo=true))

// array of nested annotations
@MyAnnotation(foo=[@MyNestedAnnotation("nested 1"), @MyNestedAnnotation("nested 2")])

License

MIT

Keywords

FAQs

Package last updated on 18 Mar 2021

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc