Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/CocktailJS/traits-decorator
Traits with decorators
https://github.com/CocktailJS/traits-decorator
decorators es7 nodejs trait traits-decorator
Last synced: 11 days ago
JSON representation
Traits with decorators
- Host: GitHub
- URL: https://github.com/CocktailJS/traits-decorator
- Owner: CocktailJS
- License: mit
- Created: 2015-06-20T01:26:40.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2016-08-25T21:06:12.000Z (about 8 years ago)
- Last Synced: 2024-04-29T20:05:40.119Z (7 months ago)
- Topics: decorators, es7, nodejs, trait, traits-decorator
- Language: JavaScript
- Homepage:
- Size: 35.2 KB
- Stars: 137
- Watchers: 7
- Forks: 8
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE-MIT
Awesome Lists containing this project
README
# traits-decorator
[![npm version](https://badge.fury.io/js/traits-decorator.svg)](http://badge.fury.io/js/traits-decorator)
[![Build Status](https://travis-ci.org/CocktailJS/traits-decorator.svg)](https://travis-ci.org/CocktailJS/traits-decorator)
[![bitHound Score](https://www.bithound.io/github/CocktailJS/traits-decorator/badges/score.svg)](https://www.bithound.io/github/CocktailJS/traits-decorator)Experimental library to apply Traits with ES7 decorators.
## Install
> using npm
```
npm i -S traits-decorator
```> using git repository
```
npm i -S git://github.com/cocktailjs/traits-decorator
```## API
## Decorators
### @traits(Trait1, ...TraitN)
Applicable to `class` definition. It will apply all the given Traits to the class.```js
@traits(TExample) class MyClass {}
```### @requires(description1, ...descriptionN)
Applicable to a method defined in a Trait. The decorator **does nothing** but it serves as a documentation to reflect what method / property the method needs access to.```js
class TFoo {@requires('bar: {String}')
fooBar() {
console.log('foo,' + this.bar);
}
}
```## Bindings
### excludes(Method1, ...MethodN)
Applicable to Trait definition in '@traits'. It will exclude the given method names from the Trait.```js
@traits(TExample::excludes('foo', 'bar'))
class MyClass {}
```### alias(aliases: {})
Applicable to Trait definition in '@traits'. It will alias the method defined in the Trait with the `key` as the `value` .```js
@traits(TExample::alias({baz: 'parentBaz'}))
class MyClass {}
```### as({alias: {}, excludes: []})
Applicable to Trait definition in '@traits'. It will apply aliases and excluded methods from the Trait```js
@traits( TExample::as({alias: {baz: 'parentBaz'}, excludes:['foo', 'bar'] }) )
class MyClass {}
```## Usage
Basically, we have a few Traits (classes) TFirst, TLast and we combine and apply them by using `traits` decorator:> example.js
```js
'use strict';import { traits, excludes, alias, requires } from 'traits-decorator'
class TFirst {
@requires('collection:[]')
first() {
return this.collection[0];
}}
class TLast {
@requires('collection:[]')
last() {
let collection = this.collection;
let l = collection.length;
return collection[l-1];
}justAnother() {}
foo() {
console.log('from TLast\'s foo');
}
}//composing a Trait with others
@traits( TFirst, TLast::excludes('foo', 'justAnother') )
class TEnum {foo() {
console.log('enum foo')
}
}//apply trait TEnum
@traits(TEnum::alias({ foo: 'enumFoo' }) )
class MyClass {constructor (collection = []) {
this.collection = collection
}
}let obj = new MyClass([1,2,3])
console.log(obj.first()) // 1
obj.enumFoo() // enum foo
```
In order to run the `example.js` we need babel and since we are using some experimental functionality, decorators (@traits) and bindOperator (::) we need to use the `--stage 0`.
```
babel-node --stage 0 example.js
```## Update
@mixins decorator has been removed. If you want to use `mixins` please use [mixins-decorator](https://www.npmjs.com/package/mixins-decorator) package.## License MIT