1.0.0 • Published 5 years ago

babel-plugin-parameter-decorator-custom v1.0.0

Weekly downloads
4
License
MIT
Repository
github
Last release
5 years ago

Babel Plugin Parameter Decorator

npm.io npm.io npm.io

Function parameter decorator transform plugin for babel v7, just like typescript parameter decorator

function validate(target, property, descriptor) {
  const fn = descriptor.value;

  descriptor.value = function (...args) {
    const metadata = `meta_${property}`;
    target[metadata].forEach(function (metadata) {
      if (args[metadata.index] === undefined) {
        throw new Error(`${metadata.key} is required`);
      }
    });

    return fn.apply(this, args);
  };

  return descriptor;
}

function required(key) {
  return function (target, propertyKey, parameterIndex) {
    const metadata = `meta_${propertyKey}`;
    target[metadata] = [
      ...(target[metadata] || []),
      {
        index: parameterIndex,
        key
      }
    ]
  };
}

class Greeter {
    constructor(message) {
        this.greeting = message;
    }

    @validate
    greet(@required('name') name) {
        return "Hello " + name + ", " + this.greeting;
    }
}

NOTE:

This package depends on @babel/plugin-proposal-decorators.

Installation & Usage

npm install @babel/plugin-proposal-decorators babel-plugin-parameter-decorator -D

And the .babelrc looks like:

    {
        "plugins": [
            ["@babel/plugin-proposal-decorators", { "legacy": true }],
            "babel-plugin-parameter-decorator"
        ]
    }