@t2ee/luke
TypeScript icon, indicating that this package has built-in type declarations

1.3.0 • Public • Published

NPM version build status Test coverage

#Luke

A RPC framework for typescript, with the simplest way to setup.

##Example

import {
	Server,
	Client,
  decorators,
  providers,
} from '@t2ee/luke';
const {
  RemoteMethod,
  RemoteService,
} = decorators;
const {
  AMQPProvider,
} = providers;

//provider for luke.
const provider = new AMQPProvider('amqp://localhost:5672');


// this is the definition shared by both server and client.

@RemoteService('Test')
class ITestService {
    @RemoteMethod()
    async echo(message: string): Promise<string> { return null;}
}


// this is the real implementation of the service
class TestService extends ITestService {
    async echo(message: string) {
        return `You've said ${message}`;
    }
}

const server = new Server(provider); // listen on port 6001
server.register(ITestService);
server.start()
// tada! server is now running.

const client = new Client(provider);

const testClient = client.getClient(ITestService);

// now let's hear some echoooooooos!
(async () => {
	const message = await testClient.echo('hello world');
	console.log(message);
})().catch(e => console.log(e));



##Providers ###AMQPProvider(uri: string, topic: string) ###RedisProvider(uri: string, topic: string, retryTimeout: number) ###SocketIOProvider(socketOrPort: number | string)

##API

###Client

####constructor(provider: Provider)

constructor, takes an provider implementation

####getClient(service: new () => T): T

Wrap the service with hooks, returns the client that are callable

###Server

####constructor(provider: Provider)

constructor, takes an provider implementation

####register(service: new () => T): void

Register an interface

####start(): void

Start listening

####stop(): void

Stop listening

####isRunning(): boolean

If service is running

####setConcurrency(concurrency: number): void

Set concurrency of running task runners.

###abstract Serializable

abstract class, data other than number, string, boolean that pass through the interfaces, must be children of Serializable.

class Person extends Serializable<Person> {
    name: string;
    age: number;
    fromJson(json: utils.Json): Person {
        this.name = json['name'] as string;
        this.age = json['age'] as number;
        return this;
    }
    toJson(): utils.Json {
        return {
            name: this.name,
            age: this.age,
        };
    }
}

####abstract toJson(): utils.Json

return Json result

####abstract fromJson(data: utils.Json): T

return parsed instance

##Plans

  • [ ] TcpProvider
  • [ ] UdpProvider

Readme

Keywords

none

Package Sidebar

Install

npm i @t2ee/luke

Weekly Downloads

4

Version

1.3.0

License

MIT

Last publish

Collaborators

  • joesonw