reflection-js

Module reflection API for nodejs

Usage no npm install needed!

<script type="module">
  import reflectionJs from 'https://cdn.skypack.dev/reflection-js';
</script>

README

Reflection / parsefunc is a reflection API for nodejs

Build Status Coverage Status NPM version License

Motivation

This is a very simple reflection API for javascript functions build on acorn. reflection-js is mostly designed to fit cnyks's needs.

PHPdoc/JSdoc

PHPdoc is part of PHP reflection API, that is, function described with this syntax can access their own comment. There is no standard way to attach a comment to a function in javascript. Esprima provide a way to parse the AST (and to retrieve comment) but we need a little more.

... enter the JSdoc syntax !

Attach a JSdoc to a javascript function

JSdoc pattern

foo.prototype.bar = function() /**
* This comment is valid and can describe the function behavior
* This syntax allow reflection API to work, as the comment will be serialized in the function body
*/ {
  return 43;
}


class Bar {
  async static bar() /**
  * This comment is valid and can describe the function behavior
  * This syntax allow reflection API to work, as the comment will be serialized in the function body
  */ {
    return 43;
  }

}

Usage

const parsefunc = require('reflection-js/parsefunc');
var heavyComputation = function (a, b = 1) /**
* This function computer bar
* @param {string} a Initial rotation speed
* @param {string} [b=1] this is foo
*/ {
  return a + b;
};


console.log(parsefunc(heavyComputation));

{
  "name": "heavyComputation",
  "params": {
    "a": {
      "type": "string",
      "descr": "Initial rotation speed",
      "optional": false
    },
    "b": {
      "type": "string",
      "descr": "this is foo",
      "value": "1",
      "optional": true
    }
  },
  "blocs": // all parsed @sections
  "doc": [
    "This function computer bar"
  ],
  "jsdoc": // raw comment string
}

Credits