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

72% Statements 18/25
50% Branches 2/4
50% Functions 5/10
69.57% Lines 16/23

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
    7x
    7x

    7x
    5x

    7x

    5x
    5x
    5x

    5x

    12x

    7x
    5x

    12x
    7x

    5x
    5x

     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;
        method_name?: string;
        method_type?: 'query' | 'subscription' | 'mutation';
        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();
        _descriptors: Map<string, TypedPropertyDescriptor<() => GenericGapiResolversType>> = new Map();
        _ready: Subject<boolean> = new Subject();
        constructor(name: string) {
            this._controller_name = name;
        }

        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);
        }

    }