Skip to content

Commit 6d41bf7

Browse files
authored
Merge pull request #4 from scalecube/poc
Pass errors swallow by promise to the observable + Fix loader type + minor fixes
2 parents b96c05d + 4e00e8a commit 6d41bf7

File tree

7 files changed

+40
-38
lines changed

7 files changed

+40
-38
lines changed

index.d.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ interface Class0 {
3535

3636
servicesConfig: ServicesConfig;
3737
build(): Microservices;
38-
serviceLoaders(...services: Array<{loader: () => {promise: Promise<any>}, serviceClass: any}>): Class0;
38+
serviceLoaders(...services: Array<{loader: () => Promise<any>, serviceClass: any}>): Class0;
3939
services(...services: Array<any>): Class0;
4040
}
4141
export class DispatcherContext {
@@ -115,7 +115,7 @@ export class ServicesConfig {
115115
servicesConfig: Array<ServicesConfig>;
116116
constructor(service: any, builder?:Class0);
117117
}
118-
declare var utils: {getServiceInterface: (o: Object) => any, getServiceName: (o: Object) => any | any | any | any | any, isLoader: (inst: Object | null) => null | any | any | boolean, makeLoader: (loadFunction: {promise: Promise<any>}, Class: any) => {meta: any, promise: {promise: Promise<any>}}};
118+
declare var utils: {getServiceInterface: (o: Object) => any, getServiceName: (o: Object) => any | any | any | any | any, isLoader: (inst: Object | null) => null | any | any | boolean, makeLoader: (loadFunction: Promise<any>, Class: any) => {meta: any, promise: Promise<any>}};
119119

120120

121121

index.js.flow

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ declare class Class0 {
2929

3030
servicesConfig: ServicesConfig;
3131
build(): Microservices;
32-
serviceLoaders(...services: Array<{loader: () => {promise: Promise<any>}, serviceClass: any}>): Class0;
32+
serviceLoaders(...services: Array<{loader: () => Promise<any>, serviceClass: any}>): Class0;
3333
services(...services: Array<any>): Class0;
3434
}
3535
declare export class DispatcherContext {
@@ -109,4 +109,4 @@ declare export class ServicesConfig {
109109
servicesConfig: Array<ServicesConfig>;
110110
constructor(service: any, builder: ?Class0): ServicesConfig | ServicesConfig;
111111
}
112-
declare export var utils: {getServiceInterface: (o: Object) => any, getServiceName: (o: Object) => any | any | any | any | any, isLoader: (inst: Object | null) => null | any | any | boolean, makeLoader: (loadFunction: {promise: Promise<any>}, Class: any) => {meta: any, promise: {promise: Promise<any>}}};
112+
declare export var utils: {getServiceInterface: (o: Object) => any, getServiceName: (o: Object) => any | any | any | any | any, isLoader: (inst: Object | null) => null | any | any | boolean, makeLoader: (loadFunction: Promise<any>, Class: any) => {meta: any, promise: Promise<any>}};

src/scalecube-services/services/Microservices.js

Lines changed: 20 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,52 @@
11
// @flow
2-
import { ServicesConfig, ServiceRegistery, ProxyContext, DispatcherContext, utils } from 'src/scalecube-services/services'
2+
import {
3+
ServicesConfig,
4+
ServiceRegistery,
5+
ProxyContext,
6+
DispatcherContext,
7+
utils
8+
} from 'src/scalecube-services/services'
39

410
class Builder {
511
servicesConfig: ServicesConfig;
6-
constructor(){
12+
13+
constructor() {
714
this.servicesConfig = new ServicesConfig([]);
815
}
9-
services(...services:any[]){
16+
17+
services(...services: any[]) {
1018
this.servicesConfig = ServicesConfig.builder(this)
1119
.services(services)
1220
.create();
1321
return this;
1422
}
15-
serviceLoaders(...services:{loader:()=>{promise:Promise<any>}, serviceClass:any}[]){
16-
services.map((s)=>this.services(utils.makeLoader(s.loader(), s.serviceClass)));
23+
24+
serviceLoaders(...services: { loader: () => Promise<any>, serviceClass: any }[]) {
25+
services.map((s) => this.services(utils.makeLoader(s.loader(), s.serviceClass)));
1726
return this;
1827
}
28+
1929
build(): Microservices {
2030
return new Microservices(this.servicesConfig);
2131
}
2232
}
2333
export class Microservices {
2434
static Builder: Builder;
2535
serviceRegistery: ServiceRegistery;
26-
constructor(serviceConfig: ServicesConfig){
36+
37+
constructor(serviceConfig: ServicesConfig) {
2738
this.serviceRegistery = new ServiceRegistery(serviceConfig);
2839
return this;
2940
}
41+
3042
static builder() {
3143
return new Builder();
3244
};
45+
3346
proxy() {
3447
return new ProxyContext(this);
3548
}
49+
3650
dispatcher() {
3751
return new DispatcherContext(this);
3852
}

src/scalecube-services/services/ServiceCall.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
import { Router, Message, utils } from 'src/scalecube-services/services';
44
import { Observable } from 'rxjs/Observable';
5+
// $FlowFixMe
6+
import 'rxjs/add/operator/catch';
7+
58

69
const isObservable = (obj: any): boolean => {
710
if (obj.constructor.name === 'Observable') {
@@ -36,10 +39,12 @@ export class ServiceCall {
3639
if (!Array.isArray(message.data)) {
3740
return reject(new Error(`Message format error: data must be Array`));
3841
}
42+
3943
const inst = this.router.route(message);
44+
4045
if (inst && inst.service && utils.isLoader(inst)) {
4146
return inst.service.promise.then((myservice) => {
42-
return resolve(myservice[ message.method ](...message.data))
47+
return resolve(myservice[ message.method ](...message.data));
4348
});
4449
} else if (inst) {
4550
return resolve(inst.service[ message.method ](...message.data));
@@ -58,12 +63,14 @@ export class ServiceCall {
5863
observer.error(new Error(`Service not found error: ${message.serviceName}.${message.method}`));
5964
} else if (utils.isLoader(inst)) {
6065
let unsubscribe;
61-
const promise = inst.service.promise;
62-
promise.then((service) => {
63-
unsubscribe = createServiceObserver(message, service, observer);
66+
const promise = new Promise(resolve=>{
67+
inst.service.promise.then((service) => {
68+
resolve(createServiceObserver(message, service, observer));
69+
}).catch(e=>observer.error(e));
70+
6471
});
6572
return () => {
66-
promise.then(() => unsubscribe())
73+
promise.then(unsubscribe => unsubscribe());
6774
};
6875
} else {
6976
return createServiceObserver(message, inst.service, observer);

src/scalecube-services/services/ServiceDefinition.js

Lines changed: 1 addition & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,29 +26,11 @@ export class ServiceDefinition {
2626
}
2727
static from(service: Object) {
2828
const methods = {};
29-
//const x = new service();
30-
/*Object.getOwnPropertyNames(Object.getPrototypeOf(service)).map((method) => {
31-
if (method !== 'constructor' && typeof service[ method ] === 'function') {
32-
methods[ method ] = service[ method ];
33-
}
34-
});*/
29+
3530
const meta = service.constructor.meta || service.meta;
3631
Object.keys(meta.methods).map((key)=>{
3732
methods[ key ] = ServiceDefinition.getMethod(meta, service, key);
3833
});
3934
return new ServiceDefinition(service, utils.getServiceName(service), methods);
4035
}
41-
/*static fromPromise(service: ServicePromise<Object>){
42-
const methods = {};
43-
44-
45-
46-
Object.getOwnPropertyNames(Object.getPrototypeOf(service)).map((method) => {
47-
if (method !== 'constructor' && typeof service[ method ] === 'function') {
48-
methods[ method ] = service[ method ];
49-
}
50-
});
51-
52-
return new ServiceDefinition(service, utils.getServiceName(service), methods);
53-
}*/
5436
}

src/scalecube-services/services/utils.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// @flow
22

33

4-
54
export const getServiceInterface = (o: Object) => {
65
// we`ll have to think about this one... right new just a name
76
return o.constructor.name;
@@ -12,7 +11,7 @@ export const getServiceName = (o: Object) => {
1211
export const isLoader = (inst: Object | null) => {
1312
return inst && inst.service && inst.service.meta && inst.service.meta.type === 'Loader';
1413
}
15-
export const makeLoader = (loadFunction: {promise:Promise<any>}, Class:any) => {
14+
export const makeLoader = (loadFunction: Promise<any>, Class: any) => {
1615
return {
1716
promise: loadFunction,
1817
meta: Object.assign(Class.meta, {

test/scalecube-services/services/greeting.test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ describe('Greeting suite', () => {
3434
.create();
3535

3636
expect.assertions(1);
37-
return expect().rejects.toEqual(new Error("please provide user to greet"));
37+
return expect(greetingService.hello()).rejects.toEqual(new Error("please provide user to greet"));
3838

3939
});
4040
it('Greeting.repeatToStream should return observable of greetings ', () => {
@@ -95,7 +95,7 @@ describe('Greeting suite', () => {
9595
.api(GreetingService)
9696
.create();
9797

98-
expect.assertions(1);
98+
expect.assertions(1);
9999
greetingService.repeatToStream('hey', 'hello').subscribe().unsubscribe();
100100
expect(window['repeatToStreamUnsubscribe']).toBe(true);
101101
});

0 commit comments

Comments
 (0)