[duongvanba] ts-cote
Build microservice faster with Typescript Decorators
- Define responder, requester, Subscriber, publisher with decorator
- Catch service peers online/offline event
- Get current service node infomation
Usage
See cote docs if you want to know more about cote
Install ts-cote
yarn add ts-cote
Enable decorators in tsconfig.json
{
"emitDecoratorMetadata": true,
"experimentalDecorators": true
}
Define an event
export class SomeEvent{
message: string;
}
Define an event listener
import { CoteLoader, Subscriber } from "../src";
import { SomeEvent } from './events';
export class EventListener extends CoteLoader(__filename) {
@Subscriber(SomeEvent)
public $(data: SomeEvent){
console.log('New event SomeEvent with data : ', data);
}
}
Define a responder with publisher
import { Cote, Publisher, Responder, Emitter} from "../src"
import { SomeEvent } from './events';
export class RandomService extends Cote(__filename) {
@Publisher(SomeEvent)
notify : Emitter<SomeEvent>;
@Responder()
public async plus(a: number, b: number) : Promise<number>{
this.notify({message: 'NEw plus request with params'+a+' '+b});
return a+b;
}
}
Create startpoint
import { EventListener } from './Subscriber';
new EventListener();
import { RandomService } from './responder-publisher';
new RandomService();
import { Cote, Requester, PeersOnline, Subscriber, PeersOffline} from "../src"
import { RandomService} from './responder-publisher';
import { ServiceNodeInfo } from "../src/interfaces";
export class TestRequest extends Cote(__filename) {
@Requester()
r : RandomService
@PeersOnline(RandomService)
private _(info : ServiceNodeInfo){
console.log('Random service on');
}
@PeersOffline(RandomService)
private __(info : ServiceNodeInfo){
console.log('Random service off');
}
}
(async()=>{
const x = new TestRequest();
await x.ready;
console.log(await x.r.plus(45,78));
console.log(x.getInfo(RandomService))
console.log(x.getInfo())
})();
Run tests (require nodejs + npm)
cd examples
npm i yarn
yarn add ts-node-dev typescript --dev
ts-node-dev start-Subscriber.ts #Run in terminal window 1
ts-node-dev start-responder-publisher.ts #Run in terminal window 2
ts-node-dev start-requester.ts # Run in terminal window 3