@alt-javascript/decorates
v1.0.0
Published
A simple convention-based class decorator pattern assertion function, supporting strings and classes with static .is and .with properties.
Downloads
5
Maintainers
Readme
A Simple Decorator Pattern For JavaScript
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.