1.0.0 • Published 3 years ago

@alt-javascript/decorates v1.0.0

Weekly downloads
-
License
MIT
Repository
github
Last release
3 years ago

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.