@alt-javascript/decorates

1.0.0 • Public • Published

A Simple Decorator Pattern For JavaScript

NPM
Language Badge Package Badge
release notes

Introduction

A simple convention-based class decorator pattern assertion function, supporting strings and classes with static .is and .with properties.

Usage

Define yourself some "Decorators" as so, taking note of the funky wrapping function convention (it's important for property decorators with parameters).

const Spicy  = class Spicy {
}
module.exports = function (name,exists) { return new Spicy();}

Define a class, and decorate it as so

const Sour = require('../decorators/Sour');
const Spicy = require('../decorators/Spicy');

module.exports = new class TomYum extends Dish {
    static is = 'Soup';
    static with = ['Sweet',Sour(),Spicy];

    constructor(){
        super ('Thai')// .. => this.origin = origin;
    }
}

All good, now you can use the assertion function to check if your class is decorated. The function converts the Decorator name down to string, so you can mix and match with just simple strings if you are being super breezy.

const decorates = require('../decorates');
const Sour = require('./decorators/Sour');
const Salty = require('./decorated/Salty');
const TomYum = require('./decorated/TomYum');

//...

assert.isTrue(decorates(Sour,TomYum), "Sour decorates TomYum is true");
assert.isTrue(decorates('Spicy',TomYum), "'Spicy' decorates TomYum is true");
assert.isFalse(decorates(Salty(),TomYum), "Salty() decorates TomYum is false");
//...
assert.isTrue(decorates('Thai', (new TomYum).origin), "Thai decorates tomYum.origin is true");

Might come in useful.

Package Sidebar

Install

npm i @alt-javascript/decorates

Weekly Downloads

1

Version

1.0.0

License

MIT

Unpacked Size

7.08 kB

Total Files

5

Last publish

Collaborators

  • craigparra