All files / utils/services/controller-service controller.service.ts

73.08% Statements 19/26
50% Branches 2/4
50% Functions 5/10
70.83% Lines 17/24

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80  8x 8x   8x 6x                                         8x   6x   6x 6x   6x 6x               14x                           8x 6x                 14x 8x   6x 6x                  
import { GraphQLObjectType, GraphQLNonNull } from 'graphql';
import { Service } from '../../../utils/container/index';
import { Subject } from 'rxjs/Subject';
 
export class ControllerMappingSettings {
    scope?: string[] = ['ADMIN'];
    type?: GraphQLObjectType;
    public?: boolean;
}
 
export interface GenericGapiResolversType {
    scope?: string[];
    target?: any;
    effect?: string;
    method_name?: string;
    method_type?: 'query' | 'subscription' | 'mutation' | 'event';
    type: GraphQLObjectType;
    resolve?(root: any, args: Object, context: any);
    args?: {
        [key: string]: {
            [type: string]: GraphQLObjectType | GraphQLNonNull<any>;
        };
    };
}
 
 
export class ControllerMapping {
    _controller_name: string;
    _settings: ControllerMappingSettings = new ControllerMappingSettings();
    _type: string;
    _descriptors: Map<string, TypedPropertyDescriptor<() => GenericGapiResolversType>> = new Map();
    _ready: Subject<boolean> = new Subject();
    constructor(name: string, type?: string) {
        this._controller_name = name;
        this._type = type;
    }
 
    setSettings(settings: ControllerMappingSettings) {
        this._settings = settings;
    }
 
    setDescriptor(name: string, descriptor: TypedPropertyDescriptor<() => GenericGapiResolversType>): void {
        this._descriptors.set(name, descriptor);
    }
 
    getDescriptor(name: string): TypedPropertyDescriptor<() => GenericGapiResolversType> {
        return this._descriptors.get(name);
    }
 
    getAllDescriptors(): string[] {
        return Array.from(this._descriptors.keys());
    }
 
}
 
@Service()
export class ControllerContainerService {
    controllers: Map<string, ControllerMapping> = new Map();
    getController(name: string): ControllerMapping {
        if (!this.controllers.has(name)) {
            return this.createController(name);
        } else {
            return this.controllers.get(name);
        }
    }
    createController(name: string): ControllerMapping {
        if (this.controllers.has(name)) {
            return this.controllers.get(name);
        } else {
            this.controllers.set(name, new ControllerMapping(name));
            return this.controllers.get(name);
        }
 
    }
 
    controllerReady(name: string) {
        this.getController(name)._ready.next(true);
    }
 
}