https://github.com/jaystack/metacode
Metaprogramming tools for JavaScript
https://github.com/jaystack/metacode
Last synced: about 2 months ago
JSON representation
Metaprogramming tools for JavaScript
- Host: GitHub
- URL: https://github.com/jaystack/metacode
- Owner: jaystack
- License: mit
- Created: 2015-12-30T03:28:13.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2015-12-30T05:57:39.000Z (over 9 years ago)
- Last Synced: 2025-03-27T08:11:22.565Z (2 months ago)
- Language: JavaScript
- Size: 10.7 KB
- Stars: 11
- Watchers: 19
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
#Metacode
JavaScript metaprogramming tools for TypeScript and Babel.
##What is metaprogramming?
https://en.wikipedia.org/wiki/MetaprogrammingIt has many uses but some of the most importants are:
- Allow model driven designs - limitless DDD
- Aspects and attached behavior
- DataAnnotations and data validation
- Tooling aid... and a whole lot more
## Usage
```
$ npm install --save metacode
```App.ts
```javascript
import {member} from 'metacode'var env = "DEV"
var config : { slow: 500 }
class MyCustomClass extends SomeBaseClass {
@member.hidden // modify property descriptor, ctor time
public myFun1() {
}
@member.before(console.log.bind(console)) //monitor invocation
@member.before( args => { args[0] += 10 } ) // tamper with inparams
@member.after( retVal => retVal * 2) //or with the result
public myFunc2(a, b) {
return a + b
}
@member.before(( ) => ENV !== "DEV" : false : true) //turn logger into noop in prod
@member.before( () => ENV === "DEV") //same but shorter
public logger(msg, data) {
console.log(arguments)
}@member.after( (retval, inparams, name, time) => {
if (time > config.slow) {
console.log("Method is not fast!", name)
}
}) //attach some conditional logging
public slowmethod(msg, data) {
console.log(arguments)
}
}
```###The hidden meta
Hides a member from member listings (enumerable = false) in propdescriptor wise.