node-lombok
- A lightweight npm package for typescript decorators which mimic some of the functionalities offered by lombok for java.
Usage
- Install with
npm i node-lombok
- Please ensure that you have set
experimentalDecorators
set as true
in your tsconfig.json
@Data
@Data
adds getters and setters for all defined attributes. Refer example below:- If you define your own getters / setters methods then it will be overwritten by @Data
A get method will capitilize the first letter of the attribute and add "get" as a prefix. So basically a get method for "name" will look like "getName"
A set method will capitilize the first letter of the attribute and add "set" as a prefix. So basically a set method for "name" will look like "setName"
import { Data } from 'node-lombok';
@Data()
class User {
[x: string]: any;
private name: string;
private email: string;
constructor(name: string, email: string) {
this.name = name;
this.email = email;
}
}
const user = new User('', '');
user.setName('user');
user.setEmail('user@email.com');
console.log(user.getName());
console.log(user.getEmail());
@Getters
@Getters
adds getters for all defined attributes- If you define your own getter method then it will be overwritten by @Getters
A get method will capitilize the first letter of the attribute and add "get" as a prefix. So basically a get method for "name" will look like "getName"
import { Getters } from 'node-lombok';
@Getters()
class User {
[x: string]: any;
private name: string;
private email: string;
constructor(name: string, email: string) {
this.name = name;
this.email = email;
}
}
const user = new User('user', 'user@email');
console.log(user.getName());
console.log(user.getEmail());
@Setters
@Setters
adds setters for all defined attributes- If you define your own setter method then it will be overwritten by @Setters
- A set method is will capitilize the first letter of the attribute and add
set
as a prefix. So basically a set method for name will look like setName
A set method will capitilize the first letter of the attribute and add "set" as a prefix. So basically a set method for "name" will look like "setName"
import { Setters } from 'node-lombok';
@Setters()
class User {
[x: string]: any;
private name: string;
private email: string;
constructor(name: string, email: string) {
this.name = name;
this.email = email;
}
}
const user = new User('', '');
user.setName('user');
user.setEmail('user@email.com');
console.log(user);
@Store
@Store
sets up storage for all objects of a class.- storage is basically just a map where the instantiated object is stored agains it's
_id
. - The
_id
is auto incremented and storageMap looks like: { _id: object }
.
If you use please don't define "_id", "getId()" and "static findById" in your class as they are already defined by the decorator
You'll have to use @ts-ignore as a comment when calling `ClassName.findById` because ts doesn't recognize `findById` method
import { Store } from 'node-lombok';
@Store()
class User {
[x: string]: any;
private name: string;
constructor(name: string) {
this.name = name;
}
}
const a = new User('A');
const b = new User('B');
console.log(User.findById(2));