1.1.2 • Published 4 years ago
decoration-helper v1.1.2
Decoration Helper
This is a absolutely tiny library to help decorate functions or classes in a prettier way in the ugly messy pre-standardized decorator spec era of Javascript.
Features:
- Natural composition with
decorate(...).with(fn)
- Decorator style composition with
apply(...).to(fn)
- Functional
pipe(...)(fn)
andcompose(...)(fn)
included.
Installation
If you're here, you already know.
yarn add decoration-helper
Usage
To achieve this
@inject('app', 'auth')
@withRouter
@observer
function tomato() {
console.log("tomato");
}
export default tomato;
you write this:
import { apply } from 'decoration-helper';
function tomato() {
console.log("tomato");
}
export default apply(
inject('app', 'auth'),
withRouter,
observer
).to(tomato);
or alternatively this, if you prefer:
import { decorate } from 'decoration-helper';
function tomato() {
console.log("tomato");
}
export default decorate(tomato).with(
observer,
withRouter,
inject('app', 'auth')
);
Note: The order is not reversed when using decorate(obj).with(...decorators)
pipe()
and compose()
The proper functional approach would be to use pipe()
and compose()
as described by
Eric Elliot.
This post has
more details about it.
// Analogous to decorate(fn).with(...);
import { pipe } from 'decoration-helper';
function tomato() {
console.log("tomato");
}
export default pipe(
observer,
withRouter,
inject('app', 'auth')
)(tomato);
// Analogous to apply(...).to(fn);
import { compose } from 'decoration-helper';
function tomato() {
console.log("tomato");
}
export default compose(
inject('app', 'auth'),
withRouter,
observer
)(tomato);
License
MIT